태그 : Direct3D9

HRESULT CreateDevice

2008/04/09 수요일. HRESULT CreateDevice

:: 오늘의 넋두리---------------------------------------------------------------------------------
  관련된 내용은 : Direct3D 9 초기화 (Sample Code:Tut01_CreateDevice)
------------------------------------------------------------------------------------------------

<ex>
if
( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }

=======================================================================================

HRESULT CreateDevice(
    ... parameters ...
);

=======================================================================================

... parameters ...
  UINT Adapter,
        그래픽 카드, D3DADAPTER_DEFAULT(주 디스플레이 장치를 선택)

  D3DDEVTYPE DeviceType,
        D3DDEVTYPE_HAL, D3DDEVTYPE_REF, D3DDEVTYPE_SW, etc.

  HWND hFocusWindow,
        장치와 연결될 윈도우 핸들

  DWORD BehaviorFlags,
        #define D3DCREATE_FPU_PRESERVE                  0x00000002L
            - 배정밀도 연산. Dirct3D의 성능 저하 요인.
        #define D3DCREATE_MULTITHREADED                 0x00000004L
            - 쓰레드 안전 모드로 수행하기 위해 속도를 낮춘다. 전역 크리티컬 섹션을 많이 사용하지 않는 것이 좋은 방법이란다.

        #define D3DCREATE_PUREDEVICE                    0x00000010L
            - Get 계열의 함수 사용 금지.

        #define D3DCREATE_SOFTWARE_VERTEXPROCESSING     0x00000020L
            - 정점 쉐이더를 지원시 소프트웨어를 이용하여 T&L(변형 & 라이팅)을 사용

        #define D3DCREATE_HARDWARE_VERTEXPROCESSING     0x00000040L
            - 정점 쉐이더를 지원시 하드웨어를 이용하여 T&L(변형 & 라이팅)을 사용

        #define D3DCREATE_MIXED_VERTEXPROCESSING        0x00000080L
            -  H/W, S/W의 병행 사용

        #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT     0x00000100L
            - 드라이버 대신 Direct3D가 Resource를 관리
        #define D3DCREATE_ADAPTERGROUP_DEVICE           0x00000200L
            - 마스터 어댑터가 소유하는 모든 헤드를 구동하도록 장치에 지시.
        #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX  0x00000400L
            - ???

  D3DPRESENT_PARAMETERS * pPresentationParameters,
        위에서 정의한 PRESENT_PARAMETER 구조체.

  IDirect3DDevice9 ** ppReturnedDeviceInterface
        앞의 매개변수의 수준으로 생성된 Direct3D Device를 return. 1번에서 선언한 Direct3D Device component의 인터페이스 포인터를 인수로 지정한다.

이리하여 g_pd3dDevice에 생성된 Direct3D Device가 도킹 되었다.

 

by 케간지무늬 | 2008/04/09 12:52 | ▶▷DirectX◁◀ | 트랙백 | 덧글(0)

D3D Chapter 01>> DirectX:: Direct3D에 대하여...

2008/04/04 금요일. DirectX:: Direct3D에 대하여...

 :: 오늘의 넋두리--------------------------------------------------------------------------------
 아... 그러고 보니 카테고리 이름이 DirectX로 되어 있군. 사실 현재로서는 Direct3D만 정리할 계획인데... 내가 어째서! DirectX라는 이름을 떡 하니 걸어둔것일까? ㅋ ㅡㅡ;;
 그러고 보니 이글루는... 카테고리에 카테고리를 분할 할 수 없잖아... 이글루 아직은 미약하군....
