@@ -396,20 +396,7 @@ void GameApp::renderShapes(GraphicsContext& gfxContext)
396
396
397
397
for (auto & item : m_vecShapes)
398
398
{
399
- // 设置常量缓冲区数据
400
- ObjectConstants obc;
401
- obc.World = item.modelToWorld ;
402
- obc.texTransform = item.texTransform ;
403
- obc.matTransform = item.matTransform ;
404
- gfxContext.SetDynamicConstantBufferView (0 , sizeof (obc), &obc);
405
-
406
- gfxContext.SetDynamicDescriptor (3 , 0 , item.srv );
407
-
408
- MaterialConstants mc;
409
- mc.DiffuseAlbedo = { item.diffuseAlbedo .x , item.diffuseAlbedo .y , item.diffuseAlbedo .z , item.diffuseAlbedo .w };
410
- mc.FresnelR0 = item.fresnelR0 ;
411
- mc.Roughness = item.roughness ;
412
- gfxContext.SetDynamicConstantBufferView (2 , sizeof (mc), &mc);
399
+ setShaderParam (gfxContext, item);
413
400
414
401
// 绘制
415
402
gfxContext.DrawIndexedInstanced (item.indexCount , 1 , item.startIndex , item.baseVertex , 0 );
@@ -571,20 +558,7 @@ void GameApp::renderLandAndWaves(GraphicsContext& gfxContext)
571
558
// 设置索引视图
572
559
gfxContext.SetIndexBuffer (m_IndexBufferLand.IndexBufferView ());
573
560
574
- // 设置常量缓冲区数据
575
- ObjectConstants obc;
576
- obc.World = m_renderItemLand.modelToWorld ;
577
- obc.texTransform = m_renderItemLand.texTransform ;
578
- obc.matTransform = m_renderItemLand.matTransform ;
579
- gfxContext.SetDynamicConstantBufferView (0 , sizeof (obc), &obc);
580
-
581
- gfxContext.SetDynamicDescriptor (3 , 0 , m_renderItemLand.srv );
582
-
583
- MaterialConstants mc;
584
- mc.DiffuseAlbedo = { m_renderItemLand.diffuseAlbedo .x , m_renderItemLand.diffuseAlbedo .y , m_renderItemLand.diffuseAlbedo .z , m_renderItemLand.diffuseAlbedo .w };
585
- mc.FresnelR0 = m_renderItemLand.fresnelR0 ;
586
- mc.Roughness = m_renderItemLand.roughness ;
587
- gfxContext.SetDynamicConstantBufferView (2 , sizeof (mc), &mc);
561
+ setShaderParam (gfxContext, m_renderItemLand);
588
562
589
563
// 绘制
590
564
gfxContext.DrawIndexedInstanced (m_IndexBufferLand.GetElementCount (), 1 , 0 , 0 , 0 );
@@ -597,20 +571,7 @@ void GameApp::renderLandAndWaves(GraphicsContext& gfxContext)
597
571
598
572
gfxContext.SetDynamicVB (0 , m_verticesWaves.size (), sizeof (Vertex), m_verticesWaves.data ());
599
573
600
- // 设置常量缓冲区数据
601
- ObjectConstants obc;
602
- obc.World = m_renderItemWaves.modelToWorld ;
603
- obc.texTransform = m_renderItemWaves.texTransform ;
604
- obc.matTransform = Transpose (m_renderItemWaves.matTransform );
605
- gfxContext.SetDynamicConstantBufferView (0 , sizeof (obc), &obc);
606
-
607
- gfxContext.SetDynamicDescriptor (3 , 0 , m_renderItemWaves.srv );
608
-
609
- MaterialConstants mc;
610
- mc.DiffuseAlbedo = { m_renderItemWaves.diffuseAlbedo .x , m_renderItemWaves.diffuseAlbedo .y , m_renderItemWaves.diffuseAlbedo .z , m_renderItemWaves.diffuseAlbedo .w };
611
- mc.FresnelR0 = m_renderItemWaves.fresnelR0 ;
612
- mc.Roughness = m_renderItemWaves.roughness ;
613
- gfxContext.SetDynamicConstantBufferView (2 , sizeof (mc), &mc);
574
+ setShaderParam (gfxContext, m_renderItemWaves);
614
575
615
576
// 绘制
616
577
gfxContext.DrawIndexedInstanced (m_IndexBufferWaves.GetElementCount (), 1 , 0 , 0 , 0 );
@@ -623,20 +584,7 @@ void GameApp::renderLandAndWaves(GraphicsContext& gfxContext)
623
584
// 设置索引视图
624
585
gfxContext.SetIndexBuffer (m_IndexBufferBox.IndexBufferView ());
625
586
626
- // 设置常量缓冲区数据
627
- ObjectConstants obc;
628
- obc.World = m_renderItemBox.modelToWorld ;
629
- obc.texTransform = m_renderItemBox.texTransform ;
630
- obc.matTransform = m_renderItemBox.matTransform ;
631
- gfxContext.SetDynamicConstantBufferView (0 , sizeof (obc), &obc);
632
-
633
- gfxContext.SetDynamicDescriptor (3 , 0 , m_renderItemBox.srv );
634
-
635
- MaterialConstants mc;
636
- mc.DiffuseAlbedo = { m_renderItemBox.diffuseAlbedo .x , m_renderItemBox.diffuseAlbedo .y , m_renderItemBox.diffuseAlbedo .z , m_renderItemBox.diffuseAlbedo .w };
637
- mc.FresnelR0 = m_renderItemBox.fresnelR0 ;
638
- mc.Roughness = m_renderItemBox.roughness ;
639
- gfxContext.SetDynamicConstantBufferView (2 , sizeof (mc), &mc);
587
+ setShaderParam (gfxContext, m_renderItemBox);
640
588
641
589
// 绘制
642
590
gfxContext.DrawIndexedInstanced (m_IndexBufferBox.GetElementCount (), 1 , 0 , 0 , 0 );
@@ -700,4 +648,22 @@ void GameApp::AnimateMaterials(float deltaT)
700
648
tv -= 1 .0f ;
701
649
702
650
m_renderItemWaves.matTransform .SetW ({ tu, tv, 0 .0f , 1 .0f });
651
+ }
652
+
653
+ void GameApp::setShaderParam (GraphicsContext& gfxContext, renderItem& item)
654
+ {
655
+ // 设置常量缓冲区数据
656
+ ObjectConstants obc;
657
+ obc.World = item.modelToWorld ;
658
+ obc.texTransform = item.texTransform ;
659
+ obc.matTransform = Transpose (item.matTransform );
660
+ gfxContext.SetDynamicConstantBufferView (0 , sizeof (obc), &obc);
661
+
662
+ gfxContext.SetDynamicDescriptor (3 , 0 , item.srv );
663
+
664
+ MaterialConstants mc;
665
+ mc.DiffuseAlbedo = { item.diffuseAlbedo .x , item.diffuseAlbedo .y , item.diffuseAlbedo .z , item.diffuseAlbedo .w };
666
+ mc.FresnelR0 = item.fresnelR0 ;
667
+ mc.Roughness = item.roughness ;
668
+ gfxContext.SetDynamicConstantBufferView (2 , sizeof (mc), &mc);
703
669
}
0 commit comments