Skip to content

Commit 230e476

Browse files
committed
Fix handling of shouldRender flag
1 parent b0ecee0 commit 230e476

File tree

3 files changed

+44
-47
lines changed

3 files changed

+44
-47
lines changed

src/Headset.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -496,13 +496,6 @@ Headset::BeginFrameResult Headset::beginFrame(uint32_t& swapchainImageIndex)
496496
return BeginFrameResult::Error;
497497
}
498498

499-
if (!frameState.shouldRender)
500-
{
501-
// Let the host know that we don't want to render this frame
502-
// We do still need to end the frame however
503-
return BeginFrameResult::SkipRender;
504-
}
505-
506499
// Update the eye poses
507500
viewState.type = XR_TYPE_VIEW_STATE;
508501
uint32_t viewCount;
@@ -558,7 +551,12 @@ Headset::BeginFrameResult Headset::beginFrame(uint32_t& swapchainImageIndex)
558551
return BeginFrameResult::Error;
559552
}
560553

561-
return BeginFrameResult::RenderFully; // Request full rendering of the frame
554+
if (!frameState.shouldRender)
555+
{
556+
return BeginFrameResult::SkipRender;
557+
}
558+
559+
return BeginFrameResult::RenderFully;
562560
}
563561

564562
void Headset::endFrame() const

src/Headset.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Headset final
2828
{
2929
Error, // An error occurred
3030
RenderFully, // Render this frame normally
31-
SkipRender, // Skip rendering the frame but end it
31+
SkipRender, // Process this frame but skip rendering
3232
SkipFully // Skip processing this frame entirely without ending it
3333
};
3434
BeginFrameResult beginFrame(uint32_t& swapchainImageIndex);

src/Main.cpp

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -130,57 +130,56 @@ int main()
130130
{
131131
return EXIT_FAILURE;
132132
}
133-
else if (frameResult == Headset::BeginFrameResult::RenderFully)
133+
else if (frameResult == Headset::BeginFrameResult::SkipFully)
134134
{
135-
if (!controllers.sync(headset.getXrSpace(), headset.getXrFrameState().predictedDisplayTime))
136-
{
137-
return EXIT_FAILURE;
138-
}
135+
continue;
136+
}
137+
138+
if (!controllers.sync(headset.getXrSpace(), headset.getXrFrameState().predictedDisplayTime))
139+
{
140+
return EXIT_FAILURE;
141+
}
139142

140-
static float time = 0.0f;
141-
time += deltaTime;
143+
static float time = 0.0f;
144+
time += deltaTime;
142145

143-
// Update
144-
for (size_t controllerIndex = 0u; controllerIndex < 2u; ++controllerIndex)
146+
// Update
147+
for (size_t controllerIndex = 0u; controllerIndex < 2u; ++controllerIndex)
148+
{
149+
const float flySpeed = controllers.getFlySpeed(controllerIndex);
150+
if (flySpeed > 0.0f)
145151
{
146-
const float flySpeed = controllers.getFlySpeed(controllerIndex);
147-
if (flySpeed > 0.0f)
148-
{
149-
const glm::vec3 forward = glm::normalize(controllers.getPose(controllerIndex)[2]);
150-
cameraMatrix = glm::translate(cameraMatrix, forward * flySpeed * flySpeedMultiplier * deltaTime);
151-
}
152+
const glm::vec3 forward = glm::normalize(controllers.getPose(controllerIndex)[2]);
153+
cameraMatrix = glm::translate(cameraMatrix, forward * flySpeed * flySpeedMultiplier * deltaTime);
152154
}
155+
}
153156

154-
const glm::mat4 inverseCameraMatrix = glm::inverse(cameraMatrix);
155-
handModelLeft.worldMatrix = inverseCameraMatrix * controllers.getPose(0u);
156-
handModelRight.worldMatrix = inverseCameraMatrix * controllers.getPose(1u);
157-
handModelRight.worldMatrix = glm::scale(handModelRight.worldMatrix, { -1.0f, 1.0f, 1.0f });
158-
159-
bikeModel.worldMatrix =
160-
glm::rotate(glm::translate(glm::mat4(1.0f), { 0.5f, 0.0f, -4.5f }), time * 0.2f, { 0.0f, 1.0f, 0.0f });
161-
162-
// Render
163-
renderer.render(cameraMatrix, swapchainImageIndex, time);
157+
const glm::mat4 inverseCameraMatrix = glm::inverse(cameraMatrix);
158+
handModelLeft.worldMatrix = inverseCameraMatrix * controllers.getPose(0u);
159+
handModelRight.worldMatrix = inverseCameraMatrix * controllers.getPose(1u);
160+
handModelRight.worldMatrix = glm::scale(handModelRight.worldMatrix, { -1.0f, 1.0f, 1.0f });
164161

165-
const MirrorView::RenderResult mirrorResult = mirrorView.render(swapchainImageIndex);
166-
if (mirrorResult == MirrorView::RenderResult::Error)
167-
{
168-
return EXIT_FAILURE;
169-
}
162+
bikeModel.worldMatrix =
163+
glm::rotate(glm::translate(glm::mat4(1.0f), { 0.5f, 0.0f, -4.5f }), time * 0.2f, { 0.0f, 1.0f, 0.0f });
170164

171-
const bool mirrorViewVisible = (mirrorResult == MirrorView::RenderResult::Visible);
172-
renderer.submit(mirrorViewVisible);
165+
// Render
166+
renderer.render(cameraMatrix, swapchainImageIndex, time);
173167

174-
if (mirrorViewVisible)
175-
{
176-
mirrorView.present();
177-
}
168+
const MirrorView::RenderResult mirrorResult = mirrorView.render(swapchainImageIndex);
169+
if (mirrorResult == MirrorView::RenderResult::Error)
170+
{
171+
return EXIT_FAILURE;
178172
}
179173

180-
if (frameResult == Headset::BeginFrameResult::RenderFully || frameResult == Headset::BeginFrameResult::SkipRender)
174+
const bool mirrorViewVisible = (mirrorResult == MirrorView::RenderResult::Visible);
175+
renderer.submit(mirrorViewVisible);
176+
177+
if (mirrorViewVisible)
181178
{
182-
headset.endFrame();
179+
mirrorView.present();
183180
}
181+
182+
headset.endFrame();
184183
}
185184

186185
context.sync(); // Sync before destroying so that resources are free

0 commit comments

Comments
 (0)