111 lines
2.7 KiB
C++
111 lines
2.7 KiB
C++
#include <d3d9.h>
|
|
#include <strsafe.h>
|
|
|
|
LPDIRECT3D9 g_pD3D = NULL; // Used to create the D3DDevice
|
|
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Our rendering device
|
|
|
|
HRESULT InitD3D( HWND hWnd )
|
|
{
|
|
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
|
|
return E_FAIL;
|
|
|
|
D3DPRESENT_PARAMETERS d3dpp;
|
|
ZeroMemory( &d3dpp, sizeof( d3dpp ) );
|
|
d3dpp.Windowed = TRUE;
|
|
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
|
|
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
|
|
|
|
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
|
|
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
|
|
&d3dpp, &g_pd3dDevice ) ) )
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
VOID Cleanup()
|
|
{
|
|
if( g_pd3dDevice != NULL )
|
|
g_pd3dDevice->Release();
|
|
|
|
if( g_pD3D != NULL )
|
|
g_pD3D->Release();
|
|
}
|
|
|
|
VOID Render()
|
|
{
|
|
if( NULL == g_pd3dDevice )
|
|
return;
|
|
|
|
// Clear the backbuffer to a blue color
|
|
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );
|
|
|
|
// Begin the scene
|
|
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
|
|
{
|
|
// Rendering of scene objects can happen here
|
|
|
|
// End the scene
|
|
g_pd3dDevice->EndScene();
|
|
}
|
|
|
|
// Present the backbuffer contents to the display
|
|
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
|
|
}
|
|
|
|
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
switch( msg )
|
|
{
|
|
case WM_DESTROY:
|
|
Cleanup();
|
|
PostQuitMessage( 0 );
|
|
return 0;
|
|
|
|
case WM_PAINT:
|
|
Render();
|
|
ValidateRect( hWnd, NULL );
|
|
return 0;
|
|
}
|
|
|
|
return DefWindowProc( hWnd, msg, wParam, lParam );
|
|
}
|
|
|
|
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT )
|
|
{
|
|
// Register the window class
|
|
WNDCLASSEX wc =
|
|
{
|
|
sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L,
|
|
GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
|
|
L"D3D Tutorial", NULL
|
|
};
|
|
RegisterClassEx( &wc );
|
|
|
|
// Create the application's window
|
|
HWND hWnd = CreateWindow( L"D3D Tutorial", L"D3D Tutorial 01: CreateDevice",
|
|
WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
|
|
NULL, NULL, wc.hInstance, NULL );
|
|
|
|
// Initialize Direct3D
|
|
if( SUCCEEDED( InitD3D( hWnd ) ) )
|
|
{
|
|
// Show the window
|
|
ShowWindow( hWnd, SW_SHOWDEFAULT );
|
|
UpdateWindow( hWnd );
|
|
|
|
// Enter the message loop
|
|
MSG msg;
|
|
while( GetMessage( &msg, NULL, 0, 0 ) )
|
|
{
|
|
TranslateMessage( &msg );
|
|
DispatchMessage( &msg );
|
|
}
|
|
}
|
|
|
|
UnregisterClass( L"D3D Tutorial", wc.hInstance );
|
|
return 0;
|
|
}
|