FreeCAD-VR: some fixes on FrameBuffer rendering portion

This commit is contained in:
jriegel 2014-09-15 16:27:40 +02:00
parent 66a58c40ad
commit 069da65528

View File

@ -195,8 +195,8 @@ CoinRiftWidget::CoinRiftWidget() : QGLWidget()
eyeTexture[1].Header.TextureSize = eyeTexture[0].Header.TextureSize; eyeTexture[1].Header.TextureSize = eyeTexture[0].Header.TextureSize;
#endif #endif
#ifdef USE_FRAMEBUFFER #ifdef USE_FRAMEBUFFER
eyes[0].TextureSize = recommenedTex0Size; eyeTexture[0].Header.TextureSize = recommenedTex0Size;
eyes[1].TextureSize = recommenedTex1Size; eyeTexture[1].Header.TextureSize = recommenedTex1Size;
#endif #endif
eyeTexture[0].Header.RenderViewport.Pos.x = 0; eyeTexture[0].Header.RenderViewport.Pos.x = 0;
eyeTexture[0].Header.RenderViewport.Pos.y = 0; eyeTexture[0].Header.RenderViewport.Pos.y = 0;
@ -290,7 +290,7 @@ void CoinRiftWidget::initializeGL()
// Infer hardware capabilites. // Infer hardware capabilites.
#ifdef USE_FRAMEBUFFER #ifdef USE_FRAMEBUFFER
OVR::CAPI::GL::InitGLExtensions(); OVR::CAPI::GL::InitGLExtensions();
if (OVR::CAPI::GL::glBindFramebufferEXT == NULL) { if (OVR::CAPI::GL::glBindFramebuffer == NULL) {
qDebug() << "No GL extensions found."; qDebug() << "No GL extensions found.";
exit(4); exit(4);
} }
@ -307,12 +307,13 @@ void CoinRiftWidget::initializeGL()
OVR::CAPI::GL::glGenFramebuffers(1, &frameBufferID[eye]); OVR::CAPI::GL::glGenFramebuffers(1, &frameBufferID[eye]);
OVR::CAPI::GL::glBindFramebuffer(GL_FRAMEBUFFER_EXT, frameBufferID[eye]); OVR::CAPI::GL::glBindFramebuffer(GL_FRAMEBUFFER_EXT, frameBufferID[eye]);
// Create the render buffer. // Create the render buffer.
OVR::CAPI::GL::glGenRenderbuffers(1, &depthBufferID[eye]); // TODO: need to check for OpenGl 3 or higher and load the functions JR 2014
OVR::CAPI::GL::glBindRenderbuffer(GL_RENDERBUFFER_EXT, depthBufferID[eye]); /*OVR::CAPI::GL::*/glGenRenderbuffers(1, &depthBufferID[eye]);
OVR::CAPI::GL::glRenderbufferStorage(GL_RENDERBUFFER_EXT, /*OVR::CAPI::GL::*/glBindRenderbuffer(GL_RENDERBUFFER_EXT, depthBufferID[eye]);
/*OVR::CAPI::GL::*/glRenderbufferStorage(GL_RENDERBUFFER_EXT,
GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT16,
eyes[eye].TextureSize.w, eyeTexture[eye].Header.TextureSize.w,
eyes[eye].TextureSize.h); eyeTexture[eye].Header.TextureSize.h);
// Attach renderbuffer to framebuffer. // Attach renderbuffer to framebuffer.
OVR::CAPI::GL::glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, OVR::CAPI::GL::glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT,
GL_DEPTH_ATTACHMENT_EXT, GL_DEPTH_ATTACHMENT_EXT,
@ -337,10 +338,10 @@ void CoinRiftWidget::initializeGL()
Q_ASSERT(!glGetError()); Q_ASSERT(!glGetError());
#ifdef USE_FRAMEBUFFER #ifdef USE_FRAMEBUFFER
// Attach texture to framebuffer color object. // Attach texture to framebuffer color object.
OVR::CAPI::GL::glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, OVR::CAPI::GL::glFramebufferTexture2D(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_TEXTURE_2D, texData->TexId, 0); GL_TEXTURE_2D, texData->TexId, 0);
if (OVR::CAPI::GL::glCheckFramebufferStatusEXT(GL_FRAMEBUFFER) != if (OVR::CAPI::GL::glCheckFramebufferStatus(GL_FRAMEBUFFER) !=
GL_FRAMEBUFFER_COMPLETE) GL_FRAMEBUFFER_COMPLETE)
qDebug() << "ERROR: FrameBuffer is not operational!"; qDebug() << "ERROR: FrameBuffer is not operational!";
#endif #endif
@ -350,7 +351,7 @@ void CoinRiftWidget::initializeGL()
#ifdef USE_FRAMEBUFFER #ifdef USE_FRAMEBUFFER
// Continue rendering to the orgiginal frame buffer (likely 0, the onscreen buffer). // Continue rendering to the orgiginal frame buffer (likely 0, the onscreen buffer).
OVR::CAPI::GL::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, oldfb); OVR::CAPI::GL::glBindFramebuffer(GL_FRAMEBUFFER_EXT, oldfb);
#endif #endif
doneCurrent(); doneCurrent();
} }
@ -410,14 +411,14 @@ void CoinRiftWidget::paintGL()
GLint oldfb; GLint oldfb;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &oldfb); glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &oldfb);
// Set up framebuffer for rendering. // Set up framebuffer for rendering.
OVR::CAPI::GL::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID[eye]); OVR::CAPI::GL::glBindFramebuffer(GL_FRAMEBUFFER_EXT, frameBufferID[eye]);
m_sceneManager->setSceneGraph(rootScene[eye]); m_sceneManager->setSceneGraph(rootScene[eye]);
// m_sceneManager->setCamera(camera[eye]); // SoSceneManager does this implicitly. // m_sceneManager->setCamera(camera[eye]); // SoSceneManager does this implicitly.
m_sceneManager->render(); m_sceneManager->render();
// Continue rendering to the orgiginal frame buffer (likely 0, the onscreen buffer). // Continue rendering to the orgiginal frame buffer (likely 0, the onscreen buffer).
OVR::CAPI::GL::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, oldfb); OVR::CAPI::GL::glBindFramebuffer(GL_FRAMEBUFFER_EXT, oldfb);
Q_ASSERT(!glGetError()); Q_ASSERT(!glGetError());
#endif #endif