【问题标题】:What does a "context is rendered using a software renderer" error mean?“使用软件渲染器渲染上下文”错误是什么意思?
【发布时间】:2012-01-08 02:03:16
【问题描述】:

我一直在使用 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 无法使用。

【问题讨论】:

    标签: windows opengl sdl


    【解决方案1】:

    这意味着 sdl 无法与视频硬件一起使用,而正在与软件渲染器一起使用。尝试更新驱动程序,看看是否有变化。

    【讨论】:

    • 然而 SDL 在相同的硬件上运行良好,但程序设置略有不同。我的驱动程序是最新的,我在其他任何地方都没有看到这个问题。如何找出问题所在?
    • 我认为问题出在您的视频驱动程序上。当您使用 SDL_SetVideoMode() 时,您是否使用 SDL_HWSURFACE 标志?
    • 对不起,我应该指定的。我使用的是 SDL 1.3,而不是 SDL 1.2。
    • 将在接下来的几个小时内调查问题。
    【解决方案2】:

    当 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 2011-12-30
      • 2018-01-10
      相关资源
      最近更新 更多