C++ 可靠地创建OpenGL上下文?
摘要: 在开发计算机上成功创建了OpenGL上下文,但在尝试分发应用程序时,屏幕仅显示黑色。发布OpenGL应用程序时需要考虑哪些问题 详细信息: 我正在使用SDL2创建OpenGL3.1上下文。上下文必须至少为3.1才能工作 我还没有彻底测试这个问题,所以我没有使用中的图形卡等信息。然而,我更感兴趣的是摘要中提出的一般性问题,即在发布OpenGL应用程序时需要考虑什么 下面是上下文创建代码C++ 可靠地创建OpenGL上下文?,c++,opengl,sdl,opengl-3,C++,Opengl,Sdl,Opengl 3,摘要: 在开发计算机上成功创建了OpenGL上下文,但在尝试分发应用程序时,屏幕仅显示黑色。发布OpenGL应用程序时需要考虑哪些问题 详细信息: 我正在使用SDL2创建OpenGL3.1上下文。上下文必须至少为3.1才能工作 我还没有彻底测试这个问题,所以我没有使用中的图形卡等信息。然而,我更感兴趣的是摘要中提出的一般性问题,即在发布OpenGL应用程序时需要考虑什么 下面是上下文创建代码 // CREATE SDL U32 flags; flags |= SDL_I
// CREATE SDL
U32 flags;
flags |= SDL_INIT_VIDEO;
flags |= SDL_INIT_EVENTS;
if(!SDL_WasInit(0)) // Make sure SDL is initialized.
SDL_Init(0);
CHECK(!SDL_InitSubSystem(flags));
// SET OPENGL ATTRIBUTES
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, config.glVersionMajor);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, config.glVersionMinor);
if(config.glCoreProfile)
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
else
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);
//SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, config.glDepthBuffer);
SDL_GL_SetSwapInterval(0);
// CREATE WINDOW
flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN;
if(config.fullscreen)
flags = flags | SDL_WINDOW_FULLSCREEN_DESKTOP;
else if(config.maximized)
flags = flags | SDL_WINDOW_MAXIMIZED;
if(config.resizable)
flags = flags | SDL_WINDOW_RESIZABLE;
mainWindow = SDL_CreateWindow(config.programName, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
config.windowWidth, config.windowHeight, flags);
SDL_GetWindowSize(mainWindow, (int*)&windowWidth, (int*)&windowHeight);
CHECK(mainWindow != NULL);
// CREATE OPENGL CONTEXT
mainContext = SDL_GL_CreateContext(mainWindow);
CHECK(mainContext != NULL);
// INIT GLEW
#ifdef _WIN32
CHECK(GLEW_OK == glewInit());
#endif
glEnable(GL_DEPTH_TEST);
glViewport(0,0,windowWidth,windowHeight);
glClearColor(0,0,0,1);
//glEnable(GL_PRIMITIVE_RESTART);
glEnable(GL_CULL_FACE);
//glPrimitiveRestartIndex(0xFFFFFFFF);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
TTF_Init();
顺便说一句,没有人真正遵循这种做法。每个人都先编码,然后永远调试。为什么你只在Windows上运行
glewInit
?上校:在没有glew的情况下,它似乎在Mac上运行。为什么你要在当前GL上下文之前尝试SDL\u GL\u SetSwapInterval()
?或者甚至是一个窗口?在验证mainWindow
是否非空之前,您还试图SDL\u GetWindowSize()
。是否CHECK()
调用SDL\u GetError()
?