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의 버전이 일치하지 않음을 나타냅니다.
예제
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 |