我一直在使用SDL来设置嵌入在表单中的OpenGL渲染上下文,一切都运行良好。现在我正在尝试使用SDL创建的窗口,但是我遇到了一些非常奇怪的错误。尝试创建纹理失败,出现无法解释的GL_INVALID_ENUM
错误。
我在gDEBugger下运行它以更好地了解正在发生的事情,并且第一个错误早于此。当我创建窗口时,SDL调用wglMakeCurrent
,它会产生GL错误:
Error Code: AP_USING_SOFTWARE_RENDERER_ERROR
Error Description: Context 2 is rendered using a software renderer (Vendor: , Renderer: )
在Google上搜索这些行中的任何一行都没有给我任何英语(除了我在SDL邮件列表上询问过的问题,这让我无处可去),非英语结果似乎在讨论OpenGL的完全不同部分我在这里工作。
所以我觉得这有点远,但有没有人知道发生了什么以及这个错误来自哪里?在此之后,各种事物(例如纹理设置,矩形/ NPOT纹理模式和着色器)都会失败,从而使OpenGL无法使用。
答案 0 :(得分:0)
当Windows无法找到所需图形选项的驱动程序支持然后它转向(慢速)软件渲染器时,有时会发生这种情况。我已经看到它在要求32位深度缓冲时发生。将它减少到16位固定它。
以下是我自己使用的设置代码:
var
Flags : SDL.UINT32;
Mode : PSDL_Surface;
begin
Flags := SDL_OPENGL or SDL_RESIZABLE;
Width := 800;
Height := 600;
SDL_WM_SetCaption(Title, nil);
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_DEPTH_SIZE, 16 );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
Mode := SDL_SetVideoMode(Width, Height, 0, flags);
end