Home > Tags > Direct3D
Direct3D
完成 Win32上的OpenGL/Cg
星期六日都坐在家中做 OpenGL/Cg 的移植,比想像中遇到更多問題,但終於在三月最後一個晚上完成。這裡做一個簡單的回顧,希望大家遇到類似的問題時可以減少脫髮。
編譯期選擇圖像 API
之前曾經寫過一篇《跨平台的圖像渲染引擎》,提及使用 abstract factory pattern 或 conditional compilation (macro) 來為圖像 API 抽像化。後者的優點是效能較高 (不需使用 virtual function call),但缺點是代碼難看。為了改善後者的缺點,我想到了使用 inheritance 去避免在 class 的定義裡寫 macros。舉一個例子就會明白。
首先,利用 #include 後可以是一個 macro 的功能 (Visual C++ 裡只可以是一個 macro identifier,而 gcc 可以 expand macro),把平台相關的 header 和 implementation 檔放在同一個地方:
- Comments: 0
- Trackbacks: 0
跨平台的圖像渲染引擎
- 2008-03-05 (三)
- 圖像編程
今天轉一個話題,暫時不想 Script 的部份。本來想寫一些圖像的代碼,但敲了幾個鍵又停下來思考,猶豫不決,便希望寫這一篇 blog 整理一下思緒。希望大家能多給意見。
沒有一個圖像渲染引擎可以適合所有平台、所有應用。我暫時設定的目標是
- Windows Direct3D 9
- Windows Direct3D 10
- Windows OpenGL
- Linux
- OSX
- M記3代(實際是2代? ^_^)
- S記3代
- S記手提
- N記W機
當然,我不是要立即把它們全部實現,而是在開始做的時候考慮到它們。當中,電腦的平台上只考慮支援有 Shader 的硬件 (其實不同的 GPU 可以視為不同的平台)。而一些遊戲機是只有 Fixed Pipeline的。
跨平台方案
如下圖所示,一個圖像渲染的引擎大概是介乎應用程式和 Graphics API之間。
有一些平台,例如一些遊戲機,可以讓應用程式跨過 Graphics API 和 OS/Driver,直接操作硬件。這種方式和 DOS 年代的電腦遊戲做法一樣。
要實現跨平台的應用程式 (遊戲),我想到有4個方案
- 使用跨平台的 Graphics API (如 OpenGL、或 Java 的甚麼幾個數字標準…)
- 每一個平台編寫一個把平台Graphics API 抽像化的 API
- 每一個平台編寫一個 Render Engine
- 每一個平台編寫一個 Application
由於我的目標比較廣,基本上第一個方案不作考慮。
- Comments: 2
- Trackbacks: 0
Home > Tags > Direct3D
- Search
- Feeds
- Meta