プロジェクトに SDL 1.2 を使用しています。それは問題なくレンダリングされますが、いくつかの小さなピクセル シェーダー効果を実行したいと考えています。このショーのすべての例では、SDL のビデオ サブシステムに OpenGl ドライバーを使用しています。
そこで、ドライバーとして opengl を使用してビデオ サブシステムを開始し、SDL_SetVideoMode() に SDL_OPENGL を使用するように指示します。プログラムを実行すると、SetVideoMode() 呼び出しでクラッシュし始めますが、これは OpenGl を強制しなくても問題なく動作しました)。
戻って、OpenGl を強制せずにプログラムを実行し、SDL_VideoDriverName() をダンプすると、「directx」ドライバーを使用していると表示されます。
私の質問は 2 つの側面があります。opengl ドライバーが気に入らないのは何が問題なのか、ここで問題なく opengl を使用するように SDL を取得するにはどうすればよいですか? または、SDL サーフェスを DirectX に取り込んで、ピクセル シェーダー効果を適用するにはどうすればよいですか?
他のプラットフォームへのコードの移植が容易になるため、OpenGl を使用することをお勧めします。
例として、OpenGl システムを使用しようとすると壊れる次のコードを追加しました。
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <SDL.h>
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
{
SDL_putenv("SDL_VIDEODRIVER=opengl");
SDL_Init( SDL_INIT_EVERYTHING );
SDL_VideoInit("opengl",0);
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); // crashes here
SDL_Surface *mWindow = SDL_SetVideoMode(1024,768,32,SDL_HWSURFACE|SDL_HWPALETTE|SDL_DOUBLEBUF|SDL_OPENGL);
SDL_Quit();
return 0;
}