FreeCAD-VR: some fixes on FrameBuffer rendering portion
This commit is contained in:
parent
66a58c40ad
commit
069da65528
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user