【问题标题】:OpenGL version isn't equal to the supported shader versionOpenGL 版本不等于支持的着色器版本
【发布时间】:2017-05-14 19:54:36
【问题描述】:

最近我用 OpenGL 和 LWJGL 2 (Java) 创建了自己的游戏。在那之后,我想提高我的编程技能,并开始学习如何将 OpenGL 与 C++ 结合使用。

对于 LWJGL,我可以使用 #version 330,但对于 C++ 和 SDL2,我只能使用 #version 110,但 glGetString(GL_VERSION) 返回 3.0 Mesa 12.0.6

我像这样初始化我的窗口:

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

SDL_Init(SDL_INIT_EVERYTHING);

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);


m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);
m_glContext = SDL_GL_CreateContext(m_window);


GLenum status = glewInit();

if(status != GLEW_OK){
    std::cerr << "Glew failed!" << std::endl;
}

我的问题在哪里?

【问题讨论】:

  • 尝试在SDL_Init()之后设置SDL_GL_SetAttribute()调用...
  • glxinfo | grep "shading language version" 有什么要说的?

标签: c++ opengl sdl-2 glew


【解决方案1】:

您需要申请 OpenGL 核心配置文件。

默认情况下,您将获得 OpenGL 兼容性配置文件。使用兼容性配置文件,如果您在 Mesa 上运行,您将被限制为 3.0 版,如果您在 macOS 上运行,您将被限制为 2.1 版。使用核心配置文件,您将能够访问更新的版本。

如果您在 Linux 或 Windows 上使用 AMD 或 nVidia 的驱动程序,则无需这样做。

在 SDL 中,您可以通过在创建窗口之前添加此行来请求核心文件:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

【讨论】:

  • 部分奏效了。现在我可以将SDL_GL_CONTEXT_MAJOR_VERSIONSDL_GL_CONTEXT_MINOR_VERSION 设置为3.3 而不会崩溃,但是当我在着色器中使用#version 330 时,它仍然会抛出错误,女巫说支持的GLSL 版本是1.10、1.20、1.30、1.00 es, 3.00 秒
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 2021-02-16
相关资源
最近更新 更多