@@ -47,6 +47,7 @@ void GameApp::Startup(void)
47
47
m_RootSignature[3 ].InitAsDescriptorRange (D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0 , D3D12_SHADER_VISIBILITY_PIXEL);
48
48
m_RootSignature.Finalize (L" box signature" , D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT);
49
49
50
+ // 创建PSO
50
51
D3D12_INPUT_ELEMENT_DESC mInputLayout [] =
51
52
{
52
53
{ " POSITION" , 0 , DXGI_FORMAT_R32G32B32_FLOAT, 0 , 0 , D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
@@ -57,22 +58,29 @@ void GameApp::Startup(void)
57
58
DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat ();
58
59
DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat ();
59
60
60
- m_PSO.SetRootSignature (m_RootSignature);
61
+ // 默认PSO
62
+ GraphicsPSO defaultPSO;
63
+ defaultPSO.SetRootSignature (m_RootSignature);
64
+ defaultPSO.SetRasterizerState (Graphics::RasterizerDefault);
65
+ defaultPSO.SetBlendState (Graphics::BlendDisable);
66
+ defaultPSO.SetDepthStencilState (Graphics::DepthStateReadWrite);
67
+ defaultPSO.SetInputLayout (_countof (mInputLayout ), mInputLayout );
68
+ defaultPSO.SetPrimitiveTopologyType (D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE);
69
+ defaultPSO.SetRenderTargetFormat (ColorFormat, DepthFormat);
70
+ defaultPSO.SetVertexShader (g_pdefaultVS, sizeof (g_pdefaultVS));
71
+ defaultPSO.SetPixelShader (g_pdefaultPS, sizeof (g_pdefaultPS));
72
+ defaultPSO.Finalize ();
73
+
74
+ // 默认PSO
75
+ m_mapPSO[E_EPT_DEFAULT] = defaultPSO;
76
+
77
+ // 仅仅画线的PSO
78
+ GraphicsPSO wireFramPSO = defaultPSO;
61
79
auto raster = Graphics::RasterizerDefault;
62
80
raster.FillMode = D3D12_FILL_MODE_WIREFRAME;
63
- m_PSO.SetRasterizerState (raster);
64
- m_PSO.SetBlendState (Graphics::BlendDisable);
65
- m_PSO.SetDepthStencilState (Graphics::DepthStateReadWrite);
66
- m_PSO.SetInputLayout (_countof (mInputLayout ), mInputLayout );
67
- m_PSO.SetPrimitiveTopologyType (D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE);
68
- m_PSO.SetRenderTargetFormat (ColorFormat, DepthFormat);
69
- m_PSO.SetVertexShader (g_pdefaultVS, sizeof (g_pdefaultVS));
70
- m_PSO.SetPixelShader (g_pdefaultPS, sizeof (g_pdefaultPS));
71
- m_PSO.Finalize ();
72
-
73
- m_PSOEx = m_PSO;
74
- m_PSOEx.SetRasterizerState (Graphics::RasterizerDefault);
75
- m_PSOEx.Finalize ();
81
+ wireFramPSO.SetRasterizerState (raster);
82
+ wireFramPSO.Finalize ();
83
+ m_mapPSO[E_EPT_WIREFRAME] = wireFramPSO;
76
84
}
77
85
78
86
void GameApp::Cleanup (void )
@@ -210,9 +218,9 @@ void GameApp::RenderScene(void)
210
218
211
219
// 设置渲染流水线
212
220
if (m_bRenderFill)
213
- gfxContext.SetPipelineState (m_PSOEx );
221
+ gfxContext.SetPipelineState (m_mapPSO[E_EPT_DEFAULT] );
214
222
else
215
- gfxContext.SetPipelineState (m_PSO );
223
+ gfxContext.SetPipelineState (m_mapPSO[E_EPT_WIREFRAME] );
216
224
217
225
// 设置根签名
218
226
gfxContext.SetRootSignature (m_RootSignature);
0 commit comments