/*------------------------------------------------------------
DirectX Graphics サンプルプログラム
2007 Copyright(C) Toru
ToruのDirectXプログラミング講座
URL : http://toruweb.web.fc2.com/
Mail : toru_website@hotmail.com
--------------------------------------------------------------*/
#define STRICT
// インクルード
#include
#include
#include
#include
// インターフェイス解放
#define RELEASE(x) if(x){x->Release();x=NULL;}
// アプリケーション情報
HINSTANCE g_hInst;
HWND g_hWnd;
char g_szAppName[] = "DirectX Graphics Sample";
UINT g_uWidth = 640; // ウインドウサイズ・幅
UINT g_uHeight = 480; // ウインドウサイズ・高さ
// DirectX9 Graphicsの変数
LPDIRECT3D9 g_lpD3D = NULL;
LPDIRECT3DDEVICE9 g_lpD3DDevice = NULL;
LPD3DXSPRITE g_lpD3DXSprite = NULL;
LPDIRECT3DTEXTURE9 g_lpD3DTexture = NULL;
// メッセージ関数の定義
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, UINT wParam, LONG lParam );
// アプリケーションの初期化
BOOL InitApp( HINSTANCE hInst, INT nCmdShow )
{
// インスタンスハンドル保存
g_hInst = hInst;
// ウインドウクラスの登録
WNDCLASS wc;
ZeroMemory( &wc, sizeof(wc) );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.lpszClassName = "Main Window";
wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
wc.hInstance = hInst;
wc.style = CS_BYTEALIGNCLIENT | CS_VREDRAW|CS_HREDRAW;
wc.lpfnWndProc = (WNDPROC)MainWndProc;
if( ! RegisterClass(&wc) )
{
DXTRACE_MSG( "ウインドウクラスの登録に失敗" );
return FALSE;
}
// メインウインドウの作成
g_hWnd = CreateWindowEx( 0, "Main Window", g_szAppName,
WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION,
CW_USEDEFAULT, CW_USEDEFAULT, g_uWidth, g_uHeight,
(HWND)NULL, (HMENU)NULL, hInst, (LPSTR)NULL);
if( g_hWnd == NULL )
{
DXTRACE_MSG( "メインウインドウ作成に失敗" );
return FALSE;
}
// メインウインドウの表示
ShowWindow( g_hWnd, nCmdShow );
UpdateWindow( g_hWnd );
return TRUE;
}
// DirectXGraphicsの初期化
BOOL InitDXGraphics()
{
HRESULT hr;
// Direct3Dオブジェクトの作成
g_lpD3D = Direct3DCreate9( D3D_SDK_VERSION );
if( g_lpD3D == NULL ) return FALSE;
D3DPRESENT_PARAMETERS param;
ZeroMemory( ¶m, sizeof(param) );
param.BackBufferWidth = g_uWidth; // 解像度・幅
param.BackBufferHeight = g_uHeight; // 解像度・高さ
param.BackBufferFormat = D3DFMT_R5G6B5; // ピクセルフォーマット(ウインドウモード時は「D3DFMT_UNKNOWN」もしくは調べる)
param.BackBufferCount = 1; // バックバッファ1つ
param.SwapEffect = D3DSWAPEFFECT_DISCARD;// バックバッファを表示する方法
param.Windowed = FALSE; // フルスクリーン
// 現在のピクセルフォーマットを取得,設定
/* D3DDISPLAYMODE mode;
hr = g_lpD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &mode );
if( FAILED(hr)) return FALSE;
param.BackBufferFormat = mode.Format; // ピクセルフォーマット
*/
// デバイスの作成
hr = g_lpD3D->CreateDevice( D3DADAPTER_DEFAULT, // プライマリディスプレイアダプタ
D3DDEVTYPE_HAL, // HALを利用
g_hWnd, // ウインドウハンドル
D3DCREATE_SOFTWARE_VERTEXPROCESSING,// ソフトウェアによる頂点処理
¶m, // パラメータ
&g_lpD3DDevice ); //
if( FAILED(hr)) return FALSE;
// スプライトの作成
D3DXCreateSprite( g_lpD3DDevice, &g_lpD3DXSprite );
// テクスチャの読み込み
D3DXCreateTextureFromFile( g_lpD3DDevice, "bg.jpg", &g_lpD3DTexture );
return TRUE;
}
BOOL ReleaseDXGraphics()
{
// 解放
RELEASE( g_lpD3DTexture );
RELEASE( g_lpD3DXSprite );
RELEASE( g_lpD3DDevice );
RELEASE( g_lpD3D );
return TRUE;
}
// 終了の処理
BOOL EndApp()
{
return TRUE;
}
// 描画処理
BOOL Draw()
{
if( ! g_lpD3D ) return FALSE;
if( ! g_lpD3DDevice ) return FALSE;
// バックバッファをクリア
g_lpD3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 0, 0 );
// 描画開始
g_lpD3DDevice->BeginScene();
g_lpD3DXSprite->Begin(); // スプライト描画開始
// スプライト描画
RECT Rect = { 0,0,256,256 }; // 描画範囲
D3DXVECTOR2 Scaling( 1.0f, 1.0f ); // スケーリング
D3DXVECTOR2 Center( 128,128 ); // 回転時の中心座標
D3DXVECTOR2 Translation( 100.0f, 100.0f ); // 描画位置
INT nDegree = 0; // 角度
g_lpD3DXSprite->Draw( g_lpD3DTexture, &Rect, &Scaling, &Center, D3DXToRadian( nDegree % 360 ), &Translation, 0xffffffff );
// 描画終了
g_lpD3DXSprite->End(); // スプライト描画終了
g_lpD3DDevice->EndScene();
// バックバッファを表示
g_lpD3DDevice->Present( NULL, NULL, NULL, NULL );
return TRUE;
}
// ウィンドウ処理
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, UINT wParam, LONG lParam )
{
switch( msg )
{
case WM_PAINT:
Draw();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc( hWnd, msg, wParam, lParam );
}
return 0L;
}
// メイン
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
{
MSG msg;
// アプリケーションの初期化
if( InitApp( hInst, nCmdShow ) )
{
// DirectXGraphicsの初期化
if( InitDXGraphics() )
{
// メッセージループ
while( GetMessage( &msg, 0, 0, 0 ) )
{
if( msg.message == WM_QUIT ) break;
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
}
// DirectXGraphicsの終了処理
ReleaseDXGraphics();
// アプリケーションの終了処理
EndApp();
return msg.wParam;
}
- Last Update 2007/1/21
- Copyright © 2002-2007 Toru. All Rights Reserved.
- toru_website@hotmail.com