2016-07-14 2 views
0

Я пытаюсь использовать openGL с SDL, и всякий раз, когда я проверяю свою версию во время выполнения, он всегда возвращает, что я использую openGL версии 2.1. Теперь, к моему пониманию, включая gl3.h, вы получили 3,2 + функциональность openGL. Кроме того, я специально прошу версию 4.1 openGL и все еще явно работает 2.1. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно? Я запускаю OSX Yosemite.Почему я всегда на openGL версии 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

Что говорит вам 'glGetString (GL_RENDERER)'? – datenwolf

+0

Intel Iris OpenGL Engine – user2905256

+2

Вам необходимо установить атрибуты перед созданием контекста или даже окна. – keltar

ответ

4

Вы вызываете SetOpenGLAttributes после создания контекста. Попробуйте позвонить ему до SDL_GL_CreateContext(window);.

Смежные вопросы