为什么我总是使用 openGL 2.1 版?[openGL/SDL]

Why am I always on openGL version 2.1?[openGL/SDL]

本文关键字:openGL SDL 为什么      更新时间:2023-10-16

我正在尝试将 openGL 与 SDL 一起使用,每当我在运行时检查我的版本时,它总是返回我使用的是 openGL 版本 2.1。现在据我了解,包括gl3.h为您提供了openGL的3.2+功能。除此之外,我特别要求 openGL 的 4.1 版本,并且显然仍在运行 2.1。有人可以告诉我我做错了什么吗?我正在运行OSX Yosemite。

#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: %sn", 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: %sn", SDL_GetError() );
        }
        else
        {
            //creating new context
            SDL_GL_CreateContext(window);
            //GLuint vertexArrayID;
            // glGenVertexArrays(1, &vertexArrayID);

            SetOpenGLAttributes();
            printf("%s", "This is your version");
            printf("%sn", 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;
您在

创建上下文后调用SetOpenGLAttributes。尝试在SDL_GL_CreateContext(window);之前调用它。