From 11b44000998e222f3a2f523da63d58077a28a403 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 18 Dec 2014 11:20:17 -0800 Subject: [PATCH] move all glut-ness to geometry cache --- interface/src/Application.cpp | 2 +- interface/src/avatar/Hand.cpp | 2 +- interface/src/ui/MetavoxelEditor.cpp | 6 +- interface/src/ui/NodeBounds.cpp | 4 +- interface/src/ui/overlays/Sphere3DOverlay.cpp | 6 +- interface/src/voxels/VoxelFade.cpp | 3 +- .../src/RenderableBoxEntityItem.cpp | 78 +++---------------- .../src/DeferredLightingEffect.cpp | 6 +- .../render-utils/src/DeferredLightingEffect.h | 3 +- libraries/render-utils/src/GeometryCache.cpp | 10 +++ libraries/render-utils/src/GeometryCache.h | 2 + 11 files changed, 37 insertions(+), 85 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4df23d2f7e..577f830495 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3575,7 +3575,7 @@ void Application::renderViewFrustum(ViewFrustum& viewFrustum) { glPushMatrix(); glColor4f(1, 1, 0, 1); glTranslatef(position.x, position.y, position.z); // where we actually want it! - glutWireSphere(keyholeRadius, 20, 20); + DependencyManager::get()->renderSphere(keyholeRadius, 20, 20, false); glPopMatrix(); } } diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index 91d59ae2fa..0ea0d1b725 100644 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -153,7 +153,7 @@ void Hand::renderHandTargets(bool isMine) { const float collisionRadius = 0.05f; glColor4f(0.5f,0.5f,0.5f, alpha); - glutWireSphere(collisionRadius, 10.0f, 10.0f); + DependencyManager::get()->renderSphere(collisionRadius, 10, 10, false); glPopMatrix(); } } diff --git a/interface/src/ui/MetavoxelEditor.cpp b/interface/src/ui/MetavoxelEditor.cpp index f0516ab955..1a440570b7 100644 --- a/interface/src/ui/MetavoxelEditor.cpp +++ b/interface/src/ui/MetavoxelEditor.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -492,12 +493,11 @@ void BoxTool::render() { glColor4f(GRID_BRIGHTNESS, GRID_BRIGHTNESS, GRID_BRIGHTNESS, BOX_ALPHA); } glEnable(GL_CULL_FACE); - glutSolidCube(1.0); + DependencyManager::get()->renderSolidCube(1.0f); glDisable(GL_CULL_FACE); } glColor3f(GRID_BRIGHTNESS, GRID_BRIGHTNESS, GRID_BRIGHTNESS); - glutWireCube(1.0); - + DependencyManager::get()->renderWireCube(1.0f); glPopMatrix(); } diff --git a/interface/src/ui/NodeBounds.cpp b/interface/src/ui/NodeBounds.cpp index b0d3ddd14f..c529f6bbf3 100644 --- a/interface/src/ui/NodeBounds.cpp +++ b/interface/src/ui/NodeBounds.cpp @@ -12,6 +12,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include + #include "Application.h" #include "Util.h" @@ -132,7 +134,7 @@ void NodeBounds::draw() { getColorForNodeType(selectedNode->getType(), red, green, blue); glColor4f(red, green, blue, 0.2f); - glutSolidCube(1.0); + DependencyManager::get()->renderSolidCube(1.0f); glPopMatrix(); diff --git a/interface/src/ui/overlays/Sphere3DOverlay.cpp b/interface/src/ui/overlays/Sphere3DOverlay.cpp index 522902194f..3e30ec033d 100644 --- a/interface/src/ui/overlays/Sphere3DOverlay.cpp +++ b/interface/src/ui/overlays/Sphere3DOverlay.cpp @@ -62,11 +62,7 @@ void Sphere3DOverlay::render(RenderArgs* args) { glm::vec3 positionToCenter = center - position; glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); glScalef(dimensions.x, dimensions.y, dimensions.z); - if (_isSolid) { - DependencyManager::get()->renderSphere(1.0f, SLICES, SLICES); - } else { - glutWireSphere(1.0f, SLICES, SLICES); - } + DependencyManager::get()->renderSphere(1.0f, SLICES, SLICES, _isSolid); glPopMatrix(); glPopMatrix(); diff --git a/interface/src/voxels/VoxelFade.cpp b/interface/src/voxels/VoxelFade.cpp index 367090291c..7bb3be67ab 100644 --- a/interface/src/voxels/VoxelFade.cpp +++ b/interface/src/voxels/VoxelFade.cpp @@ -12,6 +12,7 @@ #include "InterfaceConfig.h" #include +#include #include #include "Application.h" @@ -47,7 +48,7 @@ void VoxelFade::render() { voxelDetails.y + voxelDetails.s * 0.5f, voxelDetails.z + voxelDetails.s * 0.5f); glLineWidth(1.0f); - glutSolidCube(voxelDetails.s); + DependencyManager::get()->renderSolidCube(voxelDetails.s); glLineWidth(1.0f); glPopMatrix(); glEnable(GL_LIGHTING); diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp index bb0de0ce6d..276db09477 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp @@ -28,79 +28,23 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { glm::vec3 position = getPositionInMeters(); glm::vec3 center = getCenter() * (float)TREE_SCALE; glm::vec3 dimensions = getDimensions() * (float)TREE_SCALE; - glm::vec3 halfDimensions = dimensions / 2.0f; glm::quat rotation = getRotation(); - const bool useGlutCube = true; const float MAX_COLOR = 255.0f; - if (useGlutCube) { - glColor4f(getColor()[RED_INDEX] / MAX_COLOR, getColor()[GREEN_INDEX] / MAX_COLOR, - getColor()[BLUE_INDEX] / MAX_COLOR, getLocalRenderAlpha()); + glColor4f(getColor()[RED_INDEX] / MAX_COLOR, getColor()[GREEN_INDEX] / MAX_COLOR, + getColor()[BLUE_INDEX] / MAX_COLOR, getLocalRenderAlpha()); + 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(); - 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()->renderSolidCube(1.0f); - glPopMatrix(); + glm::vec3 positionToCenter = center - position; + glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); + glScalef(dimensions.x, dimensions.y, dimensions.z); + DependencyManager::get()->renderSolidCube(1.0f); glPopMatrix(); - } else { - static GLfloat vertices[] = { 1, 1, 1, -1, 1, 1, -1,-1, 1, 1,-1, 1, // v0,v1,v2,v3 (front) - 1, 1, 1, 1,-1, 1, 1,-1,-1, 1, 1,-1, // v0,v3,v4,v5 (right) - 1, 1, 1, 1, 1,-1, -1, 1,-1, -1, 1, 1, // v0,v5,v6,v1 (top) - -1, 1, 1, -1, 1,-1, -1,-1,-1, -1,-1, 1, // v1,v6,v7,v2 (left) - -1,-1,-1, 1,-1,-1, 1,-1, 1, -1,-1, 1, // v7,v4,v3,v2 (bottom) - 1,-1,-1, -1,-1,-1, -1, 1,-1, 1, 1,-1 }; // v4,v7,v6,v5 (back) + glPopMatrix(); - // normal array - static GLfloat normals[] = { 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, // v0,v1,v2,v3 (front) - 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, // v0,v3,v4,v5 (right) - 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, // v0,v5,v6,v1 (top) - -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, // v1,v6,v7,v2 (left) - 0,-1, 0, 0,-1, 0, 0,-1, 0, 0,-1, 0, // v7,v4,v3,v2 (bottom) - 0, 0,-1, 0, 0,-1, 0, 0,-1, 0, 0,-1 }; // v4,v7,v6,v5 (back) - - // index array of vertex array for glDrawElements() & glDrawRangeElement() - static GLubyte indices[] = { 0, 1, 2, 2, 3, 0, // front - 4, 5, 6, 6, 7, 4, // right - 8, 9,10, 10,11, 8, // top - 12,13,14, 14,15,12, // left - 16,17,18, 18,19,16, // bottom - 20,21,22, 22,23,20 }; // back - - - - glEnableClientState(GL_NORMAL_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - glNormalPointer(GL_FLOAT, 0, normals); - glVertexPointer(3, GL_FLOAT, 0, vertices); - - glColor4f(getColor()[RED_INDEX] / MAX_COLOR, getColor()[GREEN_INDEX] / MAX_COLOR, - getColor()[BLUE_INDEX] / MAX_COLOR, getLocalRenderAlpha()); - - DependencyManager::get()->bindSimpleProgram(); - - 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); - // we need to do half the size because the geometry in the VBOs are from -1,-1,-1 to 1,1,1 - glScalef(halfDimensions.x, halfDimensions.y, halfDimensions.z); - glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices); - glPopMatrix(); - glPopMatrix(); - - DependencyManager::get()->releaseSimpleProgram(); - - glDisableClientState(GL_VERTEX_ARRAY); // disable vertex arrays - glDisableClientState(GL_NORMAL_ARRAY); - } }; diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 065ca3a741..0dd6f9d0b8 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -12,8 +12,6 @@ // include this before QOpenGLFramebufferObject, which includes an earlier version of OpenGL #include -#include // TODO - we need to get rid of this ASAP - #include #include @@ -74,13 +72,13 @@ void DeferredLightingEffect::renderWireSphere(float radius, int slices, int stac void DeferredLightingEffect::renderSolidCube(float size) { bindSimpleProgram(); - glutSolidCube(size); + DependencyManager::get()->renderSolidCube(size); releaseSimpleProgram(); } void DeferredLightingEffect::renderWireCube(float size) { bindSimpleProgram(); - glutWireCube(size); + DependencyManager::get()->renderWireCube(size); releaseSimpleProgram(); } diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index 7ace3448d7..4f3b930a09 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -30,8 +30,7 @@ public: void init(AbstractViewStateInterface* viewState); - /// Returns a reference to a simple program suitable for rendering static - /// untextured geometry (such as that generated by glutSolidSphere, etc.) + /// Returns a reference to a simple program suitable for rendering static untextured geometry ProgramObject& getSimpleProgram() { return _simpleProgram; } /// Sets up the state necessary to render static untextured geometry with the simple program. diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index a770d942fe..e31ae2333a 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -11,6 +11,7 @@ // include this before QOpenGLBuffer, which includes an earlier version of OpenGL #include +#include // TODO - we need to get rid of this ASAP #include @@ -507,6 +508,15 @@ void GeometryCache::renderGrid(int xDivisions, int yDivisions) { buffer.release(); } +void GeometryCache::renderSolidCube(float size) { + glutSolidCube(size); +} + +void GeometryCache::renderWireCube(float size) { + glutWireCube(size); +} + + QSharedPointer GeometryCache::getGeometry(const QUrl& url, const QUrl& fallback, bool delayLoad) { return getResource(url, fallback, delayLoad).staticCast(); } diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index f0045c10bf..92e65718ab 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -43,6 +43,8 @@ public: void renderHalfCylinder(int slices, int stacks); void renderCone(float base, float height, int slices, int stacks); void renderGrid(int xDivisions, int yDivisions); + void renderSolidCube(float size); + void renderWireCube(float size); /// Loads geometry from the specified URL. /// \param fallback a fallback URL to load if the desired one is unavailable