void D3DWrapper::WindowResized(unsigned int clientWidth, unsigned int clientHeight, unsigned int windowWidth, unsigned int windowHeight) { // Output debug information Utility::Logger::Instance().D("Resize: %u x %u\n", clientWidth, clientHeight); m_deviceContext->OMSetRenderTargets(0, NULL, NULL); // Release references to resources m_backBufferView = NULL; m_depthStencilView = NULL; m_depthStencilBuffer = NULL; // Resize the internal buffers HRESULT result = m_swapChain->ResizeBuffers(0, 0, 0, DXGI_FORMAT_UNKNOWN, DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH); if (FAILED(result)) throw DirectXErrorM(result, "Failed to resize buffers"); // Recreate view to internal back buffer. result = CreateBackBufferView(); if (FAILED(result)) throw DirectXErrorM(result, "Failed to recreate back buffer view"); // Recreate depth/stencil buffer result = CreateDepthStencilBuffer(m_backBufferDescription.Width, m_backBufferDescription.Height); if (FAILED(result)) throw DirectXErrorM(result, "Failed to recreate depth/stencil buffer"); m_deviceContext->OMSetRenderTargets(1, &m_backBufferView.Resource(), m_depthStencilView.Resource()); // Recreate the viewports UpdateViewports(m_viewports); }
D3DContext::D3DContext(ApplicationWindow* targetWindow, const Description& description) : mTargetWindow(targetWindow) { if (!CreateDeviceAndSwapChain(description)) throw std::runtime_error("Failed to create device and swap chain"); if (!CreateBackBufferView()) throw std::runtime_error("Failed to create a back buffer view"); if (!CreateDepthStencilBuffer(description.DepthBuffer)) throw std::runtime_error("Failed to create a depth/stencil buffer"); mDevice->OMSetRenderTargets(1, &mBackBufferView, mDepthStencilView); SetViewports(description.Viewports); SetActiveViewport(0); }
void D3D::D3DResize(int screenWidth, int screenHeight) { //ReleaseCOM(m_renderTargetView); //ReleaseCOM(m_depthStencilBuffer); //ReleaseCOM(m_depthStencilView); CreateRenderTargetView(screenWidth, screenHeight); CreateDepthStencilBuffer(screenWidth, screenHeight); CreateDepthStencilView(); m_renderTargetView->AddRef(); int ref = m_renderTargetView->Release(); m_deviceContext->OMSetRenderTargets(1, &m_renderTargetView, m_depthStencilView); SetViewport(screenWidth, screenHeight); }
//--------------------------------------------------------------- void CGraphicsLayer::InitD3D(int Width,int Height,int bpp) { //HRESULT r=0; m_rcScreenRect.top= m_rcScreenRect.left=0; m_rcScreenRect.right=Width; m_rcScreenRect.bottom=Height; if(CreateDeviceAndSwapChain()){return;} CreateShader(); if(CreateRasterizer()){return;} CreateViewport(); CreateDepthStencilBuffer(); m_pDeviceContext->OMSetRenderTargets(1,&m_pRenderTargetView,m_pDepthStencilView); }
Error::E RenderSystem::Initialize(const Window &window) { Error::E err = Error::OK; err = CreateDeviceAndContext(); if (err != Error::OK) { FreeResources(); return err; } err = CreateSwapChain(window); if (err != Error::OK) { FreeResources(); return err; } ID3D11Texture2D *backBuffer; DEBUG_HR(_swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&backBuffer))); DEBUG_HR(_device->CreateRenderTargetView(backBuffer, NULL, &_renderTargetView)); ReleaseCom(backBuffer); err = CreateDepthStencilBuffer(); if (err != Error::OK) { FreeResources(); return err; } _context->OMSetRenderTargets(1, &_renderTargetView, _depthStencilView); D3D11_VIEWPORT vp; vp.TopLeftX = 0; vp.TopLeftY = 0; vp.Width = (float)window.GetWidth(); vp.Height = (float)window.GetHeight(); vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; _context->RSSetViewports(1, &vp); _initOk = true; return Error::OK; }
D3DWrapper::D3DWrapper(Window* targetWindow, const Description& description) : m_targetWindow(targetWindow) { HRESULT result = S_OK; m_targetWindow->AddEventListener(this); result = CreateDeviceAndSwapChain(description.m_displayMode, description.m_fullscreen); if (FAILED(result)) throw DirectXErrorM(result, "Failed to create device and swap chain"); result = CreateBackBufferView(); if (FAILED(result)) throw DirectXErrorM(result, "Failed to create back buffer view"); result = CreateDepthStencilBuffer(description.m_displayMode.m_width, description.m_displayMode.m_height); if (FAILED(result)) throw DirectXErrorM(result, "Failed to create depth stencil buffer/view"); m_deviceContext->OMSetRenderTargets(1, &m_backBufferView.Resource(), m_depthStencilView.Resource()); SetViewports(description.m_viewports); }
bool D3DContext::ResizeBuffers(Description::Buffer backBufferDescription, const Description::Buffer& depthBufferDescription) { backBufferDescription.Width = (backBufferDescription.Width == 0) ? mTargetWindow->GetClientWidth() : backBufferDescription.Width; backBufferDescription.Height = (backBufferDescription.Height == 0) ? mTargetWindow->GetClientHeight() : backBufferDescription.Height; SafeRelease(mBackBufferView); SafeRelease(mDepthStencilBuffer); SafeRelease(mDepthStencilView); if (FAILED(mSwapChain->ResizeBuffers(0, backBufferDescription.Width, backBufferDescription.Height, DXGI_FORMAT_UNKNOWN, 0))) return false; if (!CreateBackBufferView()) return false; if (!CreateDepthStencilBuffer(depthBufferDescription)) return false; mBackBufferSize = backBufferDescription; mDepthBufferSize = depthBufferDescription; return true; }