Direct3DCreate9Ex 함수(d3d9.h)

IDirect3D9Ex 개체를 만들고 해당 개체에 대한 인터페이스를 반환합니다.

구문

HRESULT Direct3DCreate9Ex(
  [in]  UINT         SDKVersion,
  [out] IDirect3D9Ex **unnamedParam2
);

매개 변수

[in] SDKVersion

형식: UINT

이 매개 변수의 값은 D3D_SDK_VERSION 합니다. 설명 부분을 참조하세요.

[out] unnamedParam2

형식: IDirect3D9Ex**

만든 IDirect3D9Ex 개체를 나타내는 IDirect3D9Ex 인터페이스에 대한 포인터의 주소입니다. 함수가 실패하면 NULL 이 여기에 삽입됩니다.

반환 값

형식: HRESULT

  • D3DERR_NOTAVAILABLE Direct3DEx 기능이 지원되지 않거나(WDDM 드라이버가 설치되지 않음) SDKVersion 이 DLL 버전과 일치하지 않는 경우입니다.
  • D3DERR_OUTOFMEMORY 열거자 개체를 만들 때 메모리 부족 상태가 감지되면 입니다.
  • 거자 개체를 성공적으로 만들면 S_OK.

설명

IDirect3D9Ex 개체는 애플리케이션이 만드는 첫 번째 개체와 애플리케이션이 릴리스하는 마지막 개체입니다. 디바이스의 기능을 열거하고 검색하는 함수는 IDirect3D9Ex 개체를 통해 액세스할 수 있습니다. 이를 통해 애플리케이션은 디바이스를 만들지 않고도 디바이스를 선택할 수 있습니다.

IDirect3D9Ex 인터페이스는 활성 디스플레이 어댑터의 열거를 지원하며 IDirect3D9Ex 개체를 만들 수 있습니다. 사용자가 어댑터를 동적으로 추가하는 경우(데스크톱에 디바이스를 추가하거나 노트북을 핫 도킹하여) 이러한 디바이스는 열거형에 포함되지 않습니다. 새 IDirect3D9Ex 인터페이스를 만들면 새 디바이스가 노출됩니다.

컴파일된 애플리케이션에서 사용되는 헤더 파일이 설치된 런타임 DLL의 버전과 일치하는지 확인하려면 이 함수에 D3D_SDK_VERSION 플래그를 전달합니다. D3D_SDK_VERSION 헤더 또는 다른 코드 변경 시 애플리케이션을 다시 빌드해야 하는 경우에만 런타임에서 변경됩니다. 이 함수가 실패하면 헤더 파일 및 런타임 DLL의 버전이 일치하지 않음을 나타냅니다.

참고Direct3DCreate9Ex 는 Windows Vista, Windows Server 2008 및 Windows 7에서만 지원됩니다. 이전 버전의 D3D9.dll 라이브러리에는 Direct3D9ExDirect3DCreate9Ex가 포함되지 않습니다.
 

예제

IDirect3D9Ex 개체 만들기

다음 코드 예제에서는 Direct3DCreate9Ex를 사용하여 IDirect3D9Ex 개체를 만드는 방법을 보여 줍니다. 이 예제에서는 IDirect3D9Ex 개체를 사용하여 함수에 대한 out 매개 변수로 반환되는 IDirect3DDevice9Ex 개체를 만듭니다.

HRESULT InitD3D9Ex( /* IN */ HWND hWnd, /* OUT */ IDirect3DDevice9Ex ** ppD3DDevice )
{
    HRESULT hr = E_FAIL;
    IDirect3D9Ex * pD3D = NULL;
    IDirect3DDevice9Ex * pDevice = NULL;

    if(ppD3DDevice == NULL)
    {
        return hr;
    }
    
    // Create the D3D object, which is needed to create the D3DDevice.
    if(FAILED(hr = Direct3DCreate9Ex( D3D_SDK_VERSION, &pD3D )))
    {
        *ppD3DDevice = NULL;
        return hr;
    }
        
        
    // Set up the structure used to create the D3DDevice. 
    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    // Create the Direct3D device. 
    if( FAILED( hr = pD3D->CreateDeviceEx( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, NULL, &pDevice ) ) )

    {
        *ppD3DDevice = NULL;
        return hr;
    }

    // Device state would normally be set here

    *ppD3DDevice = pDevice;

    return hr;
}

Direct3D9Ex를 확인합니다.

다음 코드 예제에서는 Direct3DCreate9Ex가 있는지 검사 지원하지 않는 플랫폼에서 실패하는 방법을 보여 줍니다. 게임 시작 관리자에서 이 코드를 사용하여 사용자에게 오류 메시지를 표시하거나 대신 IDirect3D9 인터페이스를 사용하는 렌더러를 로드할 수 있습니다.

Direct3DCreate9Ex에 대한 검사 위해 이 예제에서는 Win32 LoadLibrary 함수를 사용하여 D3D9.dll 라이브러리를 명시적으로 로드합니다. 그런 다음 Win32 GetProcAddress 함수를 사용하여 Direct3DCreate9Ex의 주소를 포인터에 할당합니다. Direct3DCreate9Ex가 없으면 함수 포인터는 NULL이고 코드 예제에서는 ERROR_NOT_SUPPORTED HRESULT 값을 반환합니다. 그러나 Direct3DCreate9Ex 가 있는 경우 S_OK 값을 반환합니다.

HRESULT CheckD3D9Ex( void )
{
    HRESULT hr = E_FAIL;
    HMODULE libHandle = NULL;

    // Manually load the d3d9.dll library.
    libHandle = LoadLibrary(L"d3d9.dll");

    if(libHandle != NULL)
    {
        // Define a function pointer to the Direct3DCreate9Ex function.
        typedef HRESULT (WINAPI *LPDIRECT3DCREATE9EX)( UINT, void **);

        // Obtain the address of the Direct3DCreate9Ex function. 
        LPDIRECT3DCREATE9EX Direct3DCreate9ExPtr = NULL;
            
        Direct3DCreate9ExPtr = (LPDIRECT3DCREATE9EX)GetProcAddress( libHandle, "Direct3DCreate9Ex" );

        if ( Direct3DCreate9ExPtr != NULL)
        {
            // Direct3DCreate9Ex is supported.
            hr = S_OK;
        }
        else
        {
            // Direct3DCreate9Ex is not supported on this
            // operating system.
            hr = ERROR_NOT_SUPPORTED;
        }

        // Free the library.
        FreeLibrary( libHandle );

    }

    
    return hr;
}

확장 버전이 상속되므로 IDirect3DDevice9Ex 인터페이스 포인터를 IDirect3DDevice9 인터페이스 포인터로 캐스팅할 수 있습니다. 이렇게 하면 새 디바이스가 인터페이스의 의미 체계를 변경하는 경우를 제외하고 기존 Direct3D 9 코드와 함께 확장된 디바이스를 사용할 수 있습니다. 두 인터페이스 간의 차이점에 대한 자세한 내용은 디바이스 동작 변경을 참조하세요.

요구 사항

   
대상 플랫폼 Windows
헤더 d3d9.h
라이브러리 D3d9.lib
DLL D3d9.dll

추가 정보

Direct3D 함수