Skip to content

Commit 98aca92

Browse files
committed
Not destroying everything when reload
1 parent ff721de commit 98aca92

1 file changed

Lines changed: 70 additions & 47 deletions

File tree

engine/core/subsystem/RenderSystem.cpp

Lines changed: 70 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)