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๋ฒˆ์งธ ์ธ์ž์˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.)
  • D3DDEVTYPE_HAL : ํ•˜๋“œ์›จ์–ด์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • D3DDEVTYPE_REF : HAL ๋ณด๋‹ค ๋А๋ฆฌ์ง€๋งŒ ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ ์ง€์›
  • 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.0088 sec