我在C和C++年使用了DirectDraw來繪製一些簡單的2D圖形。我習慣了創建曲面,使用指針寫入曲面,翻轉後臺緩衝區,將屏幕保存在屏幕外表面等步驟。所以今天如果我想用C或C++編寫一些2D圖形程序,還有什麼辦法呢?簡單的2D圖形編程
- 這種編程方法仍然適用,還是我必須對視頻硬件抽象有不同的理解?
- Windows和Linux上有哪些庫和工具可用?
我在C和C++年使用了DirectDraw來繪製一些簡單的2D圖形。我習慣了創建曲面,使用指針寫入曲面,翻轉後臺緩衝區,將屏幕保存在屏幕外表面等步驟。所以今天如果我想用C或C++編寫一些2D圖形程序,還有什麼辦法呢?簡單的2D圖形編程
Windows和Linux提供哪些庫和工具?
SDL,OpenGL和Qt 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都適合你。
在Linux上,您可以使用OpenGL,它不僅用於3D支持,還支持2D。
SDL也很容易使用,開箱即用。它也是跨平臺的,並且包含(並且有很多)插件可用於處理您的需求。它與openGL很好地接口,如果你需要3D支持。
OpenGL是最明顯的即時響應。它對於簡單的應用程序而言功能強大,學習曲線低。 – Akusete 2010-07-12 07:35:30