我正在为一个项目使用 SDL 1.2。它渲染得很好,但我想做一些小的像素着色器效果。本演示的所有示例都使用 SDL 视频子系统的 OpenGL 驱动程序。
因此,我以 opengl 作为驱动程序启动视频子系统,并告诉 SDL_SetVideoMode() 使用 SDL_OPENGL。当我去运行程序时,它现在开始在 SetVideoMode() 调用上崩溃,它在不强制 OpenGl 的情况下运行良好)。
我回去运行程序而不强制 OpenGl 并转储 SDL_VideoDriverName(),它说我正在使用“directx”驱动程序。
我的问题有两个方面:它不喜欢 opengl 驱动程序有什么问题,以及如何让 SDL 在这里使用 opengl 没有问题?或者,如何将 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;
}