20 std::expected<ProbeView, std::string>
ProbeView::Create(ID3D12Device* device, DXGI_FORMAT renderTargetFormat) {
24 return std::unexpected(
"描画のルート署名を作れない");
29 return std::unexpected(vertexShader.error());
32 return std::unexpected(pixelShader.error());
34 D3D12_GRAPHICS_PIPELINE_STATE_DESC desc{
36 .VS = {.pShaderBytecode = vertexShader->data(), .BytecodeLength = vertexShader->size()},
37 .PS = {.pShaderBytecode = pixelShader->data(), .BytecodeLength = pixelShader->size()},
38 .BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT),
39 .SampleMask = UINT_MAX,
40 .RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT),
41 .DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT),
42 .PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE,
43 .NumRenderTargets = 1,
44 .SampleDesc = {.Count = 1},
47 desc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;
48 desc.DepthStencilState.DepthEnable = FALSE;
49 desc.RTVFormats[0] = renderTargetFormat;
50 const HRESULT result = device->CreateGraphicsPipelineState(&desc, IID_PPV_ARGS(&view.
m_pipeline));
60 D3D12_RESOURCE_STATE_RENDER_TARGET);
61 list->ResourceBarrier(1, &toRenderTarget);
65 list->ClearRenderTargetView(target.
renderTargetView, CLEAR_COLOR.data(), 0,
nullptr);
66 const D3D12_VIEWPORT viewport{
67 .Width =
static_cast<float>(target.
width), .Height =
static_cast<float>(target.
height), .MaxDepth = 1.0f};
68 const D3D12_RECT scissor{
69 .left = 0, .top = 0, .right =
static_cast<LONG
>(target.
width), .bottom =
static_cast<LONG
>(target.
height)};
70 list->RSSetViewports(1, &viewport);
71 list->RSSetScissorRects(1, &scissor);
76 list->SetGraphicsRootShaderResourceView(ROOT_LAYOUT.
SrvIndex(3), inputs.
constants);
78 list->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
79 list->DrawInstanced(3, 1, 0, 0);
82 D3D12_RESOURCE_STATE_PRESENT);
83 list->ResourceBarrier(1, &toPresent);