l大第一種作法的話
user應該只看的到
Renderer這層interface吧
所以l大這方法還必須export CreateInstance這function給user呼叫
然後要new哪一個instance的實作
還是必須用第二種方法判定嗎?(#if OPENGL #else DXD)
目前比較無法理解 第一種作法如果沒搭配上面講的話 該怎麼做到
上層不需要管用opengl還是dxd的方法....
所以在這層也是必須要寫兩分code
針對opengl和dx分別寫兩套同樣目的的程式碼嗎?
謝謝
※ 引述《littleshan (我要加入劍道社!)》之銘言:
: 比較漂亮的作法:
: class Renderer { // 某個處理繪圖用的 abstract class
: public:
: virtual void render(const Scene& scene) = 0; // 把場景畫出來
: };
: class RendererD3D9 : Renderer {
: public:
: void render(const Scene& scene)
: {
: // 使用 DirectX 進行繪圖
: }
: };
: class RendererGL : Renderer {
: public:
: void render(const Scene& scene)
: {
: // 使用 OpenGL 進行繪圖
: }
: };
: 比較醜但是直接的做法
: void Render(const Scene& scene)
: {
: #ifdef USE_OPENGL
: // 使用 OpenGL 進行繪圖
: #else
: // 使用 DirectX 進行繪圖
: #end
: }
: 說穿了也沒什麼神奇的
: 當然其中也有一些技巧就是了 (比如 abstract factory pattern)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.192.70.221