2011-11-28 88 views
0

我一直在使用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:) 

搜索無論是在谷歌的那些行的給我什麼英語(除了我問這對SDL的問題郵件列表,這讓我無處可去),非英語結果似乎在討論與我在這裏工作的完全不同的OpenGL部分。

所以我想這是一個遠射,但有沒有人有任何想法發生了什麼事,這個錯誤來自哪裏?在這之後,各種各樣的東西(例如紋理設置,矩形/ NPOT紋理模式和着色器)都會失敗,從而導致OpenGL無法使用。

回答

0

這意味着sdl無法使用視頻硬件,並且正在使用軟件渲染器。嘗試更新驅動程序,看看是否有變化。

+0

然而SDL正常工作在相同的硬件,但有一個稍微不同的程序設置。我的驅動程序是最新的,我沒有在其他地方看到這個問題。我怎麼知道問題出在哪裏? –

+0

我認爲問題出在您的視頻驅動程序上。當你使用SDL_SetVideoMode()時你使用SDL_HWSURFACE標誌嗎? – v01d

+0

對不起,我應該指定。我正在使用SDL 1.3,而不是SDL 1.2。 –

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