空のウインドウを表示する

とりあえず空のウインドウを表示します。
と、言ってもDirectX11の初期化を済ませているのでれっきとした
DirectXのプログラムです。

 

#pragma comment(lib,"d3d11.lib")
#pragma comment(lib,"d3dx11.lib")
#include <d3dx11.h>

//定数定義
#define WINDOW_WIDTH 320 //ウィンドウ幅
#define WINDOW_HEIGHT 240 //ウィンドウ高さ

//グローバル変数
HWND hWnd=NULL;
ID3D11Device* Device = NULL;
ID3D11DeviceContext* DeviceContext=NULL;
IDXGISwapChain* SwapChain = NULL;
ID3D11RenderTargetView* RenderTargetView = NULL;

//ダイレクト3Dの初期化関数
HRESULT InitD3D(HWND hWnd)
{
 // デバイスとスワップチェーンの作成
 DXGI_SWAP_CHAIN_DESC sd;
    ZeroMemory( &sd, sizeof(sd) );
    sd.BufferCount = 1;         //バックバッファの数
    sd.BufferDesc.Width = WINDOW_WIDTH;     //バッファの幅
    sd.BufferDesc.Height = WINDOW_HEIGHT;    //バッファの高さ
    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //バッファのフォーマット
    sd.BufferDesc.RefreshRate.Numerator = 60;   //リフレッシュレート
    sd.BufferDesc.RefreshRate.Denominator = 1;
    sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    sd.OutputWindow = hWnd;
    sd.SampleDesc.Count = 1;
    sd.SampleDesc.Quality = 0;
    sd.Windowed = TRUE;

 D3D_FEATURE_LEVEL  FeatureLevel = D3D_FEATURE_LEVEL_11_0;


    if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_REFERENCE, NULL,0,
     &FeatureLevel,1,     
                     D3D11_SDK_VERSION, &sd, &SwapChain, &Device ,NULL,&DeviceContext) ) )
    {
        return FALSE;
    }
 //レンダーターゲットビューの作成
 ID3D11Texture2D *BackBuffer;
    SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ),(LPVOID*)&BackBuffer);   
    Device->CreateRenderTargetView( BackBuffer, NULL, &RenderTargetView );
    BackBuffer->Release();
 DeviceContext->OMSetRenderTargets(1, &RenderTargetView,NULL);

 //ビューポートの設定
 D3D11_VIEWPORT vp;
    vp.Width = WINDOW_WIDTH;
    vp.Height = WINDOW_HEIGHT;
    vp.MinDepth = 0.0f;
    vp.MaxDepth = 1.0f;
    vp.TopLeftX = 0;
    vp.TopLeftY = 0;
    DeviceContext->RSSetViewports( 1, &vp );

 
 return S_OK;
}

//レンダリング
VOID Render()
{
 float ClearColor[4] = {1,1,1,1 }; // クリア色作成 RGBAの順
    DeviceContext->ClearRenderTargetView( RenderTargetView, ClearColor );//画面クリア   
 SwapChain->Present( 0, 0 );//画面更新(バックバッファをフロントバッファに) 
}

//終了時解放処理
VOID Cleanup()
{
 SwapChain->Release();
 RenderTargetView->Release();
 DeviceContext->Release();
 Device->Release();
}

//メッセージプロシージャ
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
 switch(msg)
 {
  case WM_DESTROY://終了時
   Cleanup();
   PostQuitMessage(0);
   break;
 }
 return DefWindowProc (hWnd, msg, wParam, lParam);
}

//メイン関数
INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)
{
 //ウインドウクラスの登録
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      L"Window1", NULL };
    RegisterClassEx( &wc );
 //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定
 RECT rect;
 SetRect(&rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
 AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
 rect.right=rect.right-rect.left;
 rect.bottom=rect.bottom-rect.top;
 rect.top=0;
 rect.left=0;
     //ウインドウの生成
    hWnd = CreateWindow( L"Window1", L"Hello DirectX11 World !!",
    WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom,
                              NULL, NULL, wc.hInstance, NULL );
 
 MSG msg;
 ZeroMemory(&msg,sizeof(msg));
 //Direct3D初期化
    if(SUCCEEDED(InitD3D(hWnd)))
    {
  //ウインドウ表示
  ShowWindow(hWnd,SW_SHOW);
  UpdateWindow(hWnd);
  while(msg.message!=WM_QUIT)
  {
   if( PeekMessage(&msg,NULL,0,0,PM_REMOVE))
   {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }
   else
   {
    Render();
   }
  }
 }

 //終了
 return 0;
}

 

最終更新:2011年02月23日 22:28
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。
添付ファイル