------------------------------------------------------------------------------------------------


 늘은 Direct3D의 시스템 적인 부분에 대해서 정리해 보도록 하겠다.

 DirectX는 2D와 3D 그래픽, 사운드, 인풋에 관련된 기능을 제공해 준다. 그중에 가장 두각을 나타내고 주목을 받고 있는 녀석이 3D를 담당하는 Direct3D이다.
 Direct3D의 기본 기능은 고속으로 점을 찍는것이다. 혹 GDI를 다뤄 본 사람이 있다면 금방 이해 할것이다. 얼마나 무식한 방법인가?  Pixel을 찍어 가면 화면에 그림을 그린다라... 사실 컴퓨터란놈... 내부로 들어가면 들어갈수록 정말 무식하다. 메모리만 하더라도 초저용량 케페시터를 충전 했다가 리프레쉬.... ㅡㅡ;;; 이런걸 말하고 있을때가 아닌데... 아무튼 점을 고속으로 찍어준더랬다. 다행히 눈에 보이지 않을 많큼 빠르니 무식해 보이지 않는다. ^_________^(사람은 보이는것에 매우 민감해서리 안보이면 장땡!... 쩝)

 DirectX에는 2D를 담당하던 DirectDraw(지금은 DirectGraphics로 Direct3D와 통합되었다.)라는 녀석이 있었는데 이녀석도 점찍기의 고수였다. 하지만 이 둘은 2D와 3D라는 커다란 공간지각적 차이 만큼이나 연산의 양에서도 엄청난 차이를 보인다. 그래서 예전 동컴(동사무소 컴퓨터라고 하여 매우 느린 컴퓨터를 비화한 표현. 지금은 동사무소 컴터도 빠르지 않을라나?)을 쓰던 시절에는 3D라는 녀석이 두각을 보이지 않았다. 하지만, CPU는 엄청나게 발전했고 저런 3D연산쯤은! 가볍게(?) 수행을 해 낼수 있게 되었다. 더구나 Graphic Card는 더욱 발전했고, 요즘 출시되는 제품은 모두 3D 가속기를 내장하고 있어서 3D의 질을 한층 높이고 있는 추세이다. 이것이 무슨 말인고 하니! Direct3D와 그래픽 카드가 Direct로 연결 되여 연산을 한다는 것이다. 
 즉, Direct3D API는 바로 3D 가속기를 사용할 수 있도록 해주는 것이다.

다음은 Directx SDK(March 2008)의 Programming Guide를 발췌한 것이다.


Direct3D Architecture(Direct3D 9)


Direct3D System Intergration:
        다음 그림은 Window 응용프로그램과 Direct3D, GDI 그리고 하드웨어 사이의 관계를 나타낸다.
 Direct3D는 응용프로그램에 장치 동립적인 인터페이스를 노출시킨다. Direct3D 응용프로그램은 GDI응용프로그램과 함께 존재 할 수 있으며, 두가지의 응용프로그램 모두 그래픽 카드 장치 드라이버를 통해 컴퓨터의 그래픽 장치에 접근한다. GDI와는 달리 Direct3D는 hal device의 생성으로 하드웨어 특성을 이용할 수 있다.
 
 hal device는 graphics pipeline 기능(함수)에 하드웨어 가속을 제공하며, 이는 그래픽 카드에 의해 지원되는 특성을 기초로 한다. Direct3D 메소드(기능)들은 런타임에 장치의 디스플레이 가능성 파악을 위해 제공되어진다.(IDirect3D9::GetDeviceCaps와 IDirect3DDeviceCaps) 만약 하드웨어가 기능을 지원하지 않는다면, hal은 그것을 보고하지 않는다.(?? 요기 해석 안되네 ㅡㅡ;)

아... 그냥 원문을 올린다.
=================================================================================================

Direct3D exposes a device-independent interface to an application. Direct3D applications can exist alongsideGDI applications, and both have access to the computer's graphics hardware through the device driver for the graphics card. UnlikeGDI, Direct3D can take advantage of hardware features by creating a hal device.

A hal device provides hardware acceleration to graphics pipeline functions, based upon the feature set supported by the graphics card. Direct3D methods are provided to retrieve device display capabilities at run time. (See IDirect3D9::GetDeviceCaps and IDirect3DDevice9::GetDeviceCaps.) If a capability is not provided by the hardware, the hal does not report it as a hardware capability.

For more information about hal and reference devices supported by Direct3D, see Device Types (Direct3D 9).
==================================================================================================

by 케간지무늬 | 2008/04/04 12:10 | ▶▷DirectX◁◀ | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