mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 10:13:15 +02:00
Be a little less heavy handed with the GPU sync
This commit is contained in:
parent
5680d58a19
commit
64bb120712
1 changed files with 10 additions and 2 deletions
|
@ -710,13 +710,21 @@ void OculusManager::display(QGLWidget * glCanvas, RenderArgs* renderArgs, const
|
||||||
Q_ASSERT(OVR_SUCCESS(res));
|
Q_ASSERT(OVR_SUCCESS(res));
|
||||||
_swapFbo->Increment();
|
_swapFbo->Increment();
|
||||||
#else
|
#else
|
||||||
glFinish();
|
GLsync syncObject = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||||
GLuint textureId = gpu::GLBackend::getTextureID(finalFbo->getRenderBuffer(0));
|
glFlush();
|
||||||
|
|
||||||
_outputWindow->makeCurrent();
|
_outputWindow->makeCurrent();
|
||||||
|
// force the compositing context to wait for the texture
|
||||||
|
// rendering to complete before it starts the distortion rendering,
|
||||||
|
// but without triggering a CPU/GPU synchronization
|
||||||
|
glWaitSync(syncObject, 0, GL_TIMEOUT_IGNORED);
|
||||||
|
|
||||||
|
GLuint textureId = gpu::GLBackend::getTextureID(finalFbo->getRenderBuffer(0));
|
||||||
for_each_eye([&](ovrEyeType eye) {
|
for_each_eye([&](ovrEyeType eye) {
|
||||||
ovrGLTexture & glEyeTexture = reinterpret_cast<ovrGLTexture&>(_eyeTextures[eye]);
|
ovrGLTexture & glEyeTexture = reinterpret_cast<ovrGLTexture&>(_eyeTextures[eye]);
|
||||||
glEyeTexture.OGL.TexId = textureId;
|
glEyeTexture.OGL.TexId = textureId;
|
||||||
});
|
});
|
||||||
|
|
||||||
// restore our normal viewport
|
// restore our normal viewport
|
||||||
ovrHmd_EndFrame(_ovrHmd, eyeRenderPose, _eyeTextures);
|
ovrHmd_EndFrame(_ovrHmd, eyeRenderPose, _eyeTextures);
|
||||||
glCanvas->makeCurrent();
|
glCanvas->makeCurrent();
|
||||||
|
|
Loading…
Reference in a new issue