@@ -847,44 +847,11 @@ pl_renderer_create_scene(const plSceneDesc* ptInit)
847847 ptScene -> atFilterWorkingBuffers [i ] = pl__renderer_create_local_buffer (& tInputBufferDesc , "filter buffer" , i );
848848 }
849849
850- // create probe material & mesh
851- plMaterialComponent * ptMaterial = NULL ;
852- plEntity tMaterial = gptMaterial -> create (ptScene -> ptComponentLibrary , "environment probe material" , & ptMaterial );
853- ptMaterial -> tAlphaMode = PL_MATERIAL_ALPHA_MODE_OPAQUE ;
854- ptMaterial -> tShaderType = PL_SHADER_TYPE_PBR ;
855- ptMaterial -> tFlags |= PL_MATERIAL_FLAG_CAST_RECEIVE_SHADOW ;
856- ptMaterial -> tFlags &= ~PL_MATERIAL_FLAG_CAST_SHADOW ;
857- ptMaterial -> tBaseColor = (plVec4 ){1.0f , 1.0f , 1.0f , 1.0f };
858- ptMaterial -> fRoughness = 0.0f ;
859- ptMaterial -> fMetalness = 1.0f ;
860- pl_renderer__add_material_to_scene (ptScene , tMaterial );
861-
862- plMeshComponent * ptMesh = NULL ;
863- ptScene -> tProbeMesh = gptMesh -> create_sphere (ptScene -> ptComponentLibrary , "environment probe mesh" , 0.25f , 32 , 32 , & ptMesh );
864- ptMesh -> tMaterial = tMaterial ;
865-
866- ptMesh = NULL ;
867- ptScene -> tUnitSphereMesh = gptMesh -> create_sphere (ptScene -> ptComponentLibrary , "unit sphere mesh" , 1.0f , 16 , 16 , & ptMesh );
868-
869- plFreeListNode * ptIndexBufferNode = gptFreeList -> get_node (& ptScene -> tIndexBufferFreeList , (uint32_t )ptMesh -> szIndexCount * sizeof (uint32_t ));
870- plFreeListNode * ptVertexBufferNode = gptFreeList -> get_node (& ptScene -> tVertexBufferFreeList , (uint32_t )ptMesh -> szVertexCount * sizeof (plVec3 ));
871-
872- const plDrawable tDrawable = {
873- .uIndexCount = (uint32_t )ptMesh -> szIndexCount ,
874- .uVertexCount = (uint32_t )ptMesh -> szVertexCount ,
875- .uIndexOffset = (uint32_t )(ptIndexBufferNode -> uOffset / sizeof (uint32_t )),
876- .uVertexOffset = (uint32_t )(ptVertexBufferNode -> uOffset / sizeof (plVec3 )),
877- .uTransformIndex = ptScene -> uNextTransformIndex ++ ,
878- .uTriangleCount = (uint32_t )ptMesh -> szIndexCount / 3
879- };
880- ptScene -> tUnitSphereDrawable = tDrawable ;
881-
882- gptStage -> stage_buffer_upload (ptScene -> tIndexBuffer , ptIndexBufferNode -> uOffset , ptMesh -> puIndices , sizeof (uint32_t ) * ptMesh -> szIndexCount );
883- gptStage -> stage_buffer_upload (ptScene -> tVertexBuffer , ptVertexBufferNode -> uOffset , ptMesh -> ptVertexPositions , sizeof (plVec3 ) * ptMesh -> szVertexCount );
884- gptStage -> flush ();
885-
886850 // create shadow atlas
887- ptScene -> uShadowAtlasResolution = 1024 * 8 * 2 ;
851+ ptScene -> uShadowAtlasResolution = ptInit -> uShadowAtlasResolution ;
852+ if (ptScene -> uShadowAtlasResolution == 0 )
853+ ptScene -> uShadowAtlasResolution = 1024 * 16 ;
854+
888855 const plTextureDesc tShadowDepthTextureDesc = {
889856 .tDimensions = {(float )ptScene -> uShadowAtlasResolution , (float )ptScene -> uShadowAtlasResolution , 1 },
890857 .tFormat = PL_FORMAT_D16_UNORM ,
@@ -1180,6 +1147,43 @@ pl_renderer_create_scene(const plSceneDesc* ptInit)
11801147
11811148 gptGfx -> update_bind_group (gptData -> ptDevice , ptScene -> atShadowBG [i ], & tShadowBGData );
11821149 }
1150+
1151+ plMeshComponent * ptMesh = NULL ;
1152+ ptScene -> tProbeMesh = gptMesh -> create_sphere (ptScene -> ptComponentLibrary , "environment probe mesh" , 0.25f , 32 , 32 , & ptMesh );
1153+
1154+ ptMesh = NULL ;
1155+ ptScene -> tUnitSphereMesh = gptMesh -> create_sphere (ptScene -> ptComponentLibrary , "unit sphere mesh" , 1.0f , 16 , 16 , & ptMesh );
1156+
1157+ plFreeListNode * ptIndexBufferNode = gptFreeList -> get_node (& ptScene -> tIndexBufferFreeList , (uint32_t )ptMesh -> szIndexCount * sizeof (uint32_t ));
1158+ plFreeListNode * ptVertexBufferNode = gptFreeList -> get_node (& ptScene -> tVertexBufferFreeList , (uint32_t )ptMesh -> szVertexCount * sizeof (plVec3 ));
1159+
1160+ const plDrawable tDrawable = {
1161+ .uIndexCount = (uint32_t )ptMesh -> szIndexCount ,
1162+ .uVertexCount = (uint32_t )ptMesh -> szVertexCount ,
1163+ .uIndexOffset = (uint32_t )(ptIndexBufferNode -> uOffset / sizeof (uint32_t )),
1164+ .uVertexOffset = (uint32_t )(ptVertexBufferNode -> uOffset / sizeof (plVec3 )),
1165+ .uTransformIndex = ptScene -> uNextTransformIndex ++ ,
1166+ .uTriangleCount = (uint32_t )ptMesh -> szIndexCount / 3
1167+ };
1168+ ptScene -> tUnitSphereDrawable = tDrawable ;
1169+
1170+ gptStage -> stage_buffer_upload (ptScene -> tIndexBuffer , ptIndexBufferNode -> uOffset , ptMesh -> puIndices , sizeof (uint32_t ) * ptMesh -> szIndexCount );
1171+ gptStage -> stage_buffer_upload (ptScene -> tVertexBuffer , ptVertexBufferNode -> uOffset , ptMesh -> ptVertexPositions , sizeof (plVec3 ) * ptMesh -> szVertexCount );
1172+ gptStage -> flush ();
1173+
1174+ // create probe material & mesh
1175+ plMaterialComponent * ptMaterial = NULL ;
1176+ plEntity tMaterial = gptMaterial -> create (ptScene -> ptComponentLibrary , "environment probe material" , & ptMaterial );
1177+ ptMaterial -> tAlphaMode = PL_MATERIAL_ALPHA_MODE_OPAQUE ;
1178+ ptMaterial -> tShaderType = PL_SHADER_TYPE_PBR ;
1179+ ptMaterial -> tFlags |= PL_MATERIAL_FLAG_CAST_RECEIVE_SHADOW ;
1180+ ptMaterial -> tFlags &= ~PL_MATERIAL_FLAG_CAST_SHADOW ;
1181+ ptMaterial -> tBaseColor = (plVec4 ){1.0f , 1.0f , 1.0f , 1.0f };
1182+ ptMaterial -> fRoughness = 0.0f ;
1183+ ptMaterial -> fMetalness = 1.0f ;
1184+ pl_renderer__add_material_to_scene (ptScene , tMaterial );
1185+ ptMesh = gptECS -> get_component (ptScene -> ptComponentLibrary , gptMesh -> get_ecs_type_key_mesh (), ptScene -> tProbeMesh );
1186+ ptMesh -> tMaterial = tMaterial ;
11831187 return ptScene ;
11841188}
11851189
@@ -1226,6 +1230,8 @@ pl_renderer_destroy_view(plView* ptView)
12261230
12271231 for (uint32_t i = 0 ; i < gptGfx -> get_frames_in_flight (); i ++ )
12281232 {
1233+ gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptView -> atDShadowCameraBuffers [i ]);
1234+ gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptView -> atDLightShadowDataBuffer [i ]);
12291235 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptView -> atViewBuffers [i ]);
12301236 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptView -> atView2Buffers [i ]);
12311237 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptView -> atPickBuffer [i ]);
@@ -1261,6 +1267,8 @@ pl_renderer_destroy_scene(plScene* ptScene)
12611267 {
12621268 plEnvironmentProbeData * ptProbe = & ptScene -> sbtProbeData [j ];
12631269
1270+ gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptProbe -> tDShadowCameraBuffers );
1271+ gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptProbe -> tDLightShadowDataBuffer );
12641272 gptGfx -> queue_texture_for_deletion (gptData -> ptDevice , ptProbe -> tLambertianEnvTexture );
12651273 gptGfx -> queue_texture_for_deletion (gptData -> ptDevice , ptProbe -> tGGXEnvTexture );
12661274 if (ptScene -> tFlags & PL_SCENE_INTERNAL_FLAG_SHEEN_REQUIRED )
@@ -1286,7 +1294,6 @@ pl_renderer_destroy_scene(plScene* ptScene)
12861294 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptProbe -> tViewBuffer );
12871295 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptProbe -> tView2Buffer );
12881296
1289-
12901297 gptGfx -> queue_bind_group_for_deletion (gptData -> ptDevice , ptProbe -> tViewBG );
12911298 gptGfx -> queue_bind_group_for_deletion (gptData -> ptDevice , ptProbe -> tGBufferBG );
12921299
@@ -1300,6 +1307,8 @@ pl_renderer_destroy_scene(plScene* ptScene)
13001307
13011308 for (uint32_t i = 0 ; i < gptGfx -> get_frames_in_flight (); i ++ )
13021309 {
1310+ gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> atTransformBuffer [i ]);
1311+ gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> atInstanceBuffer [i ]);
13031312 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> atDynamicSkinBuffer [i ]);
13041313 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> atSceneBuffer [i ]);
13051314 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> atPointLightBuffer [i ]);
@@ -1309,8 +1318,6 @@ pl_renderer_destroy_scene(plScene* ptScene)
13091318 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> atPointLightShadowDataBuffer [i ]);
13101319 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> atSpotLightShadowDataBuffer [i ]);
13111320 gptGfx -> queue_bind_group_for_deletion (gptData -> ptDevice , ptScene -> atSceneBindGroups [i ]);
1312- // gptGfx->queue_buffer_for_deletion(gptData->ptDevice, ptScene->atDLightShadowDataBuffer[i]);
1313- // gptGfx->queue_buffer_for_deletion(gptData->ptDevice, ptScene->atDShadowCameraBuffers[i]);
13141321 }
13151322 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> tGPUProbeDataBuffers );
13161323 gptGfx -> queue_buffer_for_deletion (gptData -> ptDevice , ptScene -> tMaterialDataBuffer );
@@ -3281,9 +3288,9 @@ pl_renderer_prepare_scene(plScene* ptScene, const plCamera** atCameras, uint32_t
32813288 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~perform skinning~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32823289
32833290 const plBeginCommandInfo tSkinningBeginInfo = {
3284- .uWaitSemaphoreCount = 1 ,
3285- .atWaitSempahores = {gptStarter -> get_current_timeline_semaphore ()},
3286- .auWaitSemaphoreValues = {gptStarter -> get_current_timeline_value ()},
3291+ .uWaitSemaphoreCount = 2 ,
3292+ .atWaitSempahores = {gptStarter -> get_current_timeline_semaphore (), gptStarter -> get_last_timeline_semaphore () },
3293+ .auWaitSemaphoreValues = {gptStarter -> get_current_timeline_value (), gptStarter -> get_last_timeline_value () },
32873294 };
32883295
32893296 plCommandBuffer * ptSkinningCmdBuffer = gptGfx -> request_command_buffer (ptCmdPool , "skinning" );
@@ -3910,6 +3917,16 @@ pl_renderer_render_view(plView* ptView, const plRenderViewDesc* ptViewDesc)
39103917
39113918 if (ptView -> tBloomOptions .tFlags & PL_RENDERER_BLOOM_FLAGS_ACTIVE && pl_sb_size (ptView -> sbtBloomDownChain ) >= ptView -> tBloomOptions .uChainLength )
39123919 pl__render_view_bloom_pass (ptView );
3920+ else if (!(ptView -> tBloomOptions .tFlags & PL_RENDERER_BLOOM_FLAGS_ACTIVE ))
3921+ {
3922+ for (uint32_t i = 0 ; i < pl_sb_size (ptView -> sbtBloomDownChain ); i ++ )
3923+ {
3924+ gptGfx -> queue_texture_for_deletion (gptData -> ptDevice , ptView -> sbtBloomDownChain [i ]);
3925+ gptGfx -> queue_texture_for_deletion (gptData -> ptDevice , ptView -> sbtBloomUpChain [i ]);
3926+ }
3927+ pl_sb_reset (ptView -> sbtBloomDownChain );
3928+ pl_sb_reset (ptView -> sbtBloomUpChain );
3929+ }
39133930
39143931 pl__render_view_tonemap_pass (ptView );
39153932
@@ -4283,7 +4300,8 @@ pl_renderer_ecs_add_drawable_objects_to_scene(plScene* ptScene, uint32_t uObject
42834300
42844301 uint64_t uMaterialIndex = pl_renderer__add_material_to_scene (ptScene , ptMesh -> tMaterial );
42854302
4286- ptScene -> sbtDrawables [uDrawableIndex ].uMaterialIndex = (uint32_t )ptScene -> sbtMaterialNodes [uMaterialIndex ]-> uOffset ;
4303+ // ptScene->sbtDrawables[uDrawableIndex].uMaterialIndex = (uint32_t)ptScene->sbtMaterialNodes[uMaterialIndex]->uOffset/ sizeof(plGpuMaterial);
4304+ // (uint32_t)ptScene->sbtMaterialNodes[uMaterialIndex2]->uOffset / sizeof(plGpuMaterial);
42874305
42884306 int iDataStride = 0 ;
42894307 int iFlagCopy0 = (int )ptMesh -> ulVertexStreamMask ;
@@ -5022,6 +5040,7 @@ pl_renderer_load_test_world(const char* pcPath, plComponentLibrary* ptComponentL
50225040 tSceneInit .szDataBufferSize = (size_t )pl_json_uint_member (ptAppObject , "szDataBufferSize" , 64000000 );
50235041 tSceneInit .szMaterialBufferSize = (size_t )pl_json_uint_member (ptAppObject , "szMaterialBufferSize" , 8000000 );
50245042 tSceneInit .szSkinBufferSize = (size_t )pl_json_uint_member (ptAppObject , "szSkinBufferSize" , 8000000 );
5043+ tSceneInit .uShadowAtlasResolution = (size_t )pl_json_uint_member (ptAppObject , "uShadowAtlasResolution" , 4096 * 4 );
50255044
50265045 ptDataOut -> ptScene = pl_renderer_create_scene (& tSceneInit );
50275046 plViewDesc tViewDesc = PL_ZERO_INIT ;
@@ -5052,7 +5071,7 @@ pl_renderer_load_test_world(const char* pcPath, plComponentLibrary* ptComponentL
50525071 plJsonObject * ptEditorObject = pl_json_member (ptRootJsonObject , "editor" );
50535072 plJsonObject * ptDebugObject = pl_json_member (ptRootJsonObject , "debug" );
50545073
5055- ptDataOut -> bMSAA = pl_json_bool_member (ptEditorObject , "bMSAA" , true);
5074+ ptDataOut -> bMSAA = pl_json_bool_member (ptAppObject , "bMSAA" , true);
50565075 tDebugOptions .bWireframe = pl_json_bool_member (ptDebugObject , "bWireframe" , false);
50575076 tDebugOptions .bShowOrigin = pl_json_bool_member (ptDebugObject , "bShowOrigin" , false);
50585077 tDebugOptions .bShowProbes = pl_json_bool_member (ptDebugObject , "bShowProbes" , false);
0 commit comments