07/11/01 07:05:47
DirectX10ヘッダーファイルをDにポーティングしていれば、一番みんなが使いやすいんだろうと思うんだけど
C++でまずDirectX10をラップしてそれをDで使用するようにしました。
DirectX10.1とかでるし、dxgi.h、d3d10.h、d3dx10.hがころころ変わると思ったので。
以下スレチにならない程度にさわりを・・・
/* C++ */
class Device {
public:
_cptr<ID3D10Device> _cp; // _cpt<T>rはCOMをあつかうスマートポインタ
};
class Swapchain {
public:
uint32 _width, _height;
_cptr<IDXGISwapChain> _cp;
int init( Device &dev, const DXGI_SWAP_CHAIN_DESC &ds);
};
class Buffer {
public:
_cptr<ID3D10Buffer> _cp;
};
とこんな風にまんま包み込んで、
Dに以下の様な関数をエキスポート
Device * dx10g0_Device_new();
void dx10_Device_delete(Device *pthis);
int dx10_Device_init(Device *pthis, void *pdevicesettings);
int dx10_Device_DrawPrimitive(Device *pthis, uint type, uint n);
int dx10_Device_DrawIndexedPrimitive(Device *pthis, uint type, uint indexcount);
中の関数はDirectX10APIより少々便利めにつくるようにしてます。
こうすることのメリットは、上でいったヘッダーファイルがかわっても(少しは)大丈夫なこと、
DirectX9に同様のものをつくることで、D側からはDirectX10、DirectX9が同じように扱えること。
Shader4.0をつかってしまったら、意味がないかもだけど・・・