void CD3DApp::DestroyD3DApp() { g_uiWndWidth = 0; g_uiWndHeight = 0; m_wWndPosX = 0; m_wWndPosY = 0; m_bFullscreen = 0; m_liCountNum = 0; m_liLastCountNum = 0; m_bPaused = 1; m_hInst = 0; g_hWnd = 0; g_uiWndWidth = 0; g_uiWndHeight = 0; ReleaseX(g_pSwapChain); ReleaseX(g_pD3DDevice); ReleaseX(m_pDinput); m_pKeyboard->Unacquire(); ReleaseX(m_pKeyboard); m_pMouse->Unacquire(); ReleaseX(m_pMouse); UnregisterClassW(m_szWndClassName, m_hInst); delete[] m_szWndClassName; m_szWndClassName = NULL; delete[] m_szWndTitleText; m_szWndTitleText = NULL; }
void CD3DApp::WindowResize() { ID3D10RenderTargetView * pRTV[] = {NULL}; g_pD3DDevice->OMSetRenderTargets(1, pRTV, NULL); ReleaseX(g_pRenderTargetView); ReleaseX(g_pDepthStencilView); //ReleaseX(g_pDepthSetncilBuffer); if (FAILED(g_pSwapChain->ResizeBuffers(1, g_uiWndWidth, g_uiWndHeight, DXGI_FORMAT_R8G8B8A8_UNORM, 0))) { DxUtSendError("Window could not be resized."); } ID3D10Texture2D* pBackBuffer; if (FAILED(g_pSwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (void**)(&pBackBuffer)))) { DxUtSendError("Window could not be resized."); } if (FAILED(g_pD3DDevice->CreateRenderTargetView(pBackBuffer, 0, &g_pRenderTargetView))) { DxUtSendError("Window could not be resized."); } ReleaseX(pBackBuffer); D3D10_TEXTURE2D_DESC depthStencilDesc; depthStencilDesc.Width = g_uiWndWidth; depthStencilDesc.Height = g_uiWndHeight; depthStencilDesc.MipLevels = 1; depthStencilDesc.ArraySize = 1; depthStencilDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; depthStencilDesc.SampleDesc.Count = 1; depthStencilDesc.SampleDesc.Quality = 0; depthStencilDesc.Usage = D3D10_USAGE_DEFAULT; depthStencilDesc.BindFlags = D3D10_BIND_DEPTH_STENCIL; depthStencilDesc.CPUAccessFlags = 0; depthStencilDesc.MiscFlags = 0; ID3D10Texture2D * depthStencilBuffer; if (FAILED(g_pD3DDevice->CreateTexture2D(&depthStencilDesc, 0, &depthStencilBuffer))) { DxUtSendError("Window could not be resized."); } if (FAILED(g_pD3DDevice->CreateDepthStencilView(depthStencilBuffer, 0, &g_pDepthStencilView))) { DxUtSendError("Window could not be resized."); } ReleaseX(depthStencilBuffer); g_pD3DDevice->OMSetRenderTargets(1, &g_pRenderTargetView, g_pDepthStencilView); D3D10_VIEWPORT vp; vp.TopLeftX = 0; vp.TopLeftY = 0; vp.Width = g_uiWndWidth; vp.Height = g_uiWndHeight; vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; g_pD3DDevice->RSSetViewports(1, &vp); }
void ExtractValuesFromImageFile(CHAR * szImageFile, void ** ppData, DWORD dwStride, DWORD * pdwImageWidth, DWORD * pdwImageHeight) { CHAR file[MAX_PATH]; InsertDirectory(g_szFileDir, szImageFile, file); D3DX10_IMAGE_INFO imageInfo; D3DX10GetImageInfoFromFileA(file, 0, &imageInfo, 0); DWORD width = imageInfo.Width; if (pdwImageWidth) *pdwImageWidth = width; DWORD height = imageInfo.Height; if (pdwImageHeight) *pdwImageHeight = height; D3DX10_IMAGE_LOAD_INFO loadInfo; loadInfo.Width = width; loadInfo.Height = height; loadInfo.Depth = imageInfo.Depth; loadInfo.FirstMipLevel = 0; loadInfo.MipLevels = imageInfo.MipLevels; loadInfo.Usage = D3D10_USAGE_STAGING; loadInfo.BindFlags = 0; loadInfo.CpuAccessFlags = D3D10_CPU_ACCESS_READ; loadInfo.MiscFlags = 0; loadInfo.Format = imageInfo.Format; loadInfo.Filter = D3DX10_FILTER_NONE; loadInfo.MipFilter = D3DX10_FILTER_NONE; loadInfo.pSrcInfo = 0; ID3D10Texture2D * tex; if (FAILED(D3DX10CreateTextureFromFileA(g_pD3DDevice, file, &loadInfo, 0, (ID3D10Resource**)&tex, NULL))) { DxUtSendErrorEx("ExtractValuesFromImageFile could not load the image file.", file); } *ppData = new CHAR[dwStride*width*height]; D3D10_MAPPED_TEXTURE2D map; tex->Map(0, D3D10_MAP_READ, 0, &map); BYTE * ar = (BYTE*)map.pData; for (DWORD i=0; i<height; i++) { DWORD rowStart1 = i*dwStride*width; DWORD rowStart2 = i*dwStride*map.RowPitch/4; for (DWORD j=0; j<dwStride*width; j++) { ((BYTE*)(*ppData))[rowStart1 + j] = ar[rowStart2 + j]; } } tex->Unmap(0); ReleaseX(tex); }
void CEffect::CreateEffect(HMODULE hMod, LPCWSTR fxResource) { DWORD flags = D3D10_SHADER_ENABLE_STRICTNESS; #if defined (DEBUG) | (_DEBUG) flags |= D3D10_CREATE_DEVICE_DEBUG; #endif ID3D10Blob * errors = NULL; D3DX10CreateEffectFromResourceW(hMod, fxResource, NULL, NULL, NULL, "fx_4_0", flags, 0, g_pD3DDevice, NULL, NULL, &m_pEffect, &errors, NULL); if (errors) { MessageBoxA(0, (char*)errors->GetBufferPointer(), 0, 0); _DestroyProcess(); } else if (!m_pEffect) { DxUtSendErrorEx("CreateEffect could not create ID3DX10Effect from resource.", (CHAR*)fxResource); } ReleaseX(errors); }
void CEffect::CreateEffect(CHAR * szFxFile) { char file[MAX_PATH]; InsertDirectoryEx(g_szFileDir, szFxFile, file); DWORD flags = D3D10_SHADER_ENABLE_STRICTNESS; #if defined (DEBUG) | (_DEBUG) flags |= D3D10_CREATE_DEVICE_DEBUG; #endif ID3D10Blob * errors = NULL; D3DX10CreateEffectFromFileA(file, NULL, NULL, "fx_4_0", flags, 0, g_pD3DDevice, NULL, NULL, &m_pEffect, &errors, NULL); if (errors) { MessageBoxA(0, (char*)errors->GetBufferPointer(), 0, 0); _DestroyProcess(); } else if (!m_pEffect) { DxUtSendErrorEx("CreateEffect could not create ID3DX10Effect from file.", file); } ReleaseX(errors); }
Sky::~Sky() { ReleaseX(m_pSkyMesh); ReleaseX(m_pSkyTexture); ReleaseX(m_pEffect); }