U E D R , A S I H C RSS

2d In Direct3d/Chapter1

1. Initializing Direct3D

1.1. Initialization Step

  1. IDirect3D8 ๊ฐฒด๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ˜ธ™˜„ žˆ๋Š” IDirect3D8 ๊ฐฒด๋ฅผ ๊ฒ€‚ฌ•œ ›„,   ••œ ๋””๋ฐ”ดŠค ƒ€ž…„ ๊ณ ๋ฅธ๋‹ค.
  3. ๋””Šค”Œ๋ ˆด ๋ชจ๋“œ™€ –ด๋Œ‘„ฐ๋ฅผ „ ƒ•œ๋‹ค.
  4. IDirect3DDevice8 ๊ฐฒด๋ฅผ ๋งŒ๋“ค๊ณ  ˆ๊ธฐ™”•œ๋‹ค.
  5. …Šคณ๋ฅผ ‚ฌšฉ•ด ๊ฒŒž„ ด๋ฏธง€๋ฅผ ๋ถˆ๋Ÿฌ๋“คธ๋‹ค.
    ด๋ ‡๊ฒŒ จ๋†“๊ณ  ๋ณด๋ฉด ƒ๋‹นžˆ ๊ฐ„๋‹จ•œ ž‘—…ด๋‹ค. -_-;;

1.2. Purpose of the IDirect3D8 Object

ด๊ฒƒ„ ๋งŒ๋“œ๋Š” ดœ ๋Š” ๊ฐ„๋‹จ•˜๋‹ค. IDirect3DDevice8 ๊ฐฒด๋ฅผ ๋งŒ๋“ค๊ธฐ œ„•ด„œ๋Š” "๊ผญ" •„š”•˜๊ธฐ ๋•Œ๋ฌธ— ๋งŒ๋“ ๋‹ค. ด ๊ฐฒด—„œ๋Š” ‹คˆ ธ ž‘—…๋ณด๋‹ค๋Š” ˆ๊ธฐ™”๋ฅผ ๋„™€ฃผ๋Š” —ญ• „ ฃผ๋กœ •œ๋‹ค.

1.3. Creating IDirect3D8 Object

๊ทธ๋Ÿผ ‹ค œ๋กœ ๋งŒ๋“ค–ด๋ณดž. ๋งŒ๋“ค๋•Œ—๋Š” ๋‹คŒ •จˆ˜๊ฐ€ •„š”•˜๋‹ค.

~cpp 
IDirect3D8* Direct3DCreate8 (
  UINT SDKVersion;
);
  1. 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();
  1. RET ๋ช‡๊ฐœ˜ –ด๋Œ‘„ฐ๊ฐ€ žˆ๋Š”ง€ •Œ๋ คค€๋‹ค. 1๊ฐœ๊ฐ€ žˆœผ๋ฉด 1, 2๊ฐœ๊ฐ€ žˆœผ๋ฉด 2๋‹ค.

    –ด๋Œ‘„—๋Š” ๋ชจ๋‘ ๋ฒˆ˜ธ๊ฐ€ ๋ถ™–ดžˆ๋‹ค. ฒซ๋ฒˆงธ –ด๋Œ‘„—๋Š” 0, ๋‘๋ฒˆงธ –ด๋Œ‘„—๋Š” 1, ด๋Ÿฐ ‹ด๋‹ค. 0€ ๊ธฐ๋ณธœผ๋กœ žˆ๊ธฐ ๋•Œ๋ฌธ— ๋งคฌ๋กœ๋กœ๋„ ๋งŒ๋“ค–ด ธ žˆ๋‹ค. D3DADAPTER_DEFAULT ๋งคฌ๋กœด๋‹ค. 0๋ฒˆ –ด๋Œ‘„ฐ๋ฅผ ๊ธฐ๋ณธ –ด๋Œ‘„ฐ๋ผ๊ณ ๋„ •œ๋‹ค.

    ๊ทธ –ด๋Œ‘„ฐ๋Š” –ด๋–ค ƒƒœผ๊นŒ

~cpp 
HRESULT GetAdapterIdentifier {
  UINT Adapter,
  DWORD Flags,
  D3DADAPTER_IDENTIFIER8* pIdentifier
};
  1. RET HRESULT˜•˜ ๊ฐ’„ ๋ฆฌ„•œ๋‹ค. „๊ณต•˜๋ฉด D3D_OK, ‹คŒจ•˜๋ฉด D3D_INVALIDCALLด ๋‚˜˜จ๋‹ค.
  2. IN ฒซ๋ฒˆงธ ธž๋Š”, –ด๋Œ‘„˜ ๋ฒˆ˜ธด๋‹ค. ๋‹น—ฐžˆ D3DADAPTER_DEFAULT๋ฅผ ๋„–ดค€๋‹ค.
  3. IN ๋‘๋ฒˆงธ ธž๋Š” ”Œ๋ž˜๊ทธด๋‹ค. 0ด๋‚˜ D3D_ENUM_NO_WHQL_LEVEL„„„ ˆ˜ žˆง€๋งŒ, ๋Œ€๊ฐœ 0„„ฃ๋Š”๋‹ค.
  4. 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๋ฒˆงธ ธž˜ ๊ฐ’œผ๋กœ ‚ฌšฉ•œ๋‹ค.)
  1. D3DDEVTYPE_HAL : •˜๋“œ›–ด—„œ ง€›•˜๋Š” ๊ธฐ๋Šฅ„ ‚ฌšฉ•œ๋‹ค.
  2. D3DDEVTYPE_REF : HAL ๋ณด๋‹ค ๋А๋ฆฌง€๋งŒ †Œ”„Šธ›–ด œผ๋กœ ง€›
  3. D3DDEVTYPE_SW : •˜๋“œ›–ด ๊ฐ€†„  „˜€ ‚ฌšฉ•˜ง€ •Š๊ณ  †Œ”„Šธ›–ด œผ๋กœ —๋ฎฌ๋ ˆด…˜

1.5. Display Format

๋””Šค”Œ๋ ˆด˜ ฌ๋งท„  €žฅ•˜๋Š” ๋ฐด„˜•ด D3DFORMAT๋ผ๋Š” ˜•ƒœด๋‹ค. A,R,G,B ๋„ค๊ฐ€ง€˜ ๊ฐ’„ ๋ช‡๋น„Šธ”ฉ ๊ฐ–๋Š”ง€๋ฅผ ƒ„•˜๊ฒŒ  ••  ˆ˜ žˆ๋‹ค.
ž„•œ ๊ฒƒ€ MSDN„,
  1. 32๋น„Šธ ฌ๋งทœผ๋กœ๋Š” D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8 ๋“ด žˆ๋‹ค.
  2. 24๋น„Šธ ฌ๋งทœผ๋กœ๋Š” D3DFMT_R8G8B8 ด žˆ๋‹ค.
  3. 16๋น„Šธ ฌ๋งทœผ๋กœ๋Š” D3DFMT_R5G6B5, D3DFMT_X1R5G5B5, D3DFMT_A1R5G5B5, D3DFMT_A4R4G4B4 ๋“ด žˆ๋‹ค.

1.6. Enumeration Display Mode

1.6.1. Looking at Adapter Display Modes

‹ค–‰ž˜ –ด๋Œ‘„ฐ๊ฐ€ –ด๋–ค ๋ชจ๋“œ๋ฅผ ‘œ‹œ•  ˆ˜ žˆ๋Š”ง€ •Œ•„๋ณดž. ๋จผ € ๋ช‡๊ฐ€ง€ ๋ชจ๋“œ๋ฅผ ‘œ‹œ•  ˆ˜ žˆ๋Š”ง€ •Œ•„๋ณดž

~cpp 
UINT IDirect3D8::GetAdapterModeCount(
  UINT Adapter;
);
  1. Adapter—๋Š” –ด๋Œ‘„˜ ๋ฒˆ˜ธ(D3DADAPTER_DEFAULT)๋ฅผ ๋„ฃ๋Š”๋‹ค. ๋ฆฌ„ด๊ฐ’€ ‘œ‹œ•  ˆ˜ žˆ๋Š” ๋ชจ๋“œ˜ ๊ฐœˆ˜

    –ด๋–ค ๋ชจ๋“œ๊ฐ€ –ด๋–ป๊ฒŒ ‘œ‹œ•˜๋Š”ง€๋ฅผ •Œ•„๋ณด๋ ค๋ฉด

~cpp 
HRESULT IDirect3D8::EnumAdapterModes(
  UINT Adapter,
  UINT Mode,
  D3DDISPLAYMODE* pMode
);
  1. Adapter—๋Š” –ด๋Œ‘„˜ ๋ฒˆ˜ธ๋ฅผ, Mode—๋Š” ‘œ‹œ•  ๋ชจ๋“œ˜ ๋ฒˆ˜ธ(0 ~ GetAdapterModeCount() - 1˜ ๋ฒ”œ„)๋ฅผ ๋„ฃ๋Š”๋‹ค.
  2. pMode— ๊ทธ ๋ชจ๋“œ˜  •๋ณด๊ฐ€ ๋‚˜˜จ๋‹ค.

~cpp 
  Width : ๊ฐ€๋กœญ
  Height : „ธ๋กœญ
  RefreshRate : ฃผ‚ฌœจ
  Format : ฌ๋งท(•žชฝ— ๋‚˜™”๋˜)

1.6.2. Getting the Current Display Mode

˜„žฌ –ด๋–ค ๋ชจ๋“œธง€ –ป–ด˜ฌ ˆ˜ žˆ๋‹ค.

~cpp 
HRESULT GetAdapterDisplayMode(
  UINT Adapter,
  D3DDISPLAYMODE* pMode
);
ธž๋Š” œ„˜๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

2. Checking For Compatible Formats

2.1. Checking Resource Formats

2.2. Checking Support


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:14
Processing time 0.0204 sec