diff --git a/BasaltPresenter/Plugins/Engine/DirectX11Engine/main.cpp b/BasaltPresenter/Plugins/Engine/DirectX11Engine/main.cpp index 25cd495..a953c5e 100644 --- a/BasaltPresenter/Plugins/Engine/DirectX11Engine/main.cpp +++ b/BasaltPresenter/Plugins/Engine/DirectX11Engine/main.cpp @@ -103,6 +103,7 @@ private: ComPtr input_layout; ///< 输入布局 ComPtr vertex_buffer; ///< 顶点缓冲 ComPtr depth_state; ///< 深度状态 + ComPtr rasterizer_state; ///< 光栅化状态 std::vector depth_data; ///< 深度数据 public: @@ -194,6 +195,13 @@ public: ds_desc.DepthFunc = D3D11_COMPARISON_LESS; DXCHK(device->CreateDepthStencilState(&ds_desc, &depth_state)); + // 设置光栅化模式 + D3D11_RASTERIZER_DESC rasterizer_desc; + ZeroMemory(&rasterizer_desc, sizeof(D3D11_RASTERIZER_DESC)); + rasterizer_desc.FillMode = D3D11_FILL_SOLID; + rasterizer_desc.CullMode = D3D11_CULL_NONE; + DXCHK(device->CreateRasterizerState(&rasterizer_desc, &rasterizer_state)); + // 视口 D3D11_VIEWPORT vp; ZeroMemory(&vp, sizeof(D3D11_VIEWPORT)); @@ -217,36 +225,32 @@ public: // 缩放深度数据数组到指定大小 depth_data.resize(this->config.width * this->config.height * sizeof(float)); - // 设置管线 - context->OMSetRenderTargets(1, rtv.GetAddressOf(), dsv.Get()); - context->OMSetDepthStencilState(depth_state.Get(), 1); - context->VSSetShader(vs.Get(), nullptr, 0); - context->PSSetShader(ps.Get(), nullptr, 0); - context->IASetInputLayout(input_layout.Get()); - UINT stride = sizeof(Vertex), offset = 0; - context->IASetVertexBuffers(0, 1, vertex_buffer.GetAddressOf(), &stride, &offset); - context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - //frameCount = 0; } virtual void Tick() override { IEngine::Tick(); + MSG msg; + GetMessage(&msg, nullptr, 0, 0); + TranslateMessage(&msg); + DispatchMessage(&msg); + // 清屏 float clear_color[] = {0.8f, 0.1f, 0.1f, 1.0f}; context->ClearRenderTargetView(rtv.Get(), clear_color); - //context->ClearDepthStencilView(dsv.Get(), D3D11_CLEAR_DEPTH, 1.0f, 0); + context->ClearDepthStencilView(dsv.Get(), D3D11_CLEAR_DEPTH, 1.0f, 0); - //// 设置管线 - //context->OMSetRenderTargets(1, rtv.GetAddressOf(), dsv.Get()); - //context->OMSetDepthStencilState(depth_state.Get(), 1); - //context->VSSetShader(vs.Get(), nullptr, 0); - //context->PSSetShader(ps.Get(), nullptr, 0); - //context->IASetInputLayout(input_layout.Get()); - //UINT stride = sizeof(Vertex), offset = 0; - //context->IASetVertexBuffers(0, 1, vertex_buffer.GetAddressOf(), &stride, &offset); - //context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + // 设置管线 + context->OMSetRenderTargets(1, rtv.GetAddressOf(), dsv.Get()); + context->OMSetDepthStencilState(depth_state.Get(), 1); + context->RSSetState(rasterizer_state.Get()); + context->VSSetShader(vs.Get(), nullptr, 0); + context->PSSetShader(ps.Get(), nullptr, 0); + context->IASetInputLayout(input_layout.Get()); + UINT stride = sizeof(Vertex), offset = 0; + context->IASetVertexBuffers(0, 1, vertex_buffer.GetAddressOf(), &stride, &offset); + context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); // 绘制立方体 context->Draw(sizeof(CubeVertices) / sizeof(Vertex), 0); // 自动计算顶点数