SDL_GL_CreateContext()调用无报错信息但执行失败的问题求助
SDL_GL_CreateContext()调用无报错信息但执行失败的问题求助
各位大佬好,我最近在折腾一个基于SDL3、GLAD的OpenGL 4.6应用,用g++编译,结果碰到了个头疼的问题——SDL_GL_CreateContext()调用后SDL没返回任何报错信息,但实际上上下文创建失败了,后面的GLAD加载和OpenGL调用全卡壳了。
先给大家看我的编译命令和代码:
编译命令:
g++ -Wall -Ofast main.cpp include/glad/glad.c -Iinclude/SDL3 -Linclude/SDL3 -lSDL3 -lopengl32 -o build/program
代码片段(补全了没写完的错误处理部分):
#define SDL_MAIN_HANDLED #include <iostream> #include <glad/glad.h> #include <SDL3/SDL.h> #include <SDL3/SDL_opengl.h> int main(int argc, char* argv[]) { if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS)) { std::cerr << "SDL初始化失败: " << SDL_GetError() << std::endl; return 1; } // 创建带OpenGL属性的窗口 SDL_Window* window = SDL_CreateWindow("OpenGL App", 800, 600, SDL_WINDOW_OPENGL); if (!window) { std::cerr << "创建窗口失败: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } // 设置OpenGL 4.6核心模式属性 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 6); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); // 问题核心:这里调用后返回空上下文,但SDL_GetError()无输出 SDL_GLContext context = SDL_GL_CreateContext(window); if (!context) { std::cerr << "创建OpenGL上下文失败,但SDL无报错信息" << std::endl; // 这里SDL_GetError()返回空字符串 std::cerr << "SDL错误信息: " << SDL_GetError() << std::endl; SDL_DestroyWindow(window); SDL_Quit(); return 1; } // 尝试加载GLAD,由于上下文无效直接失败 if (!gladLoadGLLoader((GLADloadproc)SDL_GL_GetProcAddress)) { std::cerr << "加载GLAD失败" << std::endl; SDL_GL_DeleteContext(context); SDL_DestroyWindow(window); SDL_Quit(); return 1; } // 后续渲染逻辑无法执行,因为没有有效的OpenGL上下文 SDL_GL_DeleteContext(context); SDL_DestroyWindow(window); SDL_Quit(); return 0; }
我自己已经排查了这些点,但还是没找到问题:
- 编译过程没有任何警告或错误,SDL3的头文件和库路径配置正确
- 确认我的显卡支持OpenGL 4.6,驱动也是最新的版本
- 尝试过降低OpenGL版本到4.3甚至3.3,问题依然存在
- 调用
SDL_GL_GetAttribute()检查设置的版本属性,返回的数值是正确的4和6
想请教一下各位,有没有遇到过类似的情况?SDL3创建OpenGL上下文的时候有没有什么容易忽略的细节?或者有没有其他方式可以排查这种“无报错但失败”的问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

