Graphics 简单的二维图形编程 我在C和C++年中使用DirectDraw来绘制一些简单的2D图形。我已经习惯了创建曲面、使用指针写入曲面、翻转后缓冲区、在屏幕外曲面上存储精灵等步骤。所以,如果我想在C或C++中写一些2D图形程序,那该怎么走?p> 同样的编程方法是否仍然适用,还是我必须对视频硬件抽象有不同的理解 Windows和Linux上提供了哪些库和工具

Graphics 简单的二维图形编程 我在C和C++年中使用DirectDraw来绘制一些简单的2D图形。我已经习惯了创建曲面、使用指针写入曲面、翻转后缓冲区、在屏幕外曲面上存储精灵等步骤。所以,如果我想在C或C++中写一些2D图形程序,那该怎么走?p> 同样的编程方法是否仍然适用,还是我必须对视频硬件抽象有不同的理解 Windows和Linux上提供了哪些库和工具,graphics,2d,Graphics,2d,在Linux上,您可以使用OpenGL,它不仅用于3D支持,还支持2D。也非常易于使用,开箱即用。它也是跨平台的,包括(并且有很多)插件可以满足您的需要。如果您需要3D支持,它也可以很好地与openGL接口 Windows和Linux上提供了哪些库和工具 ,和(它是gui库,但对于2D渲染来说足够快速/灵活) 同样的编程方法是否仍然适用,还是我必须对视频硬件抽象有不同的理解 通常情况下,您不会在每一帧“使用指针”将数据写入曲面,而是使用API提供的方法操作/绘制它们。这是因为与每帧将数据从系统内

在Linux上,您可以使用OpenGL,它不仅用于3D支持,还支持2D。

也非常易于使用,开箱即用。它也是跨平台的,包括(并且有很多)插件可以满足您的需要。如果您需要3D支持,它也可以很好地与openGL接口

Windows和Linux上提供了哪些库和工具

,和(它是gui库,但对于2D渲染来说足够快速/灵活)

同样的编程方法是否仍然适用,还是我必须对视频硬件抽象有不同的理解

通常情况下,您不会在每一帧“使用指针”将数据写入曲面,而是使用API提供的方法操作/绘制它们。这是因为与每帧将数据从系统内存传输到视频内存相比,驱动程序在视频内存中的工作速度更快。如果必须的话,您仍然可以将数据写入硬件表面/纹理(即使在每一帧中),但这些表面可能需要以特殊的方式处理以获得最佳性能。例如,在DirectX中,您需要告诉驱动程序曲面数据将频繁更改,并且只将数据写入曲面,而不将其读回。此外,在面向3D的API(openGL/DirectX)中,另一个表面上的渲染表面在某种程度上是“特殊情况”,您可能需要使用“渲染目标”(DirectX)或“帧缓冲区对象”(openGL)。这与DirectDraw不同(在DirectDraw中,您可以将任何内容blit到任何内容上)。好的方面是,使用3D api,您可以获得处理曲面/纹理的极其灵活的方式—拉伸、旋转、用颜色着色、混合、使用着色器处理可以在硬件上完成

另一件事是,具有硬件支持的现代3D API通常不在8位托盘纹理上运行,而更喜欢ARGB图像。当需要时,可以模拟带调色板的8位曲面,2D低级API(SDL、DirectDraw)提供这些曲面。还可以使用片段/像素着色器在硬件上模拟8位纹理

不管怎样,如果您想要使用曲面的“老式”跨平台方式(即“使用指针每帧写入数据”-即您需要软件渲染器或其他东西),SDL很容易允许这样做。如果您想要更高级别、更灵活的操作,Qt 4和OpenGL适合您。

Windows上的Direct2D


EGLOutput/EGLDevice或GEM取决于Linux的GPU驱动程序。

OpenGL是最明显的即时响应。它功能强大,对于简单的应用程序,学习曲线很低。