Windows 和 Linux 上有哪些库和工具可用?
SDL、OpenGL和Qt 4(它是 gui 库,但对于 2D 渲染来说足够快速/灵活)
同样的编程方法是否仍然适用,或者我是否必须对视频硬件抽象有不同的理解?
通常,您不会每帧“使用指针”将数据写入表面,而是使用 API 提供的方法来操作/绘制它们。这是因为与每帧将数据从系统内存传输到视频内存相比,驱动程序使用视频内存的工作速度更快。如果必须的话,您仍然可以将数据写入硬件表面/纹理(即使在每一帧期间),但这些表面可能需要以特殊方式处理才能获得最佳性能。例如,在 DirectX 中,您需要告诉驱动程序表面数据将频繁更改,并且您只会将数据写入表面,而不会读回。另外,在面向 3D 的 API (openGL/DirectX) 中,在另一个表面上渲染表面是有点“特殊情况”,您可能需要使用“渲染目标”(DirectX) 或“帧缓冲对象”(OpenGL)。这与 DirectDraw 不同(据我所知,您可以将任何内容块传输到任何内容上)。好处是,通过 3D api,您可以以极其灵活的方式处理表面/纹理 - 拉伸、旋转、用颜色着色、将它们混合在一起、使用着色器处理它们都可以在硬件上完成。
另一件事是,具有硬件支持的现代 3D api 通常不会在 8 位调色板纹理上运行,而更喜欢 ARGB 图像。需要时,可以模拟带有调色板的 8 位表面,并且 2D 低级 API(SDL、DirectDraw)提供它们。您还可以使用片段/像素着色器在硬件上模拟 8 位纹理。
无论如何,如果您想要使用表面的“老式”跨平台方式(即“使用指针每帧写入数据” - 即您需要软件渲染器或其他东西),SDL 可以轻松实现这一点。如果您想要更高级别、更灵活的操作 - Qt 4 和 OpenGL 适合您。