@@ -1126,6 +1126,20 @@ pl_renderer_create_scene(plSceneInit tInit)
11261126 ptScene -> tProbeLightingShader = gptShaderVariant -> get_shader ("deferred_lighting" , NULL , NULL , NULL , & gptData -> tRenderPassLayout );
11271127 ptScene -> tTerrainShader = gptShaderVariant -> get_shader ("terrain" , NULL , NULL , NULL , & gptData -> tRenderPassLayout );
11281128 ptScene -> tTerrainShadowShader = gptShaderVariant -> get_shader ("terrain_shadow" , NULL , NULL , NULL , & gptData -> tDepthRenderPassLayout );
1129+
1130+ plGraphicsState tTerrainVariantTemp = {
1131+ .ulDepthWriteEnabled = 1 ,
1132+ .ulDepthMode = PL_COMPARE_MODE_GREATER ,
1133+ .ulCullMode = PL_CULL_MODE_NONE ,
1134+ .ulStencilMode = PL_COMPARE_MODE_ALWAYS ,
1135+ .ulStencilRef = 0xff ,
1136+ .ulStencilMask = 0xff ,
1137+ .ulStencilOpFail = PL_STENCIL_OP_KEEP ,
1138+ .ulStencilOpDepthFail = PL_STENCIL_OP_KEEP ,
1139+ .ulStencilOpPass = PL_STENCIL_OP_KEEP ,
1140+ .ulWireframe = 1
1141+ };
1142+ ptScene -> tTerrainWireframeShader = gptShaderVariant -> get_shader ("terrain" , & tTerrainVariantTemp , NULL , NULL , & gptData -> tRenderPassLayout );
11291143
11301144 for (uint32_t i = 0 ; i < gptGfx -> get_frames_in_flight (); i ++ )
11311145 {
@@ -1178,44 +1192,6 @@ pl_renderer_create_scene(plSceneInit tInit)
11781192
11791193 gptGfx -> update_bind_group (gptData -> ptDevice , ptScene -> atShadowBG [i ], & tShadowBGData );
11801194 }
1181-
1182-
1183- #if 0
1184- plCommandBuffer * ptCmdBuffer = gptStarter -> get_temporary_command_buffer ();
1185-
1186- plTerrainProcessTileInfo tTile = {
1187- .iTreeDepth = 6 ,
1188- .fMaxHeight = 500.0f ,
1189- .fMinHeight = 0.0f ,
1190- .fMaxBaseError = 0.1f ,
1191- .tCenter = {0 }
1192- };
1193- plTerrainProcessInfo tTerrainInfo = {
1194- .fMetersPerPixel = 5.0f ,
1195- .uHorizontalTiles = 1 ,
1196- .uVerticalTiles = 1 ,
1197- .uSize = 1024 ,
1198- .uTileCount = 1 ,
1199- .atTiles = & tTile
1200- };
1201-
1202- sprintf (tTile .acOutputFile , "/assets/terrain.chu" );
1203- sprintf (tTile .acHeightMapFile , "/assets/terrain.png" );
1204-
1205- gptTerrain -> process (& tTerrainInfo );
1206- ptScene -> ptTerrain = pl_renderer_create_terrain (ptCmdBuffer , & tTerrainInfo );
1207-
1208- gptStarter -> submit_temporary_command_buffer (ptCmdBuffer );
1209-
1210- plTerrainTexture tTerrainTexture = {
1211- .pcPath = "/textures/grass.png" ,
1212- .fMetersPerPixel = 0.01f ,
1213- .tCenter = {0.0f , 0.0f }
1214- };
1215- pl_terrain_set_texture (ptScene , ptScene -> ptTerrain , & tTerrainTexture );
1216- #endif
1217-
1218- // create semaphores
12191195 return ptScene ;
12201196}
12211197
@@ -1360,8 +1336,6 @@ pl_renderer_cleanup_scene(plScene* ptScene)
13601336 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> tIndexBuffer );
13611337 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> tStorageBuffer );
13621338
1363- if (ptScene -> ptTerrain )
1364- pl_renderer_cleanup_terrain (ptScene -> ptTerrain );
13651339 gptGfx -> queue_texture_for_deletion (gptData -> ptDevice , ptScene -> tShadowTexture );
13661340 gptGfx -> queue_render_pass_for_deletion (gptData -> ptDevice , ptScene -> tShadowRenderPass );
13671341 gptGfx -> queue_render_pass_for_deletion (gptData -> ptDevice , ptScene -> tFirstShadowRenderPass );
@@ -1432,6 +1406,12 @@ pl_renderer_cleanup_scene(plScene* ptScene)
14321406 ptScene = NULL ;
14331407}
14341408
1409+ void
1410+ pl_renderer_set_terrain (plScene * ptScene , plTerrain * ptTerrain )
1411+ {
1412+ ptScene -> ptTerrain = ptTerrain ;
1413+ }
1414+
14351415plView *
14361416pl_renderer_create_view (plScene * ptScene , plVec2 tDimensions )
14371417{
@@ -2699,6 +2679,21 @@ pl_renderer_reload_scene_shaders(plScene* ptScene)
26992679 ptScene -> tTerrainShader = gptShaderVariant -> get_shader ("terrain" , NULL , NULL , NULL , & gptData -> tRenderPassLayout );
27002680 ptScene -> tTerrainShadowShader = gptShaderVariant -> get_shader ("terrain_shadow" , NULL , NULL , NULL , & gptData -> tDepthRenderPassLayout );
27012681
2682+ plGraphicsState tTerrainVariantTemp = {
2683+ .ulDepthWriteEnabled = 1 ,
2684+ .ulDepthMode = PL_COMPARE_MODE_GREATER ,
2685+ .ulCullMode = PL_CULL_MODE_NONE ,
2686+ .ulStencilMode = PL_COMPARE_MODE_ALWAYS ,
2687+ .ulStencilRef = 0xff ,
2688+ .ulStencilMask = 0xff ,
2689+ .ulStencilOpFail = PL_STENCIL_OP_KEEP ,
2690+ .ulStencilOpDepthFail = PL_STENCIL_OP_KEEP ,
2691+ .ulStencilOpPass = PL_STENCIL_OP_KEEP ,
2692+ .ulWireframe = 1
2693+ };
2694+ ptScene -> tTerrainWireframeShader = gptShaderVariant -> get_shader ("terrain" , & tTerrainVariantTemp , NULL , NULL , & gptData -> tRenderPassLayout );
2695+
2696+
27022697 gptShader -> set_options (& tOriginalOptions );
27032698
27042699 const uint32_t uDrawableCount = pl_sb_size (ptScene -> sbtDrawables );
@@ -3781,13 +3776,18 @@ pl_renderer_render_view(plView* ptView, plCamera* ptCamera, plCamera* ptCullCame
37813776 {
37823777 const plMat4 tMVP = pl_mul_mat4 (& ptCamera -> tProjMat , & ptCamera -> tViewMat );
37833778
3779+ plShaderHandle tTerrainShader = ptScene -> tTerrainShader ;
3780+
3781+ if (ptScene -> ptTerrain -> tRuntimeOptions .tFlags & PL_TERRAIN_FLAGS_WIREFRAME )
3782+ tTerrainShader = ptScene -> tTerrainWireframeShader ;
3783+
37843784 gptGfx -> set_depth_bias (ptMainEncoder , 0.0f , 0.0f , 0.0f );
3785- gptGfx -> bind_shader (ptMainEncoder , ptScene -> tTerrainShader );
3785+ gptGfx -> bind_shader (ptMainEncoder , tTerrainShader );
37863786 gptGfx -> bind_vertex_buffer (ptMainEncoder , ptScene -> ptTerrain -> tVertexBuffer );
37873787 plBindGroupHandle atBindGroups [] = {ptScene -> atSceneBindGroups [uFrameIdx ], ptView -> atDeferredBG1 [uFrameIdx ]};
37883788 gptGfx -> bind_graphics_bind_groups (
37893789 ptMainEncoder ,
3790- ptScene -> tTerrainShader ,
3790+ tTerrainShader ,
37913791 0 , 2 ,
37923792 atBindGroups ,
37933793 0 , NULL
@@ -4913,6 +4913,10 @@ pl_load_renderer_ext(plApiRegistryI* ptApiRegistry, bool bReload)
49134913 tApi .get_ecs_type_key_object = pl_renderer_get_ecs_type_key_object ;
49144914 tApi .run_skin_update_system = pl_renderer_run_skin_update_system ;
49154915 tApi .run_object_update_system = pl_renderer_run_object_update_system ;
4916+ tApi .create_terrain = pl_renderer_create_terrain ;
4917+ tApi .cleanup_terrain = pl_renderer_cleanup_terrain ;
4918+ tApi .set_terrain = pl_renderer_set_terrain ;
4919+ tApi .get_terrain_runtime_options = pl_renderer_get_terrain_runtime_options ;
49164920 pl_set_api (ptApiRegistry , plRendererI , & tApi );
49174921
49184922 // core apis
0 commit comments