HRESULT SwapChain::Initialize(HWND hwnd, int nWidth, int nHeigth) { m_hWnd = hwnd; m_nWidth = nWidth; m_nHeight = nHeigth; HRESULT hr; std::cout << "宽: " << m_nWidth << " " << "高: " << m_nHeight << std::endl; DXGI_SWAP_CHAIN_DESC scDesc = { 0 };////填充结构,设置交换链相当属性 scDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;//缓冲区数据格式 scDesc.BufferDesc.Width = m_nWidth; //缓冲区大小 scDesc.BufferDesc.Height = m_nHeight; scDesc.BufferDesc.RefreshRate.Numerator = 60; //刷新率,一般这样设定即可 scDesc.BufferDesc.RefreshRate.Denominator = 1; scDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; //固定参数 scDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; //固定参数 scDesc.BufferCount = 1; //缓冲区个数 scDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT ; //Usage为Render Target Output scDesc.Flags = 0; scDesc.OutputWindow = m_hWnd; //主窗口句柄 scDesc.SampleDesc.Count = 1; //采样点 scDesc.SampleDesc.Quality = 0; //采样支持等级 scDesc.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL; //常用参数 scDesc.Windowed = true;//窗口模式 hr = m_pDXGIFactory->CreateSwapChain(m_pd3dDevice, &scDesc, &m_pSwapChain); if (!CreateWindowSizeDependentResources()) { hr = S_FALSE; } m_bInit = true; return hr; }
void Sandbox::Renderer::Initialize() { PrintToDebugWindowOnly8("Sandbox. Initializing renderer."); EnterCriticalSection(&m_lock); DirectXBaseDesktop::Initialize(); CreateDeviceIndependentResources(); CreateDeviceResources(); CreateWindowSizeDependentResources(); m_glassRenderer->WICFactory(m_wicFactory.Get()); m_sceneRenderer->WICFactory(m_wicFactory.Get()); m_glassRenderer->Context3(m_d3dContext.Get()); m_sceneRenderer->Context3(m_d3dContext.Get()); m_glassRenderer->Device3(m_d3dDevice.Get()); m_sceneRenderer->Device3(m_d3dDevice.Get()); m_sceneRenderTarget.Context3(m_d3dContext.Get()); m_sceneRenderTarget.Device3(m_d3dDevice.Get()); m_sceneRenderTarget.Height(m_d3dRenderTargetSize.height); m_sceneRenderTarget.Width(m_d3dRenderTargetSize.width); m_sceneRenderTarget.Initialize(); (*m_sceneRenderTarget.EditViewport()) = m_viewport; m_sceneRenderTarget.EditClear()->x = 0.4f; m_sceneRenderTarget.EditClear()->y = 0.4f; m_sceneRenderTarget.EditClear()->z = 0.4f; m_sceneRenderTarget.EditClear()->w = 1.0f; m_clear = m_sceneRenderTarget.GetClearCpy(); m_camera.Aspect(m_d3dRenderTargetSize.width / m_d3dRenderTargetSize.height); m_camera.Fov(Reign::XM_PIDIV4); m_camera.Near(100.0f); m_camera.Far(0.01f); (*m_camera.EditFocus()) = Reign::Vector3(0.0f, 0.0f, 10.0f); (*m_camera.EditEye()) = Reign::Vector3(0.0f, 0.0f, -15.0f); m_camera.UpdateProj(); m_camera.UpdateView(); m_glassRenderer->SceneRenderTarget(&m_sceneRenderTarget); m_glassRenderer->Initialize(); m_sceneRenderer->Initialize(); m_sceneRenderer->EditSceneSpatial()->World = Matrix::CreateTranslation(0.0f, 0.0f, 20.0f); m_sceneRenderer->EditSceneSpatial()->View = m_camera.GetViewCpy(); m_sceneRenderer->EditSceneSpatial()->Proj = m_camera.GetProjCpy(); m_glassRenderer->EditGlassSpatial()->World = Matrix::CreateTranslation(0.0f, 0.0f, 0.0f); // * Matrix::CreateRotationY(Reign::XM_PIDIV4); m_glassRenderer->EditGlassSpatial()->View = m_camera.GetViewCpy(); m_glassRenderer->EditGlassSpatial()->Proj = m_camera.GetProjCpy(); m_glassRenderer->EditGlassPerturb()->RefractionPerturb = 0.01; LeaveCriticalSection(&m_lock); }
void Application::OnWindowSizeChanged(int width, int height) { if (!m_deviceResources->WindowSizeChanged(width, height)) return; CreateWindowSizeDependentResources(); // TODO: Game window is being resized. }
HRESULT SwapChain::Initialize(HWND hwnd, int nWidth, int nHeigth) { m_hWnd = hwnd; m_nWidth = nWidth; m_nHeight = nHeigth; HRESULT hr; DXGI_SWAP_CHAIN_DESC scDesc = { 0 };////填充结构,设置交换链相当属性 scDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;//缓冲区数据格式 scDesc.BufferDesc.Width = m_nWidth; //缓冲区大小 scDesc.BufferDesc.Height = m_nHeight; scDesc.BufferDesc.RefreshRate.Numerator = 60; //刷新率,一般这样设定即可 scDesc.BufferDesc.RefreshRate.Denominator = 1; scDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; //固定参数 scDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; //固定参数 scDesc.BufferCount = 1; //缓冲区个数 scDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; //Usage为Render Target Output scDesc.Flags = 0; scDesc.OutputWindow = m_hWnd; //主窗口句柄 scDesc.SampleDesc.Count = 1; //采样点 scDesc.SampleDesc.Quality = 0; //采样支持等级 scDesc.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL; //常用参数 scDesc.Windowed = true;//窗口模式 hr = m_pDXGIFactory->CreateSwapChain(m_pd3dDevice, &scDesc, &m_pSwapChain); if (!CreateWindowSizeDependentResources()) { hr = S_FALSE; } m_bInit = true; D3D11_TEXTURE2D_DESC desc; desc.Width = static_cast<UINT>(m_nWidth); desc.Height = static_cast<UINT>(m_nHeight); desc.MipLevels = static_cast<UINT>(1); desc.ArraySize = static_cast<UINT>(1); desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; desc.SampleDesc.Count = 1; desc.SampleDesc.Quality = 0; desc.Usage = D3D11_USAGE_DEFAULT; desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;; desc.CPUAccessFlags = 0; desc.MiscFlags = 0; hr = m_pd3dDevice->CreateTexture2D(&desc, NULL, &texEx); D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc; memset(&SRVDesc, 0, sizeof(SRVDesc)); SRVDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2D; SRVDesc.Texture2D.MostDetailedMip = 0; SRVDesc.Texture2D.MipLevels = 1; hr = m_pd3dDevice->CreateShaderResourceView(texEx, &SRVDesc, &mSRV); return hr; }
// This method is called in the event handler for the SizeChanged event. int ContextD3D11::OnWindowSizeChange(uint32_t width, uint32_t height) { /*if (m_window->Bounds.Width != m_windowBounds.Width || m_window->Bounds.Height != m_windowBounds.Height || m_orientation != DisplayProperties::CurrentOrientation)*/ { CreateWindowSizeDependentResources(width,height); } return S_OK; }
// Initialize the Direct3D resources required to run. void Application::Initialize(int width, int height) { m_window = std::make_unique<Window>(L"Game", width, height); m_window->RegisterUserData(reinterpret_cast<LONG_PTR>(this)); m_deviceResources->SetWindow(m_window->GetHandle(), width, height); m_deviceResources->CreateDeviceResources(); CreateDeviceDependentResources(); m_deviceResources->CreateWindowSizeDependentResources(); CreateWindowSizeDependentResources(); // Scenes manager. m_sceneManager = std::make_unique<SceneManager>(m_deviceResources->GetD3DDeviceContext()); m_sceneManager->PushScene(PlayScene::Instance()); // TIP: Change the timer settings if you want something other than the default variable timestep mode. // e.g. for 60 FPS fixed timestep update logic, call: /* m_timer.SetFixedTimeStep(true); m_timer.SetTargetElapsedSeconds(1.0 / 60); */ m_keyboard = std::make_unique<DirectX::Keyboard>(); m_mouse = std::make_unique<Mouse>(); //m_mouse->SetWindow(window); // Setup ImGui IMGUI_CHECKVERSION(); ImGui::CreateContext(); //ImGuiIO& io = ImGui::GetIO(); ImGui_ImplWin32_Init(m_window->GetHandle()); ImGui_ImplDX11_Init(m_deviceResources->GetD3DDevice(), m_deviceResources->GetD3DDeviceContext()); ImGui::StyleColorsDark(); }
void Sandbox::FluidSimulator::Initialize( _No_args_ ) { CreateDeviceIndependentResources( ); CreateDeviceResources( ); CreateWindowSizeDependentResources( ); }
void SwapChain::OnResize(int nWidth, int nHeight) { m_nWidth = nWidth; m_nHeight = nHeight; CreateWindowSizeDependentResources(); }
void Application::OnDeviceRestored() { CreateDeviceDependentResources(); CreateWindowSizeDependentResources(); }