2012-08-14 13 views
11

जहां तक ​​मुझे पता है, मैकबुक एयर 2012 ओपनजीएल 3.2 का समर्थन करता है। ओपनजीएल संदर्भ बनाने के लिए एसडीएल 2.0 का उपयोग करते समय, संदर्भ केवल ओपनजीएल संस्करण 2.1 है।ओएसजी (मैकबुक एयर 2012) पर एसडीएल 2 का उपयोग कर ओपनजीएल 3.x संदर्भ निर्माण

क्या एसडीएल 2.0 के लिए जीएल 3.2 संदर्भ बनाने के लिए यह संभव है?

उत्तर

27

हर कोई है जो अभी भी बुधवार के रूप में यह समस्या है के लिए, अक्टूबर 10 वें, SDL2 आप Mac OS X 10.7 (शेर) और ऊपर चल रहा Macs पर एक ओपन 3.2 संदर्भ बनाने के लिए अनुमति देता है। आप

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 
से ओएस एक्स 10.10 चल तो रहे हैं, या अभी भी ऊपर समाधान समस्या हल नहीं होती, ऊपर के उदाहरण की दूसरी पंक्ति को बदलने

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 

: तुम बस इस कोड को जोड़ने की जरूरत है

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); 

आप के लिए काम कर सकते हैं।

+0

इस जादू के लिए धन्यवाद! –

0

should be possible कि:

#include <stdio.h> 
#include <stdlib.h> 
/* If using gl3.h */ 
/* Ensure we are using opengl's core profile only */ 
#define GL3_PROTOTYPES 1 
#include <GL3/gl3.h> 

#include <SDL.h> 
#define PROGRAM_NAME "Tutorial1" 

/* A simple function that prints a message, the error code returned by SDL, 
* and quits the application */ 
void sdldie(const char *msg) 
{ 
    printf("%s: %s\n", msg, SDL_GetError()); 
    SDL_Quit(); 
    exit(1); 
} 


void checkSDLError(int line = -1) 
{ 
#ifndef NDEBUG 
    const char *error = SDL_GetError(); 
    if (*error != '\0') 
    { 
     printf("SDL Error: %s\n", error); 
     if (line != -1) 
      printf(" + line: %i\n", line); 
     SDL_ClearError(); 
    } 
#endif 
} 


/* Our program's entry point */ 
int main(int argc, char *argv[]) 
{ 
    SDL_Window *mainwindow; /* Our window handle */ 
    SDL_GLContext maincontext; /* Our opengl context handle */ 

    if (SDL_Init(SDL_INIT_VIDEO) < 0) /* Initialize SDL's Video subsystem */ 
     sdldie("Unable to initialize SDL"); /* Or die on error */ 

    /* Request opengl 3.2 context. 
    * SDL doesn't have the ability to choose which profile at this time of writing, 
    * but it should default to the core profile */ 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 

    /* Turn on double buffering with a 24bit Z buffer. 
    * You may need to change this to 16 or 32 for your system */ 
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); 

    /* Create our window centered at 512x512 resolution */ 
    mainwindow = SDL_CreateWindow(PROGRAM_NAME, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 
     512, 512, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN); 
    if (!mainwindow) /* Die if creation failed */ 
     sdldie("Unable to create window"); 

    checkSDLError(__LINE__); 

    /* Create our opengl context and attach it to our window */ 
    maincontext = SDL_GL_CreateContext(mainwindow); 
    checkSDLError(__LINE__); 


    /* This makes our buffer swap syncronized with the monitor's vertical refresh */ 
    SDL_GL_SetSwapInterval(1); 

    /* Clear our buffer with a red background */ 
    glClearColor (1.0, 0.0, 0.0, 1.0); 
    glClear (GL_COLOR_BUFFER_BIT); 
    /* Swap our back buffer to the front */ 
    SDL_GL_SwapWindow(mainwindow); 
    /* Wait 2 seconds */ 
    SDL_Delay(2000); 

    /* Same as above, but green */ 
    glClearColor (0.0, 1.0, 0.0, 1.0); 
    glClear (GL_COLOR_BUFFER_BIT); 
    SDL_GL_SwapWindow(mainwindow); 
    SDL_Delay(2000); 

    /* Same as above, but blue */ 
    glClearColor (0.0, 0.0, 1.0, 1.0); 
    glClear (GL_COLOR_BUFFER_BIT); 
    SDL_GL_SwapWindow(mainwindow); 
    SDL_Delay(2000); 

    /* Delete our opengl context, destroy our window, and shutdown SDL */ 
    SDL_GL_DeleteContext(maincontext); 
    SDL_DestroyWindow(mainwindow); 
    SDL_Quit(); 

    return 0; 
} 
+0

ध्यान दें कि इसे एसडीएल में विशेष समर्थन की आवश्यकता होगी, क्योंकि मैकॉक्स के संदर्भ निर्माण API 3.2 और 2.1 के लिए अलग है। –

+0

आह हाँ, मैंने उस ट्यूटोरियल को भी देखा। उस सटीक कोड का उपयोग अभी भी ओएसएक्स माउंटेन शेर के साथ वायु पर ओपनजीएल 2.1 संदर्भ उत्पन्न करता है।मेरे पास कुछ विंडोज मशीनों पर (एनवीडिया और एटीआई कार्ड के साथ) यह उच्चतम समर्थित संस्करण (उदा। 3.3) के साथ एक संदर्भ बनाता है। –

+0

@ निकोलबोलस मैं इस बिंदु पर सोच रहा हूं .... यह बस एसडीएल के वर्तमान संस्करण की कमी हो सकता है। –

1

संपादित करें: - SDL2 अब यह मूल रूप से समर्थन करना चाहिए https://stackoverflow.com/a/13095742/123387 देखें। नीचे दिया गया नोट नवीनतम एसडीएल 2 रिलीज से पहले संस्करणों के लिए है।

वर्तमान संस्करण (21:00:33 2012 -0400 के बुध अगस्त 15, 6398 : c294faf5fce5) 10.7 श्रृंखला का समर्थन नहीं करता। हालांकि, यदि आप किक्स के लिए अस्थिर एसडीएल चलाने के इच्छुक हैं तो समर्थन जोड़ने के लिए तरीका है।

src/वीडियो/कोको/SDL_cocoaopengl.m +90 (Cocoa_GL_CreateContext)

if(_this->gl_config.major_version == 3 &&               
    _this->gl_config.minor_version == 2)                
{                         
    attr[i++] = NSOpenGLPFAOpenGLProfile;               
    attr[i++] = NSOpenGLProfileVersion3_2Core;              
}  
फिर अपने आवेदन में

, इन पंक्तियों के साथ कुछ:

इस एक शॉट दे।

SDL_Init(SDL_INIT_EVERYTHING);                                  

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);            
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);            

window = SDL_CreateWindow("3.2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,     
       640, 480, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);                        

context = SDL_GL_CreateContext(window);  

मैं 2011 से 10.7.4 के तहत मेरे मैक एयर चला रहा हूँ और जब मैं कुछ जीएल 3.2 से निदान चलाने एसडीएल आवेदन सक्षम मैं:

Driver  : cocoa 
Renderer : Intel HD Graphics 3000 OpenGL Engine 
Vendor  : Intel Inc. 
Version : 3.2 INTEL-7.18.18 
GLSL  : 1.50 

मैं बहुत परीक्षण नहीं किया इसके बाहर, लेकिन उम्मीद है कि कोई और इसे एक स्टैब दे सकता है और थोड़ा और सफलता प्राप्त कर सकता है।

संपादित करें: यदि आप GLEW का उपयोग कर रहे हैं तो आप glewExperimental को सक्षम करना चाहते हैं। ध्यान दें कि 3.2 कोर प्रोफ़ाइल में एक बग है जब आप GL_EXTENSIONS क्वेरी करते हैं। यह 1280 की रिपोर्ट करेगा (जैसे कि यह समर्थित नहीं था) - हालांकि आपको 1.50 शेडर्स और इसी तरह से उपयोग करने से प्रभावित नहीं करना चाहिए।

+0

यह कम से कम अस्थायी रूप से अच्छी तरह से करना चाहिए। –

+0

कृपया डेविड ग्रीनर की टिप्पणी देखें। –

संबंधित मुद्दे