@@ -1143,27 +1143,30 @@ void RenderSystem::destroyMesh(Entity entity, MeshComponent& mesh){
11431143 for (int i = 0 ; i < mesh.numSubmeshes ; i++){
11441144
11451145 Submesh& submesh = mesh.submeshes [i];
1146+ if (!mesh.needReload ){
1147+ // Destroy shader
1148+ submesh.shader .reset ();
1149+ ShaderPool::remove (ShaderType::MESH , mesh.submeshes [i].shaderProperties );
1150+ if (hasShadows && mesh.castShadows )
1151+ ShaderPool::remove (ShaderType::DEPTH , mesh.submeshes [i].depthShaderProperties );
11461152
1147- // Destroy shader
1148- submesh.shader .reset ();
1149- ShaderPool::remove (ShaderType::MESH , mesh.submeshes [i].shaderProperties );
1150- if (hasShadows && mesh.castShadows )
1151- ShaderPool::remove (ShaderType::DEPTH , mesh.submeshes [i].depthShaderProperties );
1152-
1153- // Destroy texture
1154- submesh.material .baseColorTexture .destroy ();
1155- submesh.material .metallicRoughnessTexture .destroy ();
1156- submesh.material .normalTexture .destroy ();
1157- submesh.material .occlusionTexture .destroy ();
1158- submesh.material .emissiveTexture .destroy ();
1153+ // Destroy texture
1154+ submesh.material .baseColorTexture .destroy ();
1155+ submesh.material .metallicRoughnessTexture .destroy ();
1156+ submesh.material .normalTexture .destroy ();
1157+ submesh.material .occlusionTexture .destroy ();
1158+ submesh.material .emissiveTexture .destroy ();
1159+ }
11591160
11601161 if (terrain){
11611162 // Destroy terrain texture
1162- terrain->heightMap .destroy ();
1163- terrain->blendMap .destroy ();
1164- terrain->textureDetailRed .destroy ();
1165- terrain->textureDetailGreen .destroy ();
1166- terrain->textureDetailBlue .destroy ();
1163+ if (!mesh.needReload ){
1164+ terrain->heightMap .destroy ();
1165+ terrain->blendMap .destroy ();
1166+ terrain->textureDetailRed .destroy ();
1167+ terrain->textureDetailGreen .destroy ();
1168+ terrain->textureDetailBlue .destroy ();
1169+ }
11671170
11681171 // Destroy terrain buffer
11691172 for (int s = 0 ; s < 2 ; s++){
@@ -1173,6 +1176,9 @@ void RenderSystem::destroyMesh(Entity entity, MeshComponent& mesh){
11731176
11741177 if (instmesh){
11751178 // Destroy instmesh buffer
1179+ if (!mesh.needReload ){
1180+ instmesh->buffer .clearAll ();
1181+ }
11761182 instmesh->buffer .getRender ()->destroyBuffer ();
11771183 }
11781184
@@ -1198,12 +1204,16 @@ void RenderSystem::destroyMesh(Entity entity, MeshComponent& mesh){
11981204 }
11991205
12001206 // Destroy buffer
1201- // mesh.buffer.clearAll();
1207+ if (!mesh.needReload ){
1208+ mesh.buffer .clearAll ();
1209+ mesh.indices .clearAll ();
1210+ }
12021211 mesh.buffer .getRender ()->destroyBuffer ();
1203- // mesh.indices.clearAll();
12041212 mesh.indices .getRender ()->destroyBuffer ();
12051213 for (int i = 0 ; i < mesh.numExternalBuffers ; i++){
1206- // mesh.eBuffers[i].clearAll();
1214+ if (!mesh.needReload ){
1215+ mesh.eBuffers [i].clearAll ();
1216+ }
12071217 mesh.eBuffers [i].getRender ()->destroyBuffer ();
12081218 }
12091219
@@ -1347,25 +1357,25 @@ void RenderSystem::destroyUI(Entity entity, UIComponent& ui){
13471357 if (!ui.loaded )
13481358 return ;
13491359
1350- // Destroy shader
1351- ui.shader .reset ();
1352- ShaderPool::remove (ShaderType::UI , ui.shaderProperties );
1360+ if (!ui.needReload ){
1361+ // Destroy shader
1362+ ui.shader .reset ();
1363+ ShaderPool::remove (ShaderType::UI , ui.shaderProperties );
13531364
1354- // Destroy texture
1355- ui.texture .destroy ();
1365+ // Destroy texture
1366+ ui.texture .destroy ();
1367+ }
13561368
13571369 // Destroy render
13581370 ui.render .destroy ();
13591371
13601372 // Destroy buffer
1361- if (ui.buffer .getSize () > 0 ){
1362- // ui.buffer.clearAll();
1363- ui.buffer .getRender ()->destroyBuffer ();
1364- }
1365- if (ui.indices .getSize () > 0 ){
1366- // ui.indices.clearAll();
1367- ui.indices .getRender ()->destroyBuffer ();
1373+ if (!ui.needReload ){
1374+ ui.buffer .clearAll ();
1375+ ui.indices .clearAll ();
13681376 }
1377+ ui.buffer .getRender ()->destroyBuffer ();
1378+ ui.indices .getRender ()->destroyBuffer ();
13691379
13701380 // Shaders uniforms
13711381 ui.slotVSParams = -1 ;
@@ -1543,18 +1553,22 @@ void RenderSystem::destroyPoints(Entity entity, PointsComponent& points){
15431553 if (!points.loaded )
15441554 return ;
15451555
1546- // Destroy shader
1547- points.shader .reset ();
1548- ShaderPool::remove (ShaderType::POINTS , points.shaderProperties );
1556+ if (!points.needReload ){
1557+ // Destroy shader
1558+ points.shader .reset ();
1559+ ShaderPool::remove (ShaderType::POINTS , points.shaderProperties );
15491560
1550- // Destroy texture
1551- points.texture .destroy ();
1561+ // Destroy texture
1562+ points.texture .destroy ();
1563+ }
15521564
15531565 // Destroy render
15541566 points.render .destroy ();
15551567
15561568 // Destroy buffer
1557- // points.buffer.clearAll();
1569+ if (!points.needReload ){
1570+ points.buffer .clearAll ();
1571+ }
15581572 points.buffer .getRender ()->destroyBuffer ();
15591573
15601574 // Shaders uniforms
@@ -1588,14 +1602,19 @@ void RenderSystem::destroyLines(Entity entity, LinesComponent& lines){
15881602 if (!lines.loaded )
15891603 return ;
15901604
1591- // Destroy shader
1592- lines.shader .reset ();
1593- ShaderPool::remove (ShaderType::LINES , lines.shaderProperties );
1605+ if (!lines.needReload ){
1606+ // Destroy shader
1607+ lines.shader .reset ();
1608+ ShaderPool::remove (ShaderType::LINES , lines.shaderProperties );
1609+ }
15941610
15951611 // Destroy render
15961612 lines.render .destroy ();
15971613
15981614 // Destroy buffer
1615+ if (!lines.needReload ){
1616+ lines.buffer .clearAll ();
1617+ }
15991618 lines.buffer .getRender ()->destroyBuffer ();
16001619
16011620 // Shaders uniforms
@@ -1728,18 +1747,22 @@ void RenderSystem::destroySky(Entity entity, SkyComponent& sky){
17281747 if (!sky.loaded )
17291748 return ;
17301749
1731- // Destroy shader
1732- sky.shader .reset ();
1733- ShaderPool::remove (ShaderType::SKYBOX , 0 );
1750+ if (!sky.needReload ){
1751+ // Destroy shader
1752+ sky.shader .reset ();
1753+ ShaderPool::remove (ShaderType::SKYBOX , 0 );
17341754
1735- // Destroy texture
1736- sky.texture .destroy ();
1755+ // Destroy texture
1756+ sky.texture .destroy ();
1757+ }
17371758
17381759 // Destroy render
17391760 sky.render .destroy ();
17401761
17411762 // Destroy buffer
1742- // sky.buffer.clearAll();
1763+ if (!sky.needReload ){
1764+ sky.buffer .clearAll ();
1765+ }
17431766 sky.buffer .getRender ()->destroyBuffer ();
17441767
17451768 // Shaders uniforms
0 commit comments