1
0

find out how dx11 not works

This commit is contained in:
2026-01-05 00:12:12 +08:00
parent 7b234ec405
commit 7110becf66

View File

@@ -103,6 +103,7 @@ private:
ComPtr<ID3D11InputLayout> input_layout; ///< 输入布局
ComPtr<ID3D11Buffer> vertex_buffer; ///< 顶点缓冲
ComPtr<ID3D11DepthStencilState> depth_state; ///< 深度状态
ComPtr<ID3D11RasterizerState> rasterizer_state; ///< 光栅化状态
std::vector<BYTE> 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); // 自动计算顶点数