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 檔放在同一個地方:

Continue reading

跨平台的圖像渲染引擎

今天轉一個話題,暫時不想 Script 的部份。本來想寫一些圖像的代碼,但敲了幾個鍵又停下來思考,猶豫不決,便希望寫這一篇 blog 整理一下思緒。希望大家能多給意見。

沒有一個圖像渲染引擎可以適合所有平台、所有應用。我暫時設定的目標是

  1. Windows Direct3D 9
  2. Windows Direct3D 10
  3. Windows OpenGL
  4. Linux
  5. OSX
  6. M記3代(實際是2代? ^_^)
  7. S記3代
  8. S記手提
  9. N記W機

當然,我不是要立即把它們全部實現,而是在開始做的時候考慮到它們。當中,電腦的平台上只考慮支援有 Shader 的硬件 (其實不同的 GPU 可以視為不同的平台)。而一些遊戲機是只有 Fixed Pipeline的。

跨平台方案

如下圖所示,一個圖像渲染的引擎大概是介乎應用程式和 Graphics API之間。

renderengine1.png

有一些平台,例如一些遊戲機,可以讓應用程式跨過 Graphics API 和 OS/Driver,直接操作硬件。這種方式和 DOS 年代的電腦遊戲做法一樣。

要實現跨平台的應用程式 (遊戲),我想到有4個方案

  1. 使用跨平台的 Graphics API (如 OpenGL、或 Java 的甚麼幾個數字標準…)
  2. 每一個平台編寫一個把平台Graphics API 抽像化的 API
  3. 每一個平台編寫一個 Render Engine
  4. 每一個平台編寫一個 Application

由於我的目標比較廣,基本上第一個方案不作考慮。

Continue reading

Home > Tags > Direct3D

Search
Feeds
Meta

Return to page top