1.1. Initialization Step ¶
- IDirect3D8 ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
- ํธํ์ฑ ์๋ IDirect3D8 ๊ฐ์ฒด๋ฅผ ๊ฒ์ฌํ ํ, ์ ์ ํ ๋๋ฐ์ด์ค ํ์
์ ๊ณ ๋ฅธ๋ค.
- ๋์คํ๋ ์ด ๋ชจ๋์ ์ด๋ํฐ๋ฅผ ์ ํํ๋ค.
- IDirect3DDevice8 ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ด๊ธฐํํ๋ค.
- ํ
์ค์ณ๋ฅผ ์ฌ์ฉํด ๊ฒ์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ๋ค์ธ๋ค.
์ด๋ ๊ฒ ์จ๋๊ณ ๋ณด๋ฉด ์๋นํ ๊ฐ๋จํ ์์ ์ด๋ค. -_-;;
1.2. Purpose of the IDirect3D8 Object ¶
์ด๊ฒ์ ๋ง๋๋ ์ด์ ๋ ๊ฐ๋จํ๋ค. IDirect3DDevice8 ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ "๊ผญ" ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ง๋ ๋ค. ์ด ๊ฐ์ฒด์์๋ ์ค์ง์ ์ธ ์์
๋ณด๋ค๋ ์ด๊ธฐํ๋ฅผ ๋์์ฃผ๋ ์ญํ ์ ์ฃผ๋ก ํ๋ค.
1.3. Creating IDirect3D8 Object ¶
๊ทธ๋ผ ์ค์ ๋ก ๋ง๋ค์ด๋ณด์. ๋ง๋ค๋์๋ ๋ค์ ํจ์๊ฐ ํ์ํ๋ค.
~cpp IDirect3D8* Direct3DCreate8 ( UINT SDKVersion; );
- IN ์ ์ผํ ์ธ์์ธ SDKVersion์๋ SDK์ ๋ฒ์ ์ ๋ฃ์ด์ค๋ค. 8.0 ์ด๋ ๊ฒ ์ง์ด๋ฃ๋ ๊ฒ์ด ์๋๋ผ ์ง์ ๋์ด์๋ ๋งคํฌ๋ก๊ฐ ์๋ค. ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋จ ํ๊ฐ์ง๋ฟ์ด๋ค.
~cpp IDirect3D8* pd3d = NULL; // ํฌ์ธํฐ๋ฅผ ํ๊ฐ ๋ง๋ค์ด์ pd3d = Direct3DCreate8( D3D_SDK_VERSION ); // ์ด๋ ๊ฒ ์์ฑํ๋ค. ///// ํด์ ํ ๋๋ ์ด๋ ๊ฒ if( pd3d ) { pd3d->Release(); pd3d = NULL; }
1.4. Examining Capabilities ¶
์์๋ ์ปดํจํฐ๋ง๋ค ๋ชจ๋ ๋ค๋ฅธ ์ฌ์์ ๊ฐ๊ณ ์๋ค. ๊ณผ์ฐ ๊ทธ ์ปดํจํฐ๊ฐ ์ด๋ค๊ฒ์ ์ง์ํ๋์ง ํธํ์ฑ์ ๊ผญ ์ฒดํฌํด์ผํ๋ค.
1.4.1. Adapter ¶
์ค๋ง ๊ทธ๋ํฝ์นด๋(Adapter)๋ฅผ ์ฌ๋ฌ๊ฐ ๋ค๋ ์ง์ ํํ์ง ์์ ๊ฑฐ๋ผ ์๊ฐํ์ง๋ง, ๋ง์ผ์ ์ฌํ๋ฅผ ๋๋นํด์ ๋ชจ๋ ๋ง๋ค์ด ๋์๋ค
~cpp UINT IDirect3D8::GetAdapterCount();
- RET ๋ช๊ฐ์ ์ด๋ํฐ๊ฐ ์๋์ง ์๋ ค์ค๋ค. 1๊ฐ๊ฐ ์์ผ๋ฉด 1, 2๊ฐ๊ฐ ์์ผ๋ฉด 2๋ค.
์ด๋ํฐ์๋ ๋ชจ๋ ๋ฒํธ๊ฐ ๋ถ์ด์๋ค. ์ฒซ๋ฒ์งธ ์ด๋ํฐ์๋ 0, ๋๋ฒ์งธ ์ด๋ํฐ์๋ 1, ์ด๋ฐ ์์ด๋ค. 0์ ๊ธฐ๋ณธ์ผ๋ก ์๊ธฐ ๋๋ฌธ์ ๋งคํฌ๋ก๋ก๋ ๋ง๋ค์ด์ ธ ์๋ค. D3DADAPTER_DEFAULT ๋งคํฌ๋ก์ด๋ค. 0๋ฒ ์ด๋ํฐ๋ฅผ ๊ธฐ๋ณธ ์ด๋ํฐ๋ผ๊ณ ๋ ํ๋ค.
๊ทธ ์ด๋ํฐ๋ ์ด๋ค ์ํ์ผ๊น
~cpp HRESULT GetAdapterIdentifier { UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER8* pIdentifier };
- RET HRESULTํ์ ๊ฐ์ ๋ฆฌํดํ๋ค. ์ฑ๊ณตํ๋ฉด D3D_OK, ์คํจํ๋ฉด D3D_INVALIDCALL์ด ๋์จ๋ค.
- IN ์ฒซ๋ฒ์งธ ์ธ์๋, ์ด๋ํฐ์ ๋ฒํธ์ด๋ค. ๋น์ฐํ D3DADAPTER_DEFAULT๋ฅผ ๋ฃ์ด์ค๋ค.
- IN ๋๋ฒ์งธ ์ธ์๋ ํ๋๊ทธ์ด๋ค. 0์ด๋ D3D_ENUM_NO_WHQL_LEVEL์ ๋ฃ์ ์ ์์ง๋ง, ๋๊ฐ 0์ ๋ฃ๋๋ค.
- OUT ์ธ๋ฒ์งธ ์ธ์๋ฅผ ์ถ๋ ฅ๊ฐ์ด๋ค. ๊ทธ๊ณณ์ ๋ฉค๋ฒ ๋ณ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
~cpp Driver : ๋๋ผ์ด๋ฒ์ ์ด๋ฆ Description : ์ด๋ํฐ์ ์ค๋ช DriverVersion : ๋๋ผ์ด๋ฒ์ ๋ฒ์ VendorID, DeviceID, SubSysID, Revision : ์นฉ์ ๋ง๋ค ํ๋ ค์ DeviceIdentifier : ๋๋ผ์ด๋ฒ๋ ์ด๋ํฐ๋ฅผ ์ํ GUID(?) WHQLLevel : ์ธ์ฆ๋ ์ง
1.4.2. Device Type ¶
๋๋ฐ์ด์ค์ ํ์
์ ์ป์ด์จ๋ค.
~cpp HRESULT GetDeviceCaps( UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8* pCaps );
๋ง๋ค ์ ์๋ ๋๋ฐ์ด์ค์ ํ์
์ ์ธ ๊ฐ์ง๊ฐ ์๋ค. (2๋ฒ์งธ ์ธ์์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค.)
- D3DDEVTYPE_HAL : ํ๋์จ์ด์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
- D3DDEVTYPE_REF : HAL ๋ณด๋ค ๋๋ฆฌ์ง๋ง ์ํํธ์จ์ด์ ์ผ๋ก ์ง์
- D3DDEVTYPE_SW : ํ๋์จ์ด ๊ฐ์์ ์ ํ ์ฌ์ฉํ์ง ์๊ณ ์ํํธ์จ์ด์ ์ผ๋ก ์๋ฎฌ๋ ์ด์
1.5. Display Format ¶
๋์คํ๋ ์ด์ ํฌ๋งท์ ์ ์ฅํ๋ ๋ฐ์ดํฐํ์ด D3DFORMAT๋ผ๋ ํํ์ด๋ค. A,R,G,B ๋ค๊ฐ์ง์ ๊ฐ์ ๋ช๋นํธ์ฉ ๊ฐ๋์ง๋ฅผ ์์ธํ๊ฒ ์ ํ ์ ์๋ค.
์์ธํ ๊ฒ์ MSDN์,
์์ธํ ๊ฒ์ MSDN์,
1.6.1. Looking at Adapter Display Modes ¶
์คํ์์ ์ด๋ํฐ๊ฐ ์ด๋ค ๋ชจ๋๋ฅผ ํ์ํ ์ ์๋์ง ์์๋ณด์. ๋จผ์ ๋ช๊ฐ์ง ๋ชจ๋๋ฅผ ํ์ํ ์ ์๋์ง ์์๋ณด์
~cpp UINT IDirect3D8::GetAdapterModeCount( UINT Adapter; );
- Adapter์๋ ์ด๋ํฐ์ ๋ฒํธ(D3DADAPTER_DEFAULT)๋ฅผ ๋ฃ๋๋ค. ๋ฆฌํด๊ฐ์ ํ์ํ ์ ์๋ ๋ชจ๋์ ๊ฐ์
์ด๋ค ๋ชจ๋๊ฐ ์ด๋ป๊ฒ ํ์ํ๋์ง๋ฅผ ์์๋ณด๋ ค๋ฉด
~cpp HRESULT IDirect3D8::EnumAdapterModes( UINT Adapter, UINT Mode, D3DDISPLAYMODE* pMode );
- Adapter์๋ ์ด๋ํฐ์ ๋ฒํธ๋ฅผ, Mode์๋ ํ์ํ ๋ชจ๋์ ๋ฒํธ(0 ~ GetAdapterModeCount() - 1์ ๋ฒ์)๋ฅผ ๋ฃ๋๋ค.
- pMode์ ๊ทธ ๋ชจ๋์ ์ ๋ณด๊ฐ ๋์จ๋ค.
~cpp Width : ๊ฐ๋กํญ Height : ์ธ๋กํญ RefreshRate : ์ฃผ์ฌ์จ Format : ํฌ๋งท(์์ชฝ์ ๋์๋)