/** * Saves screenshot and shot of left and right surface. ***/ void StereoView::SaveScreen() { static int screenCount = 0; ++screenCount; char fileName[32]; wsprintf(fileName, "%d_final.bmp", screenCount); char fileNameLeft[32]; wsprintf(fileNameLeft, "%d_left.bmp", screenCount); char fileNameRight[32]; wsprintf(fileNameRight, "%d_right.bmp", screenCount); #ifdef _DEBUG OutputDebugString(fileName); OutputDebugString("\n"); #endif D3DX11SaveTextureToFile(m_pContext, leftSurface, D3DX11_IFF_BMP, fileNameLeft); D3DX11SaveTextureToFile(m_pContext, rightSurface, D3DX11_IFF_BMP, fileNameRight); D3DX11SaveTextureToFile(m_pContext, backBuffer, D3DX11_IFF_BMP, fileName); }
void TW_Save (ID3DTexture2D* T, LPCSTR name, LPCSTR prefix, LPCSTR postfix) { string256 fn; strconcat (sizeof(fn),fn,name,"_",prefix,"-",postfix); for (int it=0; it<int(xr_strlen(fn)); it++) if ('\\'==fn[it]) fn[it] = '_'; string256 fn2; strconcat (sizeof(fn2),fn2,"debug\\",fn,".dds"); Log ("* debug texture save: ",fn2); #ifdef USE_DX11 R_CHK (D3DX11SaveTextureToFile(HW.pContext, T, D3DX11_IFF_DDS, fn2)); #else R_CHK (D3DX10SaveTextureToFile(T, D3DX10_IFF_DDS, fn2)); #endif }
HRESULT D3D11Object::TakeScreenshot() { HRESULT hr = S_OK; string str; LPWSTR str2 = L".\\RayTracerCS\\Screenshots\\test.png"; cvtLPW2stdstring(str,str2); hr = D3DX11SaveTextureToFile(m_pDeviceContext,m_pBackBufferTexture,D3DX11_IFF_PNG,str2); if(FAILED(hr)) { printf("Screenshot FAILED\n"); return hr; } printf("Screenshot saved at %s\n",str.c_str()); return hr; }
void D3DPBRApp::CreateLUT() { D3D11_TEXTURE2D_DESC texDesc; texDesc.Width = 512; texDesc.Height = 512; texDesc.MipLevels = 0; texDesc.ArraySize = 1; texDesc.SampleDesc.Count = 1; texDesc.SampleDesc.Quality = 0; texDesc.Format = DXGI_FORMAT_R16G16_FLOAT; texDesc.Usage = D3D11_USAGE_DEFAULT; texDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; texDesc.CPUAccessFlags = 0; texDesc.MiscFlags = 0; ID3D11Texture2D* LUTTex = 0; HR(md3dDevice->CreateTexture2D(&texDesc, 0, &LUTTex)); // // Create a render target view to each cube map face // (i.e., each element in the texture array). // D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; rtvDesc.Format = texDesc.Format; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; rtvDesc.Texture2D.MipSlice = 0; HR(md3dDevice->CreateRenderTargetView(LUTTex, &rtvDesc, &mLUTRTV)); // // Create a shader resource view to the cube map. // D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; srvDesc.Format = texDesc.Format; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srvDesc.Texture2D.MipLevels = -1; srvDesc.Texture2D.MostDetailedMip = 0; HR(md3dDevice->CreateShaderResourceView(LUTTex, &srvDesc, &mLUTSRV)); D3D11_TEXTURE2D_DESC depthTexDesc; depthTexDesc.Width = 512; depthTexDesc.Height = 512; depthTexDesc.MipLevels = 1; depthTexDesc.ArraySize = 1; depthTexDesc.SampleDesc.Count = 1; depthTexDesc.SampleDesc.Quality = 0; depthTexDesc.Format = DXGI_FORMAT_D32_FLOAT; depthTexDesc.Usage = D3D11_USAGE_DEFAULT; depthTexDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; depthTexDesc.CPUAccessFlags = 0; depthTexDesc.MiscFlags = 0; ID3D11Texture2D* depthTex = 0; HR(md3dDevice->CreateTexture2D(&depthTexDesc, 0, &depthTex)); D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc; dsvDesc.Format = depthTexDesc.Format; dsvDesc.Flags = 0; dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; dsvDesc.Texture2D.MipSlice = 0; HR(md3dDevice->CreateDepthStencilView(depthTex, &dsvDesc, &mLUTDSV)); ReleaseCOM(depthTex); // // Viewport for drawing into cubemap. // mLUTViewport.TopLeftX = 0.0f; mLUTViewport.TopLeftY = 0.0f; mLUTViewport.Width = (float)512; mLUTViewport.Height = (float)512; mLUTViewport.MinDepth = 0.0f; mLUTViewport.MaxDepth = 1.0f; GeometryGenerator::MeshData quad; GeometryGenerator geoGen; geoGen.CreateFullscreenQuad(quad); mQuadIndexNum = quad.Indices.size(); std::vector<Vertex::Basic32> vertices(quad.Vertices.size()); for (int i = 0; i < vertices.size(); i++) { vertices[i].Normal = quad.Vertices[i].Normal; vertices[i].Pos = quad.Vertices[i].Position; vertices[i].Tangent = quad.Vertices[i].TangentU; vertices[i].Tex = quad.Vertices[i].TexC; } D3D11_BUFFER_DESC dbd; dbd.BindFlags = D3D11_BIND_VERTEX_BUFFER; dbd.ByteWidth = sizeof(Vertex::Basic32) * vertices.size(); dbd.CPUAccessFlags = 0; dbd.StructureByteStride = 0; dbd.MiscFlags = 0; dbd.Usage = D3D11_USAGE_DEFAULT; D3D11_SUBRESOURCE_DATA vinitdata; vinitdata.pSysMem = &vertices[0]; HR(md3dDevice->CreateBuffer(&dbd, &vinitdata, &mQuadVB)); std::vector<UINT> indeces(quad.Indices.begin(), quad.Indices.end()); dbd.BindFlags = D3D11_BIND_INDEX_BUFFER; dbd.ByteWidth = sizeof(UINT) * mQuadIndexNum; vinitdata.pSysMem = &indeces[0]; HR(md3dDevice->CreateBuffer(&dbd, &vinitdata, &mQuadIB)); md3dImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); md3dImmediateContext->ClearRenderTargetView(mLUTRTV, reinterpret_cast<const float*>(&Colors::Black)); md3dImmediateContext->ClearDepthStencilView(mLUTDSV, D3D11_CLEAR_DEPTH|D3D11_CLEAR_STENCIL, 1.0f, 0); md3dImmediateContext->OMSetRenderTargets(1, &mLUTRTV, mLUTDSV); md3dImmediateContext->RSSetViewports(1, &mLUTViewport); md3dImmediateContext->IASetInputLayout(InputLayouts::Basic32); ID3DX11EffectTechnique* activeMeshTech = Effects::CommonPassFX->LUTTech; UINT stride = sizeof(Vertex::Basic32); UINT offset = 0; D3DX11_TECHNIQUE_DESC techDesc; activeMeshTech->GetDesc( &techDesc ); for(UINT p = 0; p < techDesc.Passes; ++p) { // Draw the Mesh. md3dImmediateContext->IASetVertexBuffers(0, 1, &mQuadVB, &stride, &offset); md3dImmediateContext->IASetIndexBuffer(mQuadIB, DXGI_FORMAT_R32_UINT, 0); activeMeshTech->GetPassByIndex(p)->Apply(0, md3dImmediateContext); md3dImmediateContext->DrawIndexed(mQuadIndexNum, 0, 0); //m_pSky->Draw(md3dImmediateContext, camera); // Restore default md3dImmediateContext->RSSetState(0); } HR(D3DX11SaveTextureToFile(md3dImmediateContext, LUTTex, D3DX11_IFF_DDS, _T("lut.dds"))); ReleaseCOM(LUTTex); }
//--------------------------------------------------------------------------- void ImageCapture(HWND hWnd) { HRESULT hr; hr=D3DX11SaveTextureToFile(Graphics()->GetDeviceContext(),Graphics()->GetBackBuffer(),D3DX11_IFF_BMP,L".\\CapturedImg.bmp"); }