跨平台硬件加速 2d C++ 应用程序?
SDL + OpenGL。如果您使用着色器和/或扩展,也许还会高兴或高兴。Glee 比较好用,但是貌似不支持 3.0 以后的 OpenGL 版本。此外,您可能需要SDL_image来加载图像。
我知道有 OpenGL,但我似乎找不到任何关于如何以跨平台方式使用它的教程,它们都专注于一个平台。
SDL_Init(SDL_INIT_VIDEO);
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);
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 0);//disable vsync
if (SDL_SetVideoMode(scrWidth, scrHeight, 32, SDL_OPENGL) == 0){
fprintf(stderr, "couldn't set mode %dx%d!\n", 640, 480);
SDL_Quit();
return -1;
}
glewInit();//if you use glew, shaders, extensions.
while(gameIsRunning()){//game loop
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//OpenGL rendering here
glFlush();
SDL_GL_SwapBuffers();
}
SDL_Quit();
有关详细信息,请参阅 sdl 文档。
使用 SDL 也是一种可能,但我担心如果我使用它,游戏可能表现不佳。这一定是真的吗?
禁用 vsync 后,您每秒可以获得数百到数千帧。确切的性能取决于您的硬件和场景复杂性——我有 300 fps 的报告,用于简单的 3D 地牢爬行者,它使用“RAW”opengl,没有显示列表/顶点缓冲区对象。此外,如果您使用固定帧率或计时器驱动的引擎,您将不会获得比您要求的更多的每秒帧数。
SDL 用于将 Unreal 2004 移植到 Linux。它也用于 Doom 3/Quake 4 linux 端口。因此,它经过了彻底的测试并且众所周知。
有关更多信息,请参阅此列表。