mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-23 14:54:29 +02:00
Merge pull request #5341 from samcake/daft
Remove the glGet( viewport ) from DeferredLightingEffect
This commit is contained in:
commit
ae6e7f05b6
7 changed files with 23 additions and 30 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue