Что означает ошибка «контекст отображается с помощью программного средства рендеринга»? - PullRequest
0 голосов
/ 28 ноября 2011

Я использовал 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 непригодным для использования.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2011

Это иногда случается, когда 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
0 голосов
/ 28 ноября 2011

Это означает, что SDL не может работать с видеооборудованием и работает с программным средством визуализации. Попробуйте обновить драйверы и посмотрите, есть ли изменения.

...