Merge pull request #5341 from samcake/daft

Remove the glGet( viewport ) from DeferredLightingEffect
This commit is contained in:
Brad Hefta-Gaub 2015-07-15 14:26:08 -07:00
commit ae6e7f05b6
7 changed files with 23 additions and 30 deletions

View file

@ -979,6 +979,7 @@ void Application::paintGL() {
// Viewport is assigned to the size of the framebuffer // Viewport is assigned to the size of the framebuffer
QSize size = DependencyManager::get<TextureCache>()->getFrameBufferSize(); QSize size = DependencyManager::get<TextureCache>()->getFrameBufferSize();
glViewport(0, 0, size.width(), size.height()); glViewport(0, 0, size.width(), size.height());
renderArgs._viewport = glm::ivec4(0, 0, size.width(), size.height());
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glPushMatrix(); glPushMatrix();
@ -3716,6 +3717,7 @@ void Application::renderRearViewMirror(RenderArgs* renderArgs, const QRect& regi
QSize size = DependencyManager::get<TextureCache>()->getFrameBufferSize(); QSize size = DependencyManager::get<TextureCache>()->getFrameBufferSize();
glViewport(region.x(), size.height() - region.y() - region.height(), region.width(), region.height()); glViewport(region.x(), size.height() - region.y() - region.height(), region.width(), region.height());
glScissor(region.x(), size.height() - region.y() - region.height(), region.width(), region.height()); glScissor(region.x(), size.height() - region.y() - region.height(), region.width(), region.height());
renderArgs->_viewport = glm::ivec4(region.x(), size.height() - region.y() - region.height(), region.width(), region.height());
} else { } else {
// if not rendering the billboard, the region is in device independent coordinates; must convert to device // if not rendering the billboard, the region is in device independent coordinates; must convert to device
QSize size = DependencyManager::get<TextureCache>()->getFrameBufferSize(); QSize size = DependencyManager::get<TextureCache>()->getFrameBufferSize();
@ -3723,6 +3725,8 @@ void Application::renderRearViewMirror(RenderArgs* renderArgs, const QRect& regi
int x = region.x() * ratio, y = region.y() * ratio, width = region.width() * ratio, height = region.height() * ratio; int x = region.x() * ratio, y = region.y() * ratio, width = region.width() * ratio, height = region.height() * ratio;
glViewport(x, size.height() - y - height, width, height); glViewport(x, size.height() - y - height, width, height);
glScissor(x, size.height() - y - height, width, height); glScissor(x, size.height() - y - height, width, height);
renderArgs->_viewport = glm::ivec4(x, size.height() - y - height, width, height);
} }
bool updateViewFrustum = false; bool updateViewFrustum = false;
updateProjectionMatrix(_mirrorCamera, updateViewFrustum); updateProjectionMatrix(_mirrorCamera, updateViewFrustum);
@ -3735,6 +3739,7 @@ void Application::renderRearViewMirror(RenderArgs* renderArgs, const QRect& regi
glPopMatrix(); glPopMatrix();
// reset Viewport and projection matrix // reset Viewport and projection matrix
renderArgs->_viewport = glm::ivec4(viewport[0], viewport[1], viewport[2], viewport[3]);
glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
glDisable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST);
updateProjectionMatrix(_myCamera, updateViewFrustum); updateProjectionMatrix(_myCamera, updateViewFrustum);

View file

@ -714,6 +714,7 @@ void OculusManager::display(QGLWidget * glCanvas, RenderArgs* renderArgs, const
vp.Size.w = _recommendedTexSize.w * _offscreenRenderScale; vp.Size.w = _recommendedTexSize.w * _offscreenRenderScale;
glViewport(vp.Pos.x, vp.Pos.y, vp.Size.w, vp.Size.h); glViewport(vp.Pos.x, vp.Pos.y, vp.Size.w, vp.Size.h);
renderArgs->_viewport = glm::ivec4(vp.Pos.x, vp.Pos.y, vp.Size.w, vp.Size.h);
renderArgs->_renderSide = RenderArgs::MONO; renderArgs->_renderSide = RenderArgs::MONO;
qApp->displaySide(renderArgs, *_camera); qApp->displaySide(renderArgs, *_camera);
qApp->getApplicationCompositor().displayOverlayTextureHmd(renderArgs, eye); qApp->getApplicationCompositor().displayOverlayTextureHmd(renderArgs, eye);

View file

@ -107,6 +107,7 @@ void TV3DManager::display(RenderArgs* renderArgs, Camera& whichCamera) {
_activeEye = &eye; _activeEye = &eye;
glViewport(portalX, portalY, portalW, portalH); glViewport(portalX, portalY, portalW, portalH);
glScissor(portalX, portalY, portalW, portalH); glScissor(portalX, portalY, portalW, portalH);
renderArgs->_viewport = glm::ivec4(portalX, portalY, portalW, portalH);
glm::mat4 projection = glm::frustum<float>(eye.left, eye.right, eye.bottom, eye.top, nearZ, farZ); glm::mat4 projection = glm::frustum<float>(eye.left, eye.right, eye.bottom, eye.top, nearZ, farZ);
projection = glm::translate(projection, vec3(eye.modelTranslation, 0, 0)); projection = glm::translate(projection, vec3(eye.modelTranslation, 0, 0));
@ -118,6 +119,7 @@ void TV3DManager::display(RenderArgs* renderArgs, Camera& whichCamera) {
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); glLoadIdentity();
renderArgs->_renderSide = RenderArgs::MONO; renderArgs->_renderSide = RenderArgs::MONO;
qApp->displaySide(renderArgs, eyeCamera, false); qApp->displaySide(renderArgs, eyeCamera, false);
qApp->getApplicationCompositor().displayOverlayTexture(renderArgs); qApp->getApplicationCompositor().displayOverlayTexture(renderArgs);
_activeEye = NULL; _activeEye = NULL;

View file

@ -206,6 +206,7 @@ void ApplicationCompositor::displayOverlayTexture(RenderArgs* renderArgs) {
auto geometryCache = DependencyManager::get<GeometryCache>(); auto geometryCache = DependencyManager::get<GeometryCache>();
geometryCache->useSimpleDrawPipeline(batch); geometryCache->useSimpleDrawPipeline(batch);
batch.setViewportTransform(glm::ivec4(0, 0, deviceSize.width(), deviceSize.height()));
batch.setModelTransform(Transform()); batch.setModelTransform(Transform());
batch.setViewTransform(Transform()); batch.setViewTransform(Transform());
batch.setProjectionTransform(mat4()); batch.setProjectionTransform(mat4());

View file

@ -241,6 +241,8 @@ void DeferredLightingEffect::render(RenderArgs* args) {
auto freeFBO = DependencyManager::get<GlowEffect>()->getFreeFramebuffer(); auto freeFBO = DependencyManager::get<GlowEffect>()->getFreeFramebuffer();
batch.setFramebuffer(freeFBO); batch.setFramebuffer(freeFBO);
batch.setViewportTransform(args->_viewport);
batch.clearColorFramebuffer(freeFBO->getBufferMask(), glm::vec4(0.0f, 0.0f, 0.0f, 0.0f)); batch.clearColorFramebuffer(freeFBO->getBufferMask(), glm::vec4(0.0f, 0.0f, 0.0f, 0.0f));
batch.setResourceTexture(0, textureCache->getPrimaryColorTexture()); batch.setResourceTexture(0, textureCache->getPrimaryColorTexture());
@ -251,18 +253,10 @@ void DeferredLightingEffect::render(RenderArgs* args) {
batch.setResourceTexture(3, textureCache->getPrimaryDepthTexture()); batch.setResourceTexture(3, textureCache->getPrimaryDepthTexture());
// get the viewport side (left, right, both) float sMin = args->_viewport.x / (float)framebufferSize.width();
int viewport[4]; float sWidth = args->_viewport.z / (float)framebufferSize.width();
glGetIntegerv(GL_VIEWPORT, viewport); float tMin = args->_viewport.y / (float)framebufferSize.height();
const int VIEWPORT_X_INDEX = 0; float tHeight = args->_viewport.w / (float)framebufferSize.height();
const int VIEWPORT_Y_INDEX = 1;
const int VIEWPORT_WIDTH_INDEX = 2;
const int VIEWPORT_HEIGHT_INDEX = 3;
float sMin = viewport[VIEWPORT_X_INDEX] / (float)framebufferSize.width();
float sWidth = viewport[VIEWPORT_WIDTH_INDEX] / (float)framebufferSize.width();
float tMin = viewport[VIEWPORT_Y_INDEX] / (float)framebufferSize.height();
float tHeight = viewport[VIEWPORT_HEIGHT_INDEX] / (float)framebufferSize.height();
bool useSkyboxCubemap = (_skybox) && (_skybox->getCubemap()); bool useSkyboxCubemap = (_skybox) && (_skybox->getCubemap());
@ -557,26 +551,18 @@ void DeferredLightingEffect::copyBack(RenderArgs* args) {
batch.setProjectionTransform(glm::mat4()); batch.setProjectionTransform(glm::mat4());
batch.setViewTransform(Transform()); batch.setViewTransform(Transform());
int viewport[4]; float sMin = args->_viewport.x / (float)framebufferSize.width();
glGetIntegerv(GL_VIEWPORT, viewport); float sWidth = args->_viewport.z / (float)framebufferSize.width();
const int VIEWPORT_X_INDEX = 0; float tMin = args->_viewport.y / (float)framebufferSize.height();
const int VIEWPORT_Y_INDEX = 1; float tHeight = args->_viewport.w / (float)framebufferSize.height();
const int VIEWPORT_WIDTH_INDEX = 2;
const int VIEWPORT_HEIGHT_INDEX = 3;
float sMin = viewport[VIEWPORT_X_INDEX] / (float)framebufferSize.width(); batch.setViewportTransform(args->_viewport);
float sWidth = viewport[VIEWPORT_WIDTH_INDEX] / (float)framebufferSize.width();
float tMin = viewport[VIEWPORT_Y_INDEX] / (float)framebufferSize.height();
float tHeight = viewport[VIEWPORT_HEIGHT_INDEX] / (float)framebufferSize.height();
Transform model; Transform model;
model.setTranslation(glm::vec3(sMin, tMin, 0.0)); model.setTranslation(glm::vec3(sMin, tMin, 0.0));
model.setScale(glm::vec3(sWidth, tHeight, 1.0)); model.setScale(glm::vec3(sWidth, tHeight, 1.0));
batch.setModelTransform(model); batch.setModelTransform(model);
batch.setViewportTransform(glm::ivec4(viewport[0], viewport[1], viewport[2], viewport[3]));
batch.draw(gpu::TRIANGLE_STRIP, 4); batch.draw(gpu::TRIANGLE_STRIP, 4);

View file

@ -187,9 +187,6 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const
args->_context->syncCache(); args->_context->syncCache();
args->_context->render((*args->_batch)); args->_context->render((*args->_batch));
args->_batch = nullptr; args->_batch = nullptr;
// reset blend function to standard...
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_CONSTANT_ALPHA, GL_ONE);
} }
gpu::PipelinePointer DrawOverlay3D::_opaquePipeline; gpu::PipelinePointer DrawOverlay3D::_opaquePipeline;

View file

@ -104,6 +104,7 @@ public:
gpu::Context* _context = nullptr; gpu::Context* _context = nullptr;
OctreeRenderer* _renderer = nullptr; OctreeRenderer* _renderer = nullptr;
ViewFrustum* _viewFrustum = nullptr; ViewFrustum* _viewFrustum = nullptr;
glm::ivec4 _viewport{ 0, 0, 1, 1 };
float _sizeScale = 1.0f; float _sizeScale = 1.0f;
int _boundaryLevelAdjust = 0; int _boundaryLevelAdjust = 0;
RenderMode _renderMode = DEFAULT_RENDER_MODE; RenderMode _renderMode = DEFAULT_RENDER_MODE;