From 819fa852b8ca4e74606df37357f489cf9550f722 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 15 Jul 2015 12:47:59 -0700 Subject: [PATCH 1/3] first pass at GlowEctomy --- interface/src/Application.cpp | 22 ++++++++-------- interface/src/Menu.cpp | 4 --- interface/src/Menu.h | 2 -- interface/src/avatar/Avatar.cpp | 7 +----- interface/src/avatar/AvatarManager.cpp | 1 - interface/src/devices/OculusManager.cpp | 25 ++++--------------- interface/src/devices/TV3DManager.cpp | 8 +++++- interface/src/ui/overlays/Cube3DOverlay.cpp | 1 - interface/src/ui/overlays/Line3DOverlay.cpp | 1 - .../src/ui/overlays/LocalModelsOverlay.cpp | 12 +-------- interface/src/ui/overlays/ModelOverlay.cpp | 2 -- .../src/ui/overlays/Rectangle3DOverlay.cpp | 1 - interface/src/ui/overlays/Sphere3DOverlay.cpp | 1 - .../src/EntityTreeRenderer.cpp | 1 - .../src/RenderableWebEntityItem.cpp | 2 -- .../src/AmbientOcclusionEffect.cpp | 5 ++-- libraries/render-utils/src/Model.cpp | 4 +-- tests/ui/src/main.cpp | 1 - 18 files changed, 28 insertions(+), 72 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index dec179d479..373610087b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -65,7 +65,6 @@ #include #include #include -#include #include #include #include @@ -99,6 +98,8 @@ #include #include +#include // FIXME + #include "Application.h" #include "AudioClient.h" #include "DiscoverabilityManager.h" @@ -269,7 +270,7 @@ bool setupEssentials(int& argc, char** argv) { auto geometryCache = DependencyManager::set(); auto scriptCache = DependencyManager::set(); auto soundCache = DependencyManager::set(); - auto glowEffect = DependencyManager::set(); + auto glowEffect = DependencyManager::set(); // FIXME auto faceshift = DependencyManager::set(); auto audio = DependencyManager::set(); auto audioScope = DependencyManager::set(); @@ -974,7 +975,10 @@ void Application::paintGL() { } else { PROFILE_RANGE(__FUNCTION__ "/mainRender"); - DependencyManager::get()->prepare(&renderArgs); + auto primaryFBO = DependencyManager::get()->getPrimaryFramebuffer(); + GLuint fbo = gpu::GLBackend::getFramebufferID(primaryFBO); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Viewport is assigned to the size of the framebuffer QSize size = DependencyManager::get()->getFrameBufferSize(); @@ -993,8 +997,7 @@ void Application::paintGL() { renderArgs._renderMode = RenderArgs::NORMAL_RENDER_MODE; - auto finalFbo = DependencyManager::get()->render(&renderArgs); - + auto finalFbo = DependencyManager::get()->getPrimaryFramebuffer(); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_READ_FRAMEBUFFER, gpu::GLBackend::getFramebufferID(finalFbo)); @@ -1002,6 +1005,8 @@ void Application::paintGL() { 0, 0, _glWidget->getDeviceSize().width(), _glWidget->getDeviceSize().height(), GL_COLOR_BUFFER_BIT, GL_LINEAR); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + + glBindTexture(GL_TEXTURE_2D, 0); // ??? _compositor.displayOverlayTexture(&renderArgs); } @@ -2230,10 +2235,6 @@ void Application::init() { _entityClipboardRenderer.setViewFrustum(getViewFrustum()); _entityClipboardRenderer.setTree(&_entityClipboard); - // initialize the GlowEffect with our widget - bool glow = Menu::getInstance()->isOptionChecked(MenuOption::EnableGlowEffect); - DependencyManager::get()->init(glow); - // Make sure any new sounds are loaded as soon as know about them. connect(tree, &EntityTree::newCollisionSoundURL, DependencyManager::get().data(), &SoundCache::getSound); connect(_myAvatar, &MyAvatar::newCollisionSoundURL, DependencyManager::get().data(), &SoundCache::getSound); @@ -3193,9 +3194,6 @@ QImage Application::renderAvatarBillboard(RenderArgs* renderArgs) { glClear(GL_COLOR_BUFFER_BIT); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); - // the "glow" here causes an alpha of one - Glower glower(renderArgs); - const int BILLBOARD_SIZE = 64; // TODO: Pass a RenderArgs to renderAvatarBillboard renderRearViewMirror(renderArgs, QRect(0, _glWidget->getDeviceHeight() - BILLBOARD_SIZE, diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index f292ff2d2a..7fd1e81edc 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -246,7 +245,6 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(avatarMenu, MenuOption::ScriptedMotorControl, 0, true, avatar, SLOT(updateMotionBehavior())); addCheckableActionToQMenuAndActionHash(avatarMenu, MenuOption::NamesAboveHeads, 0, true); - addCheckableActionToQMenuAndActionHash(avatarMenu, MenuOption::GlowWhenSpeaking, 0, true); addCheckableActionToQMenuAndActionHash(avatarMenu, MenuOption::BlueSpeechSphere, 0, true); addCheckableActionToQMenuAndActionHash(avatarMenu, MenuOption::EnableCharacterController, 0, true, avatar, SLOT(updateMotionBehavior())); @@ -385,8 +383,6 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Stars, 0, // QML Qt::Key_Asterisk, true); - addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::EnableGlowEffect, 0, true, - DependencyManager::get().data(), SLOT(toggleGlowEffect(bool))); addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Wireframe, Qt::ALT | Qt::Key_W, false); addActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::LodTools, diff --git a/interface/src/Menu.h b/interface/src/Menu.h index b9efef0159..01cbcaffac 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -185,7 +185,6 @@ namespace MenuOption { const QString EditEntitiesHelp = "Edit Entities Help..."; const QString Enable3DTVMode = "Enable 3DTV Mode"; const QString EnableCharacterController = "Enable avatar collisions"; - const QString EnableGlowEffect = "Enable Glow Effect"; const QString EnableVRMode = "Enable VR Mode"; const QString ExpandMyAvatarSimulateTiming = "Expand /myAvatar/simulation"; const QString ExpandMyAvatarTiming = "Expand /myAvatar"; @@ -199,7 +198,6 @@ namespace MenuOption { const QString FrameTimer = "Show Timer"; const QString Fullscreen = "Fullscreen"; const QString FullscreenMirror = "Fullscreen Mirror"; - const QString GlowWhenSpeaking = "Glow When Speaking"; const QString HMDTools = "HMD Tools"; const QString IncreaseAvatarSize = "Increase Avatar Size"; const QString IndependentMode = "Independent Mode"; diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index b9acc84e1f..d0268fd936 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -24,7 +24,6 @@ #include #include -#include #include #include #include @@ -410,9 +409,7 @@ void Avatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition, boo float GLOW_FROM_AVERAGE_LOUDNESS = ((this == DependencyManager::get()->getMyAvatar()) ? 0.0f : MAX_GLOW * getHeadData()->getAudioLoudness() / GLOW_MAX_LOUDNESS); - if (!Menu::getInstance()->isOptionChecked(MenuOption::GlowWhenSpeaking)) { - GLOW_FROM_AVERAGE_LOUDNESS = 0.0f; - } + GLOW_FROM_AVERAGE_LOUDNESS = 0.0f; float glowLevel = _moving && distanceToTarget > GLOW_DISTANCE && renderArgs->_renderMode == RenderArgs::NORMAL_RENDER_MODE ? 1.0f @@ -579,8 +576,6 @@ void Avatar::renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, bool fixupModelsInScene(); { - Glower glower(renderArgs, glowLevel); - if (_shouldRenderBillboard || !(_skeletonModel.isRenderable() && getHead()->getFaceModel().isRenderable())) { if (postLighting || renderArgs->_renderMode == RenderArgs::SHADOW_RENDER_MODE) { // render the billboard until both models are loaded diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 8e7a03685b..41d637eb38 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -25,7 +25,6 @@ #endif -#include #include #include #include diff --git a/interface/src/devices/OculusManager.cpp b/interface/src/devices/OculusManager.cpp index 7bab6f58b9..ec3eaa0c03 100644 --- a/interface/src/devices/OculusManager.cpp +++ b/interface/src/devices/OculusManager.cpp @@ -24,7 +24,6 @@ #include #include -#include #include #include #include @@ -644,15 +643,9 @@ void OculusManager::display(QGLWidget * glCanvas, RenderArgs* renderArgs, const return; } - //Bind our framebuffer object. If we are rendering the glow effect, we let the glow effect shader take care of it - if (Menu::getInstance()->isOptionChecked(MenuOption::EnableGlowEffect)) { - DependencyManager::get()->prepare(renderArgs); - } else { - auto primaryFBO = DependencyManager::get()->getPrimaryFramebuffer(); - glBindFramebuffer(GL_FRAMEBUFFER, gpu::GLBackend::getFramebufferID(primaryFBO)); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } - + auto primaryFBO = DependencyManager::get()->getPrimaryFramebuffer(); + glBindFramebuffer(GL_FRAMEBUFFER, gpu::GLBackend::getFramebufferID(primaryFBO)); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glPushMatrix(); @@ -723,15 +716,8 @@ void OculusManager::display(QGLWidget * glCanvas, RenderArgs* renderArgs, const glPopMatrix(); gpu::FramebufferPointer finalFbo; - //Bind the output texture from the glow shader. If glow effect is disabled, we just grab the texture - if (Menu::getInstance()->isOptionChecked(MenuOption::EnableGlowEffect)) { - //Full texture viewport for glow effect - glViewport(0, 0, _renderTargetSize.w, _renderTargetSize.h); - finalFbo = DependencyManager::get()->render(renderArgs); - } else { - finalFbo = DependencyManager::get()->getPrimaryFramebuffer(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - } + finalFbo = DependencyManager::get()->getPrimaryFramebuffer(); + glBindFramebuffer(GL_FRAMEBUFFER, 0); glMatrixMode(GL_PROJECTION); glPopMatrix(); @@ -824,7 +810,6 @@ glm::quat OculusManager::getOrientation() { return toGlm(trackingState.HeadPose.ThePose.Orientation); } -//Used to set the size of the glow framebuffers QSize OculusManager::getRenderTargetSize() { QSize rv; rv.setWidth(_renderTargetSize.w); diff --git a/interface/src/devices/TV3DManager.cpp b/interface/src/devices/TV3DManager.cpp index e945b5e79a..e9b28a3777 100644 --- a/interface/src/devices/TV3DManager.cpp +++ b/interface/src/devices/TV3DManager.cpp @@ -14,7 +14,6 @@ #include #include -#include #include "gpu/GLBackend.h" #include "Application.h" @@ -82,6 +81,9 @@ void TV3DManager::configureCamera(Camera& whichCamera, int screenWidth, int scre } void TV3DManager::display(RenderArgs* renderArgs, Camera& whichCamera) { + +#ifdef THIS_CURRENTLY_BROKEN_WAITING_FOR_DISPLAY_PLUGINS + double nearZ = DEFAULT_NEAR_CLIP; // near clipping plane double farZ = DEFAULT_FAR_CLIP; // far clipping plane @@ -94,6 +96,7 @@ void TV3DManager::display(RenderArgs* renderArgs, Camera& whichCamera) { int portalH = deviceSize.height(); + // FIXME - glow effect is removed, 3D TV mode broken until we get display plugins working DependencyManager::get()->prepare(renderArgs); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -128,6 +131,7 @@ void TV3DManager::display(RenderArgs* renderArgs, Camera& whichCamera) { glPopMatrix(); glDisable(GL_SCISSOR_TEST); + // FIXME - glow effect is removed, 3D TV mode broken until we get display plugins working auto finalFbo = DependencyManager::get()->render(renderArgs); auto fboSize = finalFbo->getSize(); // Get the ACTUAL device size for the BLIT @@ -142,6 +146,8 @@ void TV3DManager::display(RenderArgs* renderArgs, Camera& whichCamera) { // reset the viewport to how we started glViewport(0, 0, deviceSize.width(), deviceSize.height()); + +#endif } void TV3DManager::overrideOffAxisFrustum(float& left, float& right, float& bottom, float& top, float& nearVal, diff --git a/interface/src/ui/overlays/Cube3DOverlay.cpp b/interface/src/ui/overlays/Cube3DOverlay.cpp index 433a55e231..3455ce2e51 100644 --- a/interface/src/ui/overlays/Cube3DOverlay.cpp +++ b/interface/src/ui/overlays/Cube3DOverlay.cpp @@ -12,7 +12,6 @@ #include "InterfaceConfig.h" #include -#include #include #include diff --git a/interface/src/ui/overlays/Line3DOverlay.cpp b/interface/src/ui/overlays/Line3DOverlay.cpp index 0abc86d7ad..4e2763d260 100644 --- a/interface/src/ui/overlays/Line3DOverlay.cpp +++ b/interface/src/ui/overlays/Line3DOverlay.cpp @@ -11,7 +11,6 @@ // include this before QGLWidget, which includes an earlier version of OpenGL #include "InterfaceConfig.h" -#include #include #include diff --git a/interface/src/ui/overlays/LocalModelsOverlay.cpp b/interface/src/ui/overlays/LocalModelsOverlay.cpp index 6e0b53f0c2..06b27f8f22 100644 --- a/interface/src/ui/overlays/LocalModelsOverlay.cpp +++ b/interface/src/ui/overlays/LocalModelsOverlay.cpp @@ -9,8 +9,6 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include - #include "Application.h" #include "LocalModelsOverlay.h" @@ -32,11 +30,7 @@ void LocalModelsOverlay::update(float deltatime) { void LocalModelsOverlay::render(RenderArgs* args) { if (_visible) { - float glowLevel = getGlowLevel(); - Glower* glower = NULL; - if (glowLevel > 0.0f) { - glower = new Glower(glowLevel); - } + float glowLevel = getGlowLevel(); // FIXME, glowing removed for now auto batch = args ->_batch; Application* app = Application::getInstance(); @@ -47,10 +41,6 @@ void LocalModelsOverlay::render(RenderArgs* args) { _entityTreeRenderer->render(args); transform.setTranslation(oldTranslation); batch->setViewTransform(transform); - - if (glower) { - delete glower; - } } } diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 4476518efe..5a399aef76 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -12,8 +12,6 @@ #include "ModelOverlay.h" #include -#include - ModelOverlay::ModelOverlay() : _model(), diff --git a/interface/src/ui/overlays/Rectangle3DOverlay.cpp b/interface/src/ui/overlays/Rectangle3DOverlay.cpp index dfe5a3ad74..0ab9174da8 100644 --- a/interface/src/ui/overlays/Rectangle3DOverlay.cpp +++ b/interface/src/ui/overlays/Rectangle3DOverlay.cpp @@ -14,7 +14,6 @@ #include "Rectangle3DOverlay.h" #include -#include #include Rectangle3DOverlay::Rectangle3DOverlay() : diff --git a/interface/src/ui/overlays/Sphere3DOverlay.cpp b/interface/src/ui/overlays/Sphere3DOverlay.cpp index 259fe98acf..8d751c73c5 100644 --- a/interface/src/ui/overlays/Sphere3DOverlay.cpp +++ b/interface/src/ui/overlays/Sphere3DOverlay.cpp @@ -11,7 +11,6 @@ // include this before QGLWidget, which includes an earlier version of OpenGL #include "InterfaceConfig.h" -#include #include #include "Sphere3DOverlay.h" diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 0abd5b21cb..43f3492091 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index cf602971c2..95147ef2b1 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -14,7 +14,6 @@ #include -#include #include #include #include @@ -169,7 +168,6 @@ void RenderableWebEntityItem::render(RenderArgs* args) { _webSurface->resize(QSize(dims.x, dims.y)); currentContext->makeCurrent(currentSurface); - Glower glow(0.0f); PerformanceTimer perfTimer("RenderableWebEntityItem::render"); Q_ASSERT(getType() == EntityTypes::Web); static const glm::vec2 texMin(0.0f), texMax(1.0f), topLeft(-0.5f), bottomRight(0.5f); diff --git a/libraries/render-utils/src/AmbientOcclusionEffect.cpp b/libraries/render-utils/src/AmbientOcclusionEffect.cpp index f58419ec6e..8a77d4090a 100644 --- a/libraries/render-utils/src/AmbientOcclusionEffect.cpp +++ b/libraries/render-utils/src/AmbientOcclusionEffect.cpp @@ -21,7 +21,6 @@ #include "AbstractViewStateInterface.h" #include "AmbientOcclusionEffect.h" -#include "GlowEffect.h" #include "ProgramObject.h" #include "RenderUtil.h" #include "TextureCache.h" @@ -107,7 +106,7 @@ void AmbientOcclusionEffect::render() { glBindTexture(GL_TEXTURE_2D, _rotationTextureID); // render with the occlusion shader to the secondary/tertiary buffer - auto freeFramebuffer = DependencyManager::get()->getFreeFramebuffer(); + auto freeFramebuffer = nullptr; // DependencyManager::get()->getFreeFramebuffer(); // FIXME glBindFramebuffer(GL_FRAMEBUFFER, gpu::GLBackend::getFramebufferID(freeFramebuffer)); float left, right, bottom, top, nearVal, farVal; @@ -150,7 +149,7 @@ void AmbientOcclusionEffect::render() { glEnable(GL_BLEND); glBlendFuncSeparate(GL_ZERO, GL_SRC_COLOR, GL_ZERO, GL_ONE); - auto freeFramebufferTexture = freeFramebuffer->getRenderBuffer(0); + auto freeFramebufferTexture = nullptr; // freeFramebuffer->getRenderBuffer(0); // FIXME glBindTexture(GL_TEXTURE_2D, gpu::GLBackend::getTextureID(freeFramebufferTexture)); _blurProgram->bind(); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 539dd02a78..6385041959 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -32,7 +32,6 @@ #include "AbstractViewStateInterface.h" #include "AnimationHandle.h" #include "DeferredLightingEffect.h" -#include "GlowEffect.h" #include "Model.h" #include "RenderUtilsLogging.h" @@ -2215,7 +2214,8 @@ void Model::pickPrograms(gpu::Batch& batch, RenderMode mode, bool translucent, f } if ((locations->glowIntensity > -1) && (mode != RenderArgs::SHADOW_RENDER_MODE)) { - GLBATCH(glUniform1f)(locations->glowIntensity, DependencyManager::get()->getIntensity()); + const float DEFAULT_GLOW_INTENSITY = 1.0f; // FIXME - glow is removed + GLBATCH(glUniform1f)(locations->glowIntensity, DEFAULT_GLOW_INTENSITY); } } diff --git a/tests/ui/src/main.cpp b/tests/ui/src/main.cpp index 1b0c7e0ab1..f5647bd176 100644 --- a/tests/ui/src/main.cpp +++ b/tests/ui/src/main.cpp @@ -131,7 +131,6 @@ public: EditEntitiesHelp, Enable3DTVMode, EnableCharacterController, - EnableGlowEffect, EnableVRMode, ExpandMyAvatarSimulateTiming, ExpandMyAvatarTiming, From c17794849d76fdb171b575448be12a4f60bfd9ae Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 15 Jul 2015 12:58:15 -0700 Subject: [PATCH 2/3] more GlowEctomy --- interface/src/Application.cpp | 3 - .../src/DeferredLightingEffect.cpp | 5 +- libraries/render-utils/src/GlowEffect.cpp | 225 ------------------ libraries/render-utils/src/GlowEffect.h | 97 -------- 4 files changed, 2 insertions(+), 328 deletions(-) delete mode 100644 libraries/render-utils/src/GlowEffect.cpp delete mode 100644 libraries/render-utils/src/GlowEffect.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 373610087b..b85297c3cf 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -98,8 +98,6 @@ #include #include -#include // FIXME - #include "Application.h" #include "AudioClient.h" #include "DiscoverabilityManager.h" @@ -270,7 +268,6 @@ bool setupEssentials(int& argc, char** argv) { auto geometryCache = DependencyManager::set(); auto scriptCache = DependencyManager::set(); auto soundCache = DependencyManager::set(); - auto glowEffect = DependencyManager::set(); // FIXME auto faceshift = DependencyManager::set(); auto audio = DependencyManager::set(); auto audioScope = DependencyManager::set(); diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index b2db089bbe..4737929cf6 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -18,7 +18,6 @@ #include "AbstractViewStateInterface.h" #include "DeferredLightingEffect.h" #include "GeometryCache.h" -#include "GlowEffect.h" #include "RenderUtil.h" #include "TextureCache.h" @@ -238,7 +237,7 @@ void DeferredLightingEffect::render(RenderArgs* args) { QSize framebufferSize = textureCache->getFrameBufferSize(); // binding the first framebuffer - auto freeFBO = DependencyManager::get()->getFreeFramebuffer(); + auto freeFBO = DependencyManager::get()->getSecondaryFramebuffer(); batch.setFramebuffer(freeFBO); batch.clearColorFramebuffer(freeFBO->getBufferMask(), glm::vec4(0.0f, 0.0f, 0.0f, 0.0f)); @@ -547,7 +546,7 @@ void DeferredLightingEffect::copyBack(RenderArgs* args) { auto textureCache = DependencyManager::get(); QSize framebufferSize = textureCache->getFrameBufferSize(); - auto freeFBO = DependencyManager::get()->getFreeFramebuffer(); + auto freeFBO = DependencyManager::get()->getSecondaryFramebuffer(); batch.setFramebuffer(textureCache->getPrimaryFramebuffer()); batch.setPipeline(_blitLightBuffer); diff --git a/libraries/render-utils/src/GlowEffect.cpp b/libraries/render-utils/src/GlowEffect.cpp deleted file mode 100644 index 2e8b58c6c2..0000000000 --- a/libraries/render-utils/src/GlowEffect.cpp +++ /dev/null @@ -1,225 +0,0 @@ -// -// GlowEffect.cpp -// interface/src/renderer -// -// Created by Andrzej Kapolka on 8/7/13. -// Copyright 2013 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -// include this before QOpenGLFramebufferObject, which includes an earlier version of OpenGL -#include - -#include -#include - -#include -#include - -#include "GlowEffect.h" -#include "ProgramObject.h" -#include "RenderUtil.h" -#include "TextureCache.h" -#include "RenderUtilsLogging.h" - -#include "gpu/GLBackend.h" - -GlowEffect::GlowEffect() - : _initialized(false), - _isOddFrame(false), - _isFirstFrame(true), - _intensity(0.0f), - _enabled(false) { -} - -GlowEffect::~GlowEffect() { - if (_initialized) { - delete _addProgram; - delete _horizontalBlurProgram; - delete _verticalBlurAddProgram; - delete _verticalBlurProgram; - delete _addSeparateProgram; - delete _diffuseProgram; - } -} - -gpu::FramebufferPointer GlowEffect::getFreeFramebuffer() const { - return (_isOddFrame ? - DependencyManager::get()->getSecondaryFramebuffer(): - DependencyManager::get()->getTertiaryFramebuffer()); -} - -static ProgramObject* createProgram(const QString& name) { - ProgramObject* program = new ProgramObject(); - program->addShaderFromSourceFile(QGLShader::Fragment, PathUtils::resourcesPath() + "shaders/" + name + ".frag"); - program->link(); - - program->bind(); - program->setUniformValue("originalTexture", 0); - program->release(); - - return program; -} - -void GlowEffect::init(bool enabled) { - if (_initialized) { - qCDebug(renderutils, "[ERROR] GlowEffeect is already initialized."); - return; - } - - _addProgram = createProgram("glow_add"); - _horizontalBlurProgram = createProgram("horizontal_blur"); - _verticalBlurAddProgram = createProgram("vertical_blur_add"); - _verticalBlurProgram = createProgram("vertical_blur"); - _addSeparateProgram = createProgram("glow_add_separate"); - _diffuseProgram = createProgram("diffuse"); - - _verticalBlurAddProgram->bind(); - _verticalBlurAddProgram->setUniformValue("horizontallyBlurredTexture", 1); - _verticalBlurAddProgram->release(); - - _addSeparateProgram->bind(); - _addSeparateProgram->setUniformValue("blurredTexture", 1); - _addSeparateProgram->release(); - - _diffuseProgram->bind(); - _diffuseProgram->setUniformValue("diffusedTexture", 1); - _diffuseProgram->release(); - - _diffusionScaleLocation = _diffuseProgram->uniformLocation("diffusionScale"); - - _initialized = true; - _enabled = enabled; -} - -void GlowEffect::prepare(RenderArgs* renderArgs) { - auto primaryFBO = DependencyManager::get()->getPrimaryFramebuffer(); - GLuint fbo = gpu::GLBackend::getFramebufferID(primaryFBO); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - _isEmpty = true; - _isOddFrame = !_isOddFrame; -} - -void GlowEffect::begin(RenderArgs* renderArgs, float intensity) { - // store the current intensity and add the new amount - _intensityStack.push(_intensity); - glBlendColor(0.0f, 0.0f, 0.0f, _intensity += intensity); - _isEmpty &= (_intensity == 0.0f); -} - -void GlowEffect::end(RenderArgs* renderArgs) { - // restore the saved intensity - glBlendColor(0.0f, 0.0f, 0.0f, _intensity = _intensityStack.pop()); -} - -gpu::FramebufferPointer GlowEffect::render(RenderArgs* renderArgs) { - PerformanceTimer perfTimer("glowEffect"); - - auto textureCache = DependencyManager::get(); - - auto primaryFBO = gpu::GLBackend::getFramebufferID(textureCache->getPrimaryFramebuffer()); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - - glBindTexture(GL_TEXTURE_2D, textureCache->getPrimaryColorTextureID()); - auto framebufferSize = textureCache->getFrameBufferSize(); - - glPushMatrix(); - glLoadIdentity(); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - glDisable(GL_BLEND); - glDisable(GL_DEPTH_TEST); - glDepthMask(GL_FALSE); - - gpu::FramebufferPointer destFBO = textureCache->getSecondaryFramebuffer(); - if (!_enabled || _isEmpty) { - // copy the primary to the screen - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, gpu::GLBackend::getFramebufferID(destFBO)); - glBindFramebuffer(GL_READ_FRAMEBUFFER, primaryFBO); - glBlitFramebuffer( - 0, 0, framebufferSize.width(), framebufferSize.height(), - 0, 0, framebufferSize.width(), framebufferSize.height(), - GL_COLOR_BUFFER_BIT, GL_NEAREST); - } else { - // diffuse into the secondary/tertiary (alternating between frames) - auto oldDiffusedFBO = - textureCache->getSecondaryFramebuffer(); - auto newDiffusedFBO = - textureCache->getTertiaryFramebuffer(); - if (_isOddFrame) { - qSwap(oldDiffusedFBO, newDiffusedFBO); - } - glBindFramebuffer(GL_FRAMEBUFFER, gpu::GLBackend::getFramebufferID(newDiffusedFBO)); - - if (_isFirstFrame) { - glClear(GL_COLOR_BUFFER_BIT); - - } else { - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, gpu::GLBackend::getTextureID(oldDiffusedFBO->getRenderBuffer(0))); - - _diffuseProgram->bind(); - - _diffuseProgram->setUniformValue(_diffusionScaleLocation, 1.0f / framebufferSize.width(), 1.0f / framebufferSize.height()); - - renderFullscreenQuad(); - - _diffuseProgram->release(); - } - - destFBO = oldDiffusedFBO; - - glBindFramebuffer(GL_FRAMEBUFFER, 0); - // add diffused texture to the primary - glBindTexture(GL_TEXTURE_2D, gpu::GLBackend::getTextureID(newDiffusedFBO->getRenderBuffer(0))); - - glBindFramebuffer(GL_FRAMEBUFFER, gpu::GLBackend::getFramebufferID(destFBO)); - glViewport(0, 0, framebufferSize.width(), framebufferSize.height()); - _addSeparateProgram->bind(); - renderFullscreenQuad(); - _addSeparateProgram->release(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - - glBindTexture(GL_TEXTURE_2D, 0); - glActiveTexture(GL_TEXTURE0); - } - - glPopMatrix(); - - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - glEnable(GL_BLEND); - glEnable(GL_DEPTH_TEST); - glDepthMask(GL_TRUE); - glBindTexture(GL_TEXTURE_2D, 0); - - _isFirstFrame = false; - - return destFBO; -} - -void GlowEffect::toggleGlowEffect(bool enabled) { - _enabled = enabled; -} - -Glower::Glower(float amount) { - RenderArgs renderArgs; - DependencyManager::get()->begin(&renderArgs, amount); -} -Glower::Glower(RenderArgs* renderArgs, float amount) : _renderArgs(renderArgs) { - DependencyManager::get()->begin(_renderArgs, amount); -} - -Glower::~Glower() { - DependencyManager::get()->end(_renderArgs); -} - diff --git a/libraries/render-utils/src/GlowEffect.h b/libraries/render-utils/src/GlowEffect.h deleted file mode 100644 index 23a21a9575..0000000000 --- a/libraries/render-utils/src/GlowEffect.h +++ /dev/null @@ -1,97 +0,0 @@ -// -// GlowEffect.h -// interface/src/renderer -// -// Created by Andrzej Kapolka on 8/7/13. -// Copyright 2013 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_GlowEffect_h -#define hifi_GlowEffect_h - -#include -#include - -#include "RenderArgs.h" - -#include -#include -#include - -#include - -class ProgramObject; - -/// A generic full screen glow effect. -class GlowEffect : public QObject, public Dependency { - Q_OBJECT - SINGLETON_DEPENDENCY - -public: - - /// Returns a pointer to the framebuffer object that the glow effect is *not* using for persistent state - /// (either the secondary or the tertiary). - gpu::FramebufferPointer getFreeFramebuffer() const; - - void init(bool enabled); - - /// Prepares the glow effect for rendering the current frame. To be called before rendering the scene. - void prepare(RenderArgs* renderArgs); - - /// Starts using the glow effect. - /// \param intensity the desired glow intensity, from zero to one - void begin(RenderArgs* renderArgs, float intensity = 1.0f); - - /// Stops using the glow effect. - void end(RenderArgs* renderArgs); - - /// Returns the current glow intensity. - float getIntensity() const { return _intensity; } - - /// Renders the glow effect. To be called after rendering the scene. - /// \param toTexture whether to render to a texture, rather than to the frame buffer - /// \return the framebuffer object to which we rendered, or NULL if to the frame buffer - gpu::FramebufferPointer render(RenderArgs* renderArgs); - -public slots: - void toggleGlowEffect(bool enabled); - -private: - GlowEffect(); - virtual ~GlowEffect(); - - bool _initialized; - - ProgramObject* _addProgram; - ProgramObject* _horizontalBlurProgram; - ProgramObject* _verticalBlurAddProgram; - ProgramObject* _verticalBlurProgram; - ProgramObject* _addSeparateProgram; - ProgramObject* _diffuseProgram; - int _diffusionScaleLocation; - - bool _isEmpty; ///< set when nothing in the scene is currently glowing - bool _isOddFrame; ///< controls the alternation between texture targets in diffuse add mode - bool _isFirstFrame; ///< for persistent modes, notes whether this is the first frame rendered - - float _intensity; - QStack _intensityStack; - bool _enabled; -}; - -/// RAII-style glow handler. Applies glow when in scope. -class Glower { -public: - - Glower(float amount = 1.0f); - Glower(RenderArgs* renderArgs, float amount = 1.0f); - ~Glower(); - -private: - RenderArgs* _renderArgs; -}; - -#endif // hifi_GlowEffect_h From 849b584596c095e25c56c6d49fea90302a8cf939 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 15 Jul 2015 13:16:38 -0700 Subject: [PATCH 3/3] more GlowEctomy --- interface/src/Menu.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 7fd1e81edc..8b14830c2d 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -9,6 +9,9 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +// include this before QGLWidget, which includes an earlier version of OpenGL +#include "InterfaceConfig.h" + #include #include #include