Skip to content

Commit a9b5e4c

Browse files
committed
Refresh OpenGL raytrace source meshes every frame
1 parent d91e402 commit a9b5e4c

1 file changed

Lines changed: 12 additions & 5 deletions

File tree

frame/opengl/renderer.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ bool RaytraceSceneRequiresWorldSpaceBuffers(frame::LevelInterface& level)
129129
return false;
130130
}
131131

132+
bool HasRaytracingSourceMeshes(frame::LevelInterface& level)
133+
{
134+
return !GetRaytracingSourceMeshMaterials(level).empty();
135+
}
136+
132137
std::vector<std::pair<EntityId, std::string>> GetActiveTextureBindings(
133138
const MaterialInterface& material,
134139
const ProgramInterface& program)
@@ -617,7 +622,7 @@ void Renderer::UpdateRaytraceBuffersIfNeeded(SkinnedMesh& skinned_mesh)
617622
}
618623
}
619624

620-
if (RaytraceSceneRequiresWorldSpaceBuffers(level_))
625+
if (HasRaytracingSourceMeshes(level_))
621626
{
622627
UpdateAggregateRaytraceSceneBuffers();
623628
}
@@ -1106,7 +1111,9 @@ void Renderer::PreRender()
11061111
render_time_ = proto::NodeMesh::PRE_RENDER_TIME;
11071112
// This will ensure that it is only true once.
11081113
auto first_render = std::exchange(first_render_, false);
1109-
auto preprocess_entry = [&](const std::pair<EntityId, EntityId>& p) {
1114+
auto preprocess_entry = [&](
1115+
const std::pair<EntityId, EntityId>& p,
1116+
bool preprocess_every_frame) {
11101117
auto& node = level_.GetSceneNodeFromId(p.first);
11111118
if (node.GetLocalMesh())
11121119
{
@@ -1118,7 +1125,7 @@ void Renderer::PreRender()
11181125
UpdateRaytraceBuffersIfNeeded(*gl_skinned_mesh);
11191126
}
11201127
}
1121-
if (!first_render)
1128+
if (!first_render && !preprocess_every_frame)
11221129
{
11231130
return;
11241131
}
@@ -1203,7 +1210,7 @@ void Renderer::PreRender()
12031210
for (const auto& p : level_.GetMeshMaterialIds(
12041211
proto::NodeMesh::PRE_RENDER_TIME))
12051212
{
1206-
preprocess_entry(p);
1213+
preprocess_entry(p, false);
12071214
}
12081215
for (const auto& p : level_.GetMeshMaterialIds(
12091216
proto::NodeMesh::SCENE_RENDER_TIME))
@@ -1212,7 +1219,7 @@ void Renderer::PreRender()
12121219
{
12131220
continue;
12141221
}
1215-
preprocess_entry(p);
1222+
preprocess_entry(p, true);
12161223
}
12171224
if (RaytraceSceneRequiresWorldSpaceBuffers(level_))
12181225
{

0 commit comments

Comments
 (0)