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.0229 sec