C++ SDL2+OpenGL崩溃?

C++ SDL2+OpenGL崩溃?,c++,opengl,sdl,C++,Opengl,Sdl,我按照教程使用OpenGL设置SDL2,但当我运行应用程序时,它立即关闭。我弄乱了一些值,发现如果我将深度位设置为32,它就会工作并保持打开状态。为什么它支持更高的值而不支持更低的值,如16和24?这是一个问题,因为我希望我的应用程序能够在其他windows计算机上运行,但我认为有些计算机只支持16位深度 if (SDL_Init(SDL_INIT_EVERYTHING) < 0) { return false; } SDL_GL_SetAttribute(SDL_GL_CONT

我按照教程使用OpenGL设置SDL2,但当我运行应用程序时,它立即关闭。我弄乱了一些值,发现如果我将深度位设置为32,它就会工作并保持打开状态。为什么它支持更高的值而不支持更低的值,如16和24?这是一个问题,因为我希望我的应用程序能够在其他windows计算机上运行,但我认为有些计算机只支持16位深度

if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
    return false;
}

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); //Useless?
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);

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_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

mainWindow = SDL_CreateWindow("OpenGL with SDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, resolution.SCREEN_WIDTH, resolution.SCREEN_HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);

if (!mainWindow) {
    return false;
}

mainContext = SDL_GL_CreateContext(mainWindow);

SDL_GL_SetSwapInterval(1);
我是否可以至少自动将其设置为运行时支持的设置

编辑 它似乎也适用于25-31岁

编辑2
主要问题是SDL默认为GDI Generic,即使我的图形卡已更新为3.1

删除该行时它是否工作?@Axalo否。我认为这是因为它默认为16bit@name:您使用的是什么OpenGL实现?我觉得描述的行为很奇怪。即使实现只支持32位深度缓冲区,这在开始时是非常不典型的,但当只请求16位时,它仍然应该工作,因为这只是一个最小值。@derhass我不确定你的意思,但我使用的是库glew32.lib、opengl32.lib、SDL2.lib、SDL2main.lib和SDL2test.lib。我正在使用SDL opengl头文件和glew.h。是的,我也觉得很奇怪!这意味着您最终使用了Microsofts OpenGL 1.1渲染器,它可能是唯一一个支持32位默认深度缓冲区的渲染器。