2010-07-12 74 views
5

我在C和C++年使用了DirectDraw来绘制一些简单的2D图形。我习惯了创建曲面,使用指针写入曲面,翻转后台缓冲区,将屏幕保存在屏幕外表面等步骤。所以今天如果我想用C或C++编写一些2D图形程序,还有什么办法呢?简单的2D图形编程

  1. 这种编程方法仍然适用,还是我必须对视频硬件抽象有不同的理解?
  2. Windows和Linux上有哪些库和工具可用?
+1

OpenGL是最明显的即时响应。它对于简单的应用程序而言功能强大,学习曲线低。 – Akusete 2010-07-12 07:35:30

回答

3

Windows和Linux提供哪些库和工具?

SDLOpenGLQt 4(这是GUI库,但它是快速/足够灵活的2D渲染)

将这个相同的编程方法仍然适用或做我必须有一个视频硬件抽象的不同理解?

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

另一件事情是,具有硬件支持的现代3D apis经常不能在8位托盘纹理上操作,并且更喜欢ARGB图像。 8位表面和调色板可以在需要时仿真,而2D低级别API(SDL,DirectDraw)提供它们。您也可以使用片段/像素着色器在硬件上模拟8位纹理。无论如何,如果您想要使用曲面的“旧学校”跨平台方式(即“使用指针每帧写入数据” - 即您需要软件渲染器或其他东西),SDL很容易实现这一点。如果你想要更高层次,更灵活的操作 - Qt 4和OpenGL都适合你。

2

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

1

SDL也很容易使用,开箱即用。它也是跨平台的,并且包含(并且有很多)插件可用于处理您的需求。它与openGL很好地接口,如果你需要3D支持。