From fc1e1ecfc04fdc3475fb990c3e19f29e343b978d Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Tue, 16 Dec 2014 11:27:44 -0800 Subject: [PATCH] move DeferredLightingEffect and AmbientOcclusionEffect to libraries, make them DependencyManager enabled --- interface/src/Application.cpp | 13 +++++--- interface/src/Application.h | 7 ---- interface/src/MetavoxelSystem.cpp | 9 ++--- interface/src/avatar/Avatar.cpp | 3 +- .../src/entities/RenderableBoxEntityItem.cpp | 7 ++-- .../entities/RenderableLightEntityItem.cpp | 33 ++++++++++--------- .../entities/RenderableModelEntityItem.cpp | 7 ++-- .../entities/RenderableSphereEntityItem.cpp | 5 +-- interface/src/renderer/Model.cpp | 3 +- interface/src/ui/overlays/Cube3DOverlay.cpp | 7 ++-- interface/src/ui/overlays/Sphere3DOverlay.cpp | 1 - .../src}/AmbientOcclusionEffect.cpp | 10 +++--- .../src}/AmbientOcclusionEffect.h | 9 +++-- .../src}/DeferredLightingEffect.cpp | 20 ++++++++--- .../src}/DeferredLightingEffect.h | 11 +++++-- 15 files changed, 84 insertions(+), 61 deletions(-) rename {interface/src/renderer => libraries/render-utils/src}/AmbientOcclusionEffect.cpp (98%) rename {interface/src/renderer => libraries/render-utils/src}/AmbientOcclusionEffect.h (81%) rename {interface/src/renderer => libraries/render-utils/src}/DeferredLightingEffect.cpp (98%) rename {interface/src/renderer => libraries/render-utils/src}/DeferredLightingEffect.h (94%) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 57b3b57224..c9309616ae 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -54,7 +54,9 @@ #include #include +#include #include +#include #include #include #include @@ -110,6 +112,7 @@ #include "ui/TextRenderer.h" + using namespace std; // Starfield information @@ -1914,8 +1917,8 @@ void Application::init() { _environment.init(); - _deferredLightingEffect.init(this); - _ambientOcclusionEffect.init(this); + DependencyManager::get()->init(this); + DependencyManager::get()->init(this); // TODO: move _myAvatar out of Application. Move relevant code to MyAvataar or AvatarManager _avatarManager.init(); @@ -3070,7 +3073,7 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly, RenderAr glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); - _deferredLightingEffect.prepare(); + DependencyManager::get()->prepare(); if (!selfAvatarOnly) { // draw a red sphere @@ -3113,7 +3116,7 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly, RenderAr PerformanceTimer perfTimer("ambientOcclusion"); PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "Application::displaySide() ... AmbientOcclusion..."); - _ambientOcclusionEffect.render(); + DependencyManager::get()->render(); } } @@ -3130,7 +3133,7 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly, RenderAr { PROFILE_RANGE("DeferredLighting"); PerformanceTimer perfTimer("lighting"); - _deferredLightingEffect.render(); + DependencyManager::get()->render(); } { diff --git a/interface/src/Application.h b/interface/src/Application.h index 9ca363254a..6b5bcc0770 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -62,8 +62,6 @@ #include "devices/PrioVR.h" #include "devices/SixenseManager.h" #include "entities/EntityTreeRenderer.h" -#include "renderer/AmbientOcclusionEffect.h" -#include "renderer/DeferredLightingEffect.h" #include "scripting/ControllerScriptingInterface.h" #include "ui/BandwidthDialog.h" #include "ui/BandwidthMeter.h" @@ -250,7 +248,6 @@ public: ToolWindow* getToolWindow() { return _toolWindow ; } - DeferredLightingEffect* getDeferredLightingEffect() { return &_deferredLightingEffect; } ControllerScriptingInterface* getControllerScriptingInterface() { return &_controllerScriptingInterface; } AvatarManager& getAvatarManager() { return _avatarManager; } @@ -569,10 +566,6 @@ private: QSet _keysPressed; - - DeferredLightingEffect _deferredLightingEffect; - AmbientOcclusionEffect _ambientOcclusionEffect; - Audio _audio; bool _enableProcessVoxelsThread; diff --git a/interface/src/MetavoxelSystem.cpp b/interface/src/MetavoxelSystem.cpp index 824f1e3313..d34bc4a594 100644 --- a/interface/src/MetavoxelSystem.cpp +++ b/interface/src/MetavoxelSystem.cpp @@ -21,6 +21,7 @@ #include +#include #include #include @@ -470,7 +471,7 @@ void MetavoxelSystem::render() { glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glNormal3f(0.0f, 1.0f, 0.0f); - Application::getInstance()->getDeferredLightingEffect()->bindSimpleProgram(); + DependencyManager::get()->bindSimpleProgram(); foreach (const HermiteBatch& batch, _hermiteBatches) { batch.vertexBuffer->bind(); @@ -482,7 +483,7 @@ void MetavoxelSystem::render() { batch.vertexBuffer->release(); } - Application::getInstance()->getDeferredLightingEffect()->releaseSimpleProgram(); + DependencyManager::get()->releaseSimpleProgram(); glDisableClientState(GL_VERTEX_ARRAY); @@ -1981,7 +1982,7 @@ void SphereRenderer::render(const MetavoxelLOD& lod, bool contained, bool cursor glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - Application::getInstance()->getDeferredLightingEffect()->renderSolidSphere(sphere->getScale(), 32, 32); + DependencyManager::get()->renderSolidSphere(sphere->getScale(), 32, 32); glPopMatrix(); } @@ -2002,7 +2003,7 @@ void CuboidRenderer::render(const MetavoxelLOD& lod, bool contained, bool cursor glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); glScalef(1.0f, cuboid->getAspectY(), cuboid->getAspectZ()); - Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(cuboid->getScale() * 2.0f); + DependencyManager::get()->renderSolidCube(cuboid->getScale() * 2.0f); glPopMatrix(); } diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 4b7c5dfdf3..51fde3df43 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -364,7 +365,7 @@ void Avatar::render(const glm::vec3& cameraPosition, RenderMode renderMode, bool glm::quat orientation = getOrientation(); foreach (const AvatarManager::LocalLight& light, Application::getInstance()->getAvatarManager().getLocalLights()) { glm::vec3 direction = orientation * light.direction; - Application::getInstance()->getDeferredLightingEffect()->addSpotLight(position - direction * distance, + DependencyManager::get()->addSpotLight(position - direction * distance, distance * 2.0f, glm::vec3(), light.color, light.color, 1.0f, 0.5f, 0.0f, direction, LIGHT_EXPONENT, LIGHT_CUTOFF); } diff --git a/interface/src/entities/RenderableBoxEntityItem.cpp b/interface/src/entities/RenderableBoxEntityItem.cpp index 1cc1f72e93..f7b403bff2 100644 --- a/interface/src/entities/RenderableBoxEntityItem.cpp +++ b/interface/src/entities/RenderableBoxEntityItem.cpp @@ -16,6 +16,7 @@ #include "InterfaceConfig.h" #include +#include #include #include @@ -53,7 +54,7 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { glm::vec3 positionToCenter = center - position; glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); glScalef(dimensions.x, dimensions.y, dimensions.z); - Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(1.0f); + DependencyManager::get()->renderSolidCube(1.0f); glPopMatrix(); glPopMatrix(); } else { @@ -90,7 +91,7 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { glColor4f(getColor()[RED_INDEX] / MAX_COLOR, getColor()[GREEN_INDEX] / MAX_COLOR, getColor()[BLUE_INDEX] / MAX_COLOR, getLocalRenderAlpha()); - Application::getInstance()->getDeferredLightingEffect()->bindSimpleProgram(); + DependencyManager::get()->bindSimpleProgram(); glPushMatrix(); glTranslatef(position.x, position.y, position.z); @@ -105,7 +106,7 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { glPopMatrix(); glPopMatrix(); - Application::getInstance()->getDeferredLightingEffect()->releaseSimpleProgram(); + DependencyManager::get()->releaseSimpleProgram(); glDisableClientState(GL_VERTEX_ARRAY); // disable vertex arrays glDisableClientState(GL_NORMAL_ARRAY); diff --git a/interface/src/entities/RenderableLightEntityItem.cpp b/interface/src/entities/RenderableLightEntityItem.cpp index 77dbb5da0b..48996d5b4c 100644 --- a/interface/src/entities/RenderableLightEntityItem.cpp +++ b/interface/src/entities/RenderableLightEntityItem.cpp @@ -15,6 +15,7 @@ #include "InterfaceConfig.h" +#include #include #include @@ -65,30 +66,30 @@ void RenderableLightEntityItem::render(RenderArgs* args) { if (!disableLights) { if (_isSpotlight) { - Application::getInstance()->getDeferredLightingEffect()->addSpotLight(position, largestDiameter / 2.0f, + DependencyManager::get()->addSpotLight(position, largestDiameter / 2.0f, ambient, diffuse, specular, constantAttenuation, linearAttenuation, quadraticAttenuation, direction, exponent, cutoff); } else { - Application::getInstance()->getDeferredLightingEffect()->addPointLight(position, largestDiameter / 2.0f, + DependencyManager::get()->addPointLight(position, largestDiameter / 2.0f, ambient, diffuse, specular, constantAttenuation, linearAttenuation, quadraticAttenuation); } } - bool wantDebug = false; - if (wantDebug) { - glColor4f(diffuseR, diffuseG, diffuseB, 1.0f); - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - glm::vec3 axis = glm::axis(rotation); - glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - glPushMatrix(); - glm::vec3 positionToCenter = center - position; - glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); - glScalef(dimensions.x, dimensions.y, dimensions.z); - Application::getInstance()->getDeferredLightingEffect()->renderWireSphere(0.5f, 15, 15); - glPopMatrix(); +#ifdef WANT_DEBUG + glColor4f(diffuseR, diffuseG, diffuseB, 1.0f); + glPushMatrix(); + glTranslatef(position.x, position.y, position.z); + glm::vec3 axis = glm::axis(rotation); + glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); + glPushMatrix(); + glm::vec3 positionToCenter = center - position; + glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); + + glScalef(dimensions.x, dimensions.y, dimensions.z); + DependencyManager::get()->renderWireSphere(0.5f, 15, 15); glPopMatrix(); - } + glPopMatrix(); +#endif }; bool RenderableLightEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, diff --git a/interface/src/entities/RenderableModelEntityItem.cpp b/interface/src/entities/RenderableModelEntityItem.cpp index 080162dc16..13bc097f27 100644 --- a/interface/src/entities/RenderableModelEntityItem.cpp +++ b/interface/src/entities/RenderableModelEntityItem.cpp @@ -16,6 +16,7 @@ #include "InterfaceConfig.h" #include +#include #include #include @@ -191,7 +192,7 @@ void RenderableModelEntityItem::render(RenderArgs* args) { glColor3ub(getColor()[RED_INDEX],getColor()[GREEN_INDEX],getColor()[BLUE_INDEX]); glPushMatrix(); glTranslatef(position.x, position.y, position.z); - Application::getInstance()->getDeferredLightingEffect()->renderWireCube(size); + DependencyManager::get()->renderWireCube(size); glPopMatrix(); } } else { @@ -199,7 +200,7 @@ void RenderableModelEntityItem::render(RenderArgs* args) { glColor3ub(getColor()[RED_INDEX],getColor()[GREEN_INDEX],getColor()[BLUE_INDEX]); glPushMatrix(); glTranslatef(position.x, position.y, position.z); - Application::getInstance()->getDeferredLightingEffect()->renderWireCube(size); + DependencyManager::get()->renderWireCube(size); glPopMatrix(); } } @@ -208,7 +209,7 @@ void RenderableModelEntityItem::render(RenderArgs* args) { glColor3ub(getColor()[RED_INDEX],getColor()[GREEN_INDEX],getColor()[BLUE_INDEX]); glPushMatrix(); glTranslatef(position.x, position.y, position.z); - Application::getInstance()->getDeferredLightingEffect()->renderWireCube(size); + DependencyManager::get()->renderWireCube(size); glPopMatrix(); } } diff --git a/interface/src/entities/RenderableSphereEntityItem.cpp b/interface/src/entities/RenderableSphereEntityItem.cpp index d561670be8..db10edca73 100644 --- a/interface/src/entities/RenderableSphereEntityItem.cpp +++ b/interface/src/entities/RenderableSphereEntityItem.cpp @@ -15,6 +15,8 @@ #include "InterfaceConfig.h" +#include +#include #include #include @@ -23,7 +25,6 @@ #include "EntityTreeRenderer.h" #include "RenderableSphereEntityItem.h" - EntityItem* RenderableSphereEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { return new RenderableSphereEntityItem(entityID, properties); } @@ -51,7 +52,7 @@ void RenderableSphereEntityItem::render(RenderArgs* args) { glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); glScalef(dimensions.x, dimensions.y, dimensions.z); - Application::getInstance()->getDeferredLightingEffect()->renderSolidSphere(0.5f, 15, 15); + DependencyManager::get()->renderSolidSphere(0.5f, 15, 15); glPopMatrix(); glPopMatrix(); }; diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 877f43a563..15db8e4361 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -493,7 +494,7 @@ bool Model::renderTriangleProxies() { glPushMatrix(); glTranslatef(center.x, center.y, center.z); glScalef(dimensions.x, dimensions.y, dimensions.z); - Application::getInstance()->getDeferredLightingEffect()->renderWireCube(1.0f); + DependencyManager::get()->renderWireCube(1.0f); glPopMatrix(); } diff --git a/interface/src/ui/overlays/Cube3DOverlay.cpp b/interface/src/ui/overlays/Cube3DOverlay.cpp index f518c309a1..c61d68f05d 100644 --- a/interface/src/ui/overlays/Cube3DOverlay.cpp +++ b/interface/src/ui/overlays/Cube3DOverlay.cpp @@ -13,6 +13,7 @@ #include +#include #include #include #include @@ -75,7 +76,7 @@ void Cube3DOverlay::render(RenderArgs* args) { glPushMatrix(); glColor4f(1.0f, 1.0f, 1.0f, alpha); glScalef(dimensions.x * _borderSize, dimensions.y * _borderSize, dimensions.z * _borderSize); - Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(1.0f); + DependencyManager::get()->renderSolidCube(1.0f); glPopMatrix(); glDepthMask(GL_TRUE); } @@ -83,7 +84,7 @@ void Cube3DOverlay::render(RenderArgs* args) { glPushMatrix(); glColor4f(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha); glScalef(dimensions.x, dimensions.y, dimensions.z); - Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(1.0f); + DependencyManager::get()->renderSolidCube(1.0f); glPopMatrix(); } else { glLineWidth(_lineWidth); @@ -117,7 +118,7 @@ void Cube3DOverlay::render(RenderArgs* args) { } else { glScalef(dimensions.x, dimensions.y, dimensions.z); - Application::getInstance()->getDeferredLightingEffect()->renderWireCube(1.0f); + DependencyManager::get()->renderWireCube(1.0f); } } glPopMatrix(); diff --git a/interface/src/ui/overlays/Sphere3DOverlay.cpp b/interface/src/ui/overlays/Sphere3DOverlay.cpp index eb95672399..522902194f 100644 --- a/interface/src/ui/overlays/Sphere3DOverlay.cpp +++ b/interface/src/ui/overlays/Sphere3DOverlay.cpp @@ -62,7 +62,6 @@ void Sphere3DOverlay::render(RenderArgs* args) { glm::vec3 positionToCenter = center - position; glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); glScalef(dimensions.x, dimensions.y, dimensions.z); - //Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(1.0f); if (_isSolid) { DependencyManager::get()->renderSphere(1.0f, SLICES, SLICES); } else { diff --git a/interface/src/renderer/AmbientOcclusionEffect.cpp b/libraries/render-utils/src/AmbientOcclusionEffect.cpp similarity index 98% rename from interface/src/renderer/AmbientOcclusionEffect.cpp rename to libraries/render-utils/src/AmbientOcclusionEffect.cpp index 4362d21645..b9289204c7 100644 --- a/interface/src/renderer/AmbientOcclusionEffect.cpp +++ b/libraries/render-utils/src/AmbientOcclusionEffect.cpp @@ -10,20 +10,20 @@ // // include this before QOpenGLFramebufferObject, which includes an earlier version of OpenGL -#include "InterfaceConfig.h" +#include #include #include -#include #include -#include -#include #include -#include #include "AmbientOcclusionEffect.h" +#include "GlowEffect.h" +#include "ProgramObject.h" +#include "RenderUtil.h" +#include "TextureCache.h" const int ROTATION_WIDTH = 4; const int ROTATION_HEIGHT = 4; diff --git a/interface/src/renderer/AmbientOcclusionEffect.h b/libraries/render-utils/src/AmbientOcclusionEffect.h similarity index 81% rename from interface/src/renderer/AmbientOcclusionEffect.h rename to libraries/render-utils/src/AmbientOcclusionEffect.h index 444b76a3c9..1ee7269480 100644 --- a/interface/src/renderer/AmbientOcclusionEffect.h +++ b/libraries/render-utils/src/AmbientOcclusionEffect.h @@ -12,19 +12,24 @@ #ifndef hifi_AmbientOcclusionEffect_h #define hifi_AmbientOcclusionEffect_h -#include +#include + +#include "ViewStateInterface.h" class ProgramObject; /// A screen space ambient occlusion effect. See John Chapman's tutorial at /// http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html for reference. -class AmbientOcclusionEffect { +class AmbientOcclusionEffect: public DependencyManager::Dependency { public: void init(ViewStateInterface* viewState); void render(); private: + AmbientOcclusionEffect() {} + virtual ~AmbientOcclusionEffect() {} + friend class DependencyManager; ProgramObject* _occlusionProgram; int _nearLocation; diff --git a/interface/src/renderer/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp similarity index 98% rename from interface/src/renderer/DeferredLightingEffect.cpp rename to libraries/render-utils/src/DeferredLightingEffect.cpp index d3145b9d5d..ff2df95746 100644 --- a/interface/src/renderer/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -10,18 +10,28 @@ // // include this before QOpenGLFramebufferObject, which includes an earlier version of OpenGL -#include "InterfaceConfig.h" +#include + + +// TODO: remove these once we migrate away from GLUT calls +#if defined(__APPLE__) +#include +#else +#include +#endif #include -#include #include -#include #include -#include -#include + #include "DeferredLightingEffect.h" +#include "GeometryCache.h" +#include "GlowEffect.h" +#include "RenderUtil.h" +#include "TextureCache.h" + void DeferredLightingEffect::init(ViewStateInterface* viewState) { _viewState = viewState; diff --git a/interface/src/renderer/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h similarity index 94% rename from interface/src/renderer/DeferredLightingEffect.h rename to libraries/render-utils/src/DeferredLightingEffect.h index 40182e0917..5dcd7d35f4 100644 --- a/interface/src/renderer/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -14,14 +14,16 @@ #include -#include +#include #include -#include + +#include "ProgramObject.h" +#include "ViewStateInterface.h" class PostLightingRenderable; /// Handles deferred lighting for the bits that require it (voxels, metavoxels...) -class DeferredLightingEffect { +class DeferredLightingEffect: public DependencyManager::Dependency { public: void init(ViewStateInterface* viewState); @@ -69,6 +71,9 @@ public: void render(); private: + DeferredLightingEffect() { } + virtual ~DeferredLightingEffect() { } + friend class DependencyManager; class LightLocations { public: