imguiManager et start Fullscreen

This commit is contained in:
2024-03-22 16:51:17 +01:00
parent e9fda93632
commit 77adeb2872
10 changed files with 298 additions and 37 deletions

View File

@@ -504,4 +504,139 @@ void D3DClass::ResetViewport()
m_deviceContext->RSSetViewports(1, &m_viewport);
return;
}
void D3DClass::ReleaseResources()
{
// libere la vue
if (m_renderTargetView)
{
m_renderTargetView->Release();
m_renderTargetView = 0;
}
// libere le buffer de profondeur
if (m_depthStencilBuffer)
{
m_depthStencilBuffer->Release();
m_depthStencilBuffer = 0;
}
// libere la vue de profondeur
if (m_depthStencilView)
{
m_depthStencilView->Release();
m_depthStencilView = 0;
}
}
bool D3DClass::RecreateResources()
{
HRESULT result;
ID3D11Texture2D* backBufferPtr;
D3D11_TEXTURE2D_DESC depthBufferDesc;
D3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc;
// Recr<63>ez la vue de rendu.
result = m_swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBufferPtr);
if (FAILED(result))
{
return false;
}
result = m_device->CreateRenderTargetView(backBufferPtr, NULL, &m_renderTargetView);
if (FAILED(result))
{
return false;
}
backBufferPtr->Release();
backBufferPtr = 0;
// Recr<63>ez le tampon de profondeur et la vue de profondeur.
ZeroMemory(&depthBufferDesc, sizeof(depthBufferDesc));
depthBufferDesc.Width = m_viewport.Width;
depthBufferDesc.Height = m_viewport.Height;
depthBufferDesc.MipLevels = 1;
depthBufferDesc.ArraySize = 1;
depthBufferDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthBufferDesc.SampleDesc.Count = 1;
depthBufferDesc.SampleDesc.Quality = 0;
depthBufferDesc.Usage = D3D11_USAGE_DEFAULT;
depthBufferDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
depthBufferDesc.CPUAccessFlags = 0;
depthBufferDesc.MiscFlags = 0;
result = m_device->CreateTexture2D(&depthBufferDesc, NULL, &m_depthStencilBuffer);
if (FAILED(result))
{
return false;
}
ZeroMemory(&depthStencilViewDesc, sizeof(depthStencilViewDesc));
depthStencilViewDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
depthStencilViewDesc.Texture2D.MipSlice = 0;
result = m_device->CreateDepthStencilView(m_depthStencilBuffer, &depthStencilViewDesc, &m_depthStencilView);
if (FAILED(result))
{
return false;
}
// Liez la vue de rendu et le tampon de profondeur <20> la pipeline de rendu de sortie.
m_deviceContext->OMSetRenderTargets(1, &m_renderTargetView, m_depthStencilView);
return true;
}
bool D3DClass::SetFullscreen(bool fullscreen)
{
HRESULT result;
ReleaseResources();
// Definie les options de plein ecran
DXGI_MODE_DESC newScreenSize;
ZeroMemory(&newScreenSize, sizeof(newScreenSize));
newScreenSize.Width = 1920;
newScreenSize.Height = 1080;
newScreenSize.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
// Redimensionne la cible
result = m_swapChain->ResizeTarget(&newScreenSize);
if (FAILED(result))
{
return false;
}
// Change le mode d'affichage
result = m_swapChain->SetFullscreenState(fullscreen, NULL);
if (FAILED(result))
{
return false;
}
// Recr<63>ez les ressources
if (!RecreateResources())
{
return false;
}
// Informez ImGui du changement de taille de la fen<65>tre
ImGui::GetIO().DisplaySize = ImVec2((float)newScreenSize.Width, (float)newScreenSize.Height);
// Lib<69>rez les anciens objets de rendu ImGui
ImGui_ImplDX11_InvalidateDeviceObjects();
// Recr<63>ez les objets de rendu ImGui
ImGui_ImplDX11_CreateDeviceObjects();
return true;
}
IDXGISwapChain* D3DClass::GetSwapChain()
{
return m_swapChain;
}