codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
//--------------------------------- //宣言部 //--------------------------------- class DxGame { //パブリックプロパティ public: bool IsError; //プロテクテッドプロパティ protected: Logger* logger; //ログ出力用クラス CComPtr<ID3D11Device> device; //デバイス CComPtr<ID3D11DeviceContext> context; //デバイスコンテキスト D3D_FEATURE_LEVEL featureLevel; //アダプタ(ビデオカード)のDirectX対応バージョン CComPtr<IDXGISwapChain> swapChain; //スワップチェイン CComPtr<ID3D11RenderTargetView> renderTargetView; //描画ターゲット CComPtr<ID3D11DepthStencilView> depthStencilView; //深度ステンシルバッファ //内部プロパティ private: CComPtr<IDXGIAdapter> adpter; //アダプタ(ビデオカード) CComPtr<IDXGIFactory> factory; //ファクトリオブジェクト //パブリックメソッド public: DxGame(HWND hWnd); virtual void OnRender(); virtual void OnReSize(WPARAM wParam,LPARAM lParam); virtual void OnKeyDown(WPARAM wParam, LPARAM lParam); ~DxGame(void); //内部メソッド private: void initDirectXCompornent(HWND hWnd); //DirectXの初期化 }; //--------------------------------- //描画部(デバッグ中に消されて行ったコメント達) //--------------------------------- void DxGame::OnRender() { //float backColor[] = { 0.0f, 0.0f, 1.0f ,1.0f }; //this ->context ->ClearRenderTargetView(this ->renderTargetView,backColor); //this ->swapChain ->Present(0,0); } //--------------------------------- //DirectXの初期化 //--------------------------------- void DxGame::initDirectXCompornent(HWND hWnd) { IDXGIDevice1* pDXGIDev = NULL; ID3D11Device* pDevice = NULL; D3D_FEATURE_LEVEL featureLevel; ID3D11DeviceContext* pDeviceContext = NULL; IDXGIAdapter* pDXGIAdapter = NULL; IDXGIFactory* pDXGIFactory = NULL; IDXGISwapChain* pDXGISwpChain = NULL; HRESULT hr; RECT Rect; //-------------------------------------------------------------------- // ウィンドウのクライアント領域取得 //-------------------------------------------------------------------- GetClientRect( hWnd, &Rect ); //-------------------------------------------------------------------- // 初期化順のテーブル //-------------------------------------------------------------------- D3D_FEATURE_LEVEL FeatureLevels[] = { D3D_FEATURE_LEVEL_11_0, // DirectX11対応GPU D3D_FEATURE_LEVEL_10_1, // DirectX10.1対応GPU D3D_FEATURE_LEVEL_10_0, // DirectX10対応GPU D3D_FEATURE_LEVEL_9_3, // DirectX9/ShaderModel3対応GPU D3D_FEATURE_LEVEL_9_2, // DirectX9/ShaderModel2対応GPU D3D_FEATURE_LEVEL_9_1, // DirectX9/ShaderModel2対応GPU }; //-------------------------------------------------------------------- // デバイスの生成 //-------------------------------------------------------------------- hr = D3D11CreateDevice( NULL, // 生成するアダプター D3D_DRIVER_TYPE_HARDWARE, // ハードウェアデバイス NULL, // ソフトウェアデバイスのモジュール 0,//D3D11_CREATE_DEVICE_DEBUG, // フラグ FeatureLevels, // デバイスの初期化順ハードウェアテーブル sizeof(FeatureLevels) / sizeof(D3D_FEATURE_LEVEL), // ↑のテーブルの数 D3D11_SDK_VERSION, // SDKのバージョン &pDevice, // デバイス格納先 &featureLevel, // 初期化できたデバイス格納先 &pDeviceContext ); // デバイスコンテキスト格納先 if FAILED( hr ) { hr = D3D11CreateDevice( NULL, D3D_DRIVER_TYPE_REFERENCE, NULL, 0,//D3D11_CREATE_DEVICE_DEBUG, FeatureLevels, sizeof(FeatureLevels) / sizeof(D3D_FEATURE_LEVEL), D3D11_SDK_VERSION, &pDevice, &featureLevel, &pDeviceContext ); } if FAILED( hr ) { //MessageBox( hWnd, "デバイスの生成に失敗しました", "D3D11CreateDevice", MB_ICONSTOP ); goto EXIT; } //-------------------------------------------------------------------- // デバイスからIDXGIDevice1を取得して // そこからアダプターとファクトリーを取得 //-------------------------------------------------------------------- hr = pDevice->QueryInterface( __uuidof(IDXGIDevice1), (void**)&pDXGIDev ); if FAILED( hr ) { //MessageBox( hWnd, "IDXGIDevice1の取得に失敗しました", "QueryInterface", MB_ICONSTOP ); goto EXIT; } // アダプター取得 hr = pDXGIDev->GetAdapter( &pDXGIAdapter ); if FAILED( hr ) { //MessageBox( hWnd, "IDXGIAdapterの取得に失敗しました", "IDXGIDevice1::GetAdapter", MB_ICONSTOP ); goto EXIT; } // ファクトリー取得 hr = pDXGIAdapter->GetParent( __uuidof(IDXGIFactory), (void**)&pDXGIFactory ); if FAILED( hr ) { //MessageBox( hWnd, "IDXGIFactoryの取得に失敗しました", "IDXGIAdapter::GetParent", MB_ICONSTOP ); goto EXIT; } //-------------------------------------------------------------------- // スワップチェイン用のパラメーター //-------------------------------------------------------------------- DXGI_SWAP_CHAIN_DESC swapChainDesc; swapChainDesc.BufferDesc.Width = Rect.right - Rect.left; // バックバッファの横 swapChainDesc.BufferDesc.Height = Rect.bottom - Rect.top; // バックバッファの縦 swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; // バックバッファのフォーマット swapChainDesc.BufferDesc.RefreshRate.Denominator = 1; // リフレッシュレートの分子 swapChainDesc.BufferDesc.RefreshRate.Numerator = 60; // リフレッシュレートの分母 swapChainDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; // スキャンラインのパラメーター swapChainDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; // スキャンラインのパラメーター swapChainDesc.SampleDesc.Count = 1; // マルチサンプルのカウント swapChainDesc.SampleDesc.Quality = 0; // マルチサンプルの品質 swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; // バックバッファのフラグ swapChainDesc.BufferCount = 3; // バックバッファ数 swapChainDesc.OutputWindow = hWnd; // 関連付けるウィンドウのハンドル swapChainDesc.Windowed = 1; // ウィンドウモードで起動するか否か swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; // 画面更新の方法 swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; // スワップチェインのフラグ //-------------------------------------------------------------------- // スワップチェインをデバイスから作成する //-------------------------------------------------------------------- hr = pDXGIFactory->CreateSwapChain( pDevice, &swapChainDesc, &pDXGISwpChain ); if FAILED( hr ) { //MessageBox( hWnd, "スワップチェインの生成に失敗しました", "CreateSwapChain", MB_ICONSTOP ); goto EXIT; } //-------------------------------------------------------------------- // 全初期化処理を突破した //-------------------------------------------------------------------- EXIT: SAFE_RELEASE( pDXGIDev ); this ->device.Attach(pDevice); this ->context.Attach(pDeviceContext); this ->adpter.Attach(pDXGIAdapter); this ->factory.Attach(pDXGIFactory); this ->swapChain.Attach(pDXGISwpChain); return; } DxGame::~DxGame(void) { //DirectX解放 BOOL isFullScreen = FALSE; this ->swapChain ->GetFullscreenState(&isFullScreen,NULL); if(isFullScreen) { this ->swapChain ->SetFullscreenState(!isFullScreen,NULL); } this ->context ->ClearState(); this ->logger ->Write(_T("解放処理\n")); delete this ->logger; /* スマートポインタ未使用時の解放処理 SAFE_RELEASE(this ->depthStencilView); SAFE_RELEASE(this ->renderTargetView); SAFE_RELEASE(this ->swapChain); SAFE_RELEASE(this ->factory); SAFE_RELEASE(this ->adpter); SAFE_RELEASE(this ->device); SAFE_RELEASE(this ->context); */ }
Private
[
?
]
Run code
Submit