2016-07-14 12 views
0

Ich versuche, openGL mit SDL zu verwenden, und immer wenn ich meine Version während der Laufzeit überprüfe, gibt es immer zurück, dass ich openGL Version 2.1 verwende. Nun zu meinem Verständnis einschließlich gl3.h gab Ihnen die 3.2+ Funktionalität von openGL. Neben diesem Punkt frage ich speziell nach Version 4.1 von openGL und anscheinend läuft noch 2.1. Kann mir bitte jemand sagen, was ich falsch mache? Ich betreibe OSX Yosemite.Warum bin ich immer auf openGL Version 2.1? [OpenGL/SDL]

#include <iostream> 
//Using SDL and standard IO 
#include <SDL2/SDL.h> 
#define GL_GLEXT_PROTOTYPES 1 
//#include <SDL2/SDL_opengl.h> 
#include <GLUT/glut.h> 
#include <stdio.h> 
#include <OpenGL/gl3.h> 
#include <glm/glm.hpp> 
#include <glm/gtc/matrix_transform.hpp> 
#include <string.h> 

#ifdef __APPLE__ 
#define glGenVertexArrays glGenVertexArraysAPPLE 
#define glBindVertexArray glBindVertexArrayAPPLE 
#define glDeleteVertexArrays glDeleteVertexArraysAPPLE 
#endif 


using namespace std; 


//Screen dimension constants 
const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 



bool SetOpenGLAttributes() 
{ 
    // Set our OpenGL version. 
    // SDL_GL_CONTEXT_CORE gives us only the newer version, deprecated functions are disabled 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4); 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); 

    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 

    return true; 
} 



int main(int argc, char* args[]) 
{ 
    //The window we'll be rendering to 
    SDL_Window* window = NULL; 

    //Initialize SDL 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); 
    } 
    else 
    { 
     //Create window 
     window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL); 
     if(window == NULL) 
     { 
      printf("Window could not be created! SDL_Error: %s\n", SDL_GetError()); 
     } 
     else 
     { 

      //creating new context 
      SDL_GL_CreateContext(window); 

      //GLuint vertexArrayID; 
      // glGenVertexArrays(1, &vertexArrayID); 


      SetOpenGLAttributes(); 

      printf("%s", "This is your version"); 
      printf("%s\n", glGetString(GL_VERSION)); 

      SDL_GL_SetSwapInterval(1); 
      glEnable(GL_DEPTH_TEST); 



      SDL_GL_SwapWindow(window); 

      bool running = true; 
      while(running){ 
       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

       glFlush(); 
       //drawCube(.5); 
       SDL_GL_SwapWindow(window); 
       SDL_Delay(17); 

      } 


     } 
    } 


    //Destroy window 
    //SDL_DestroyWindow(window); 

    //Quit SDL subsystems 
    //SDL_Quit(); 

    return 0; 
+0

Was sagt 'glGetString (GL_RENDERER)' Ihnen? – datenwolf

+0

Intel Iris OpenGL Engine – user2905256

+2

Sie müssen Attribute vor dem Erstellen von Kontext oder sogar Fenster festlegen. – keltar

Antwort

4

Sie rufen SetOpenGLAttributes nach dem Kontext zu schaffen. Versuchen Sie, es vor SDL_GL_CreateContext(window); anzurufen.