From 9997ef1b97153d4e36b0429fc91d4e6c46c98c19 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 10 Feb 2015 14:23:00 -0800 Subject: [PATCH 1/3] Increase size of text entity --- examples/editEntities.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/editEntities.js b/examples/editEntities.js index d73c6fa6e7..83550811f1 100644 --- a/examples/editEntities.js +++ b/examples/editEntities.js @@ -425,7 +425,7 @@ var toolBar = (function () { placingEntityID = Entities.addEntity({ type: "Text", position: grid.snapToSurface(grid.snapToGrid(position, false, DEFAULT_DIMENSIONS), DEFAULT_DIMENSIONS), - dimensions: { x: 0.5, y: 0.3, z: 0.01 }, + dimensions: { x: 0.65, y: 0.3, z: 0.01 }, backgroundColor: { red: 64, green: 64, blue: 64 }, textColor: { red: 255, green: 255, blue: 255 }, text: "some text", From b9fd116dbf20ed442ef971140f4d8d01858f1d87 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Tue, 10 Feb 2015 18:38:48 -0800 Subject: [PATCH 2/3] Introduce a cache bit in networkGemometry to capture the status of texture LOaded and avoid requiring everything once everything is loaded and get rid of the Transform stack calls on gl from gpu --- libraries/gpu/src/gpu/Batch.h | 22 +--- libraries/gpu/src/gpu/GLBackend.cpp | 131 ------------------- libraries/gpu/src/gpu/GLBackend.h | 12 +- libraries/render-utils/src/GeometryCache.cpp | 18 ++- libraries/render-utils/src/GeometryCache.h | 2 + libraries/render-utils/src/Model.cpp | 31 ++++- 6 files changed, 40 insertions(+), 176 deletions(-) diff --git a/libraries/gpu/src/gpu/Batch.h b/libraries/gpu/src/gpu/Batch.h index 64b94344c2..0657eacd6e 100644 --- a/libraries/gpu/src/gpu/Batch.h +++ b/libraries/gpu/src/gpu/Batch.h @@ -129,17 +129,7 @@ public: void _glUniform1f(GLint location, GLfloat v0); void _glUniform2f(GLint location, GLfloat v0, GLfloat v1); void _glUniform4fv(GLint location, GLsizei count, const GLfloat* value); - void _glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); - - void _glMatrixMode(GLenum mode); - void _glPushMatrix(); - void _glPopMatrix(); - void _glMultMatrixf(const GLfloat *m); - void _glLoadMatrixf(const GLfloat *m); - void _glLoadIdentity(void); - void _glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); - void _glScalef(GLfloat x, GLfloat y, GLfloat z); - void _glTranslatef(GLfloat x, GLfloat y, GLfloat z); + void _glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); void _glDrawArrays(GLenum mode, GLint first, GLsizei count); void _glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); @@ -201,16 +191,6 @@ public: COMMAND_glUniform4fv, COMMAND_glUniformMatrix4fv, - COMMAND_glMatrixMode, - COMMAND_glPushMatrix, - COMMAND_glPopMatrix, - COMMAND_glMultMatrixf, - COMMAND_glLoadMatrixf, - COMMAND_glLoadIdentity, - COMMAND_glRotatef, - COMMAND_glScalef, - COMMAND_glTranslatef, - COMMAND_glDrawArrays, COMMAND_glDrawRangeElements, diff --git a/libraries/gpu/src/gpu/GLBackend.cpp b/libraries/gpu/src/gpu/GLBackend.cpp index 519b20eca7..34ca47f300 100644 --- a/libraries/gpu/src/gpu/GLBackend.cpp +++ b/libraries/gpu/src/gpu/GLBackend.cpp @@ -54,16 +54,6 @@ GLBackend::CommandCall GLBackend::_commandCalls[Batch::NUM_COMMANDS] = (&::gpu::GLBackend::do_glUniform4fv), (&::gpu::GLBackend::do_glUniformMatrix4fv), - (&::gpu::GLBackend::do_glMatrixMode), - (&::gpu::GLBackend::do_glPushMatrix), - (&::gpu::GLBackend::do_glPopMatrix), - (&::gpu::GLBackend::do_glMultMatrixf), - (&::gpu::GLBackend::do_glLoadMatrixf), - (&::gpu::GLBackend::do_glLoadIdentity), - (&::gpu::GLBackend::do_glRotatef), - (&::gpu::GLBackend::do_glScalef), - (&::gpu::GLBackend::do_glTranslatef), - (&::gpu::GLBackend::do_glDrawArrays), (&::gpu::GLBackend::do_glDrawRangeElements), @@ -747,127 +737,6 @@ void GLBackend::do_glUniformMatrix4fv(Batch& batch, uint32 paramOffset) { CHECK_GL_ERROR(); } -void Batch::_glMatrixMode(GLenum mode) { - ADD_COMMAND_GL(glMatrixMode); - - _params.push_back(mode); - - DO_IT_NOW(_glMatrixMode, 1); -} -void GLBackend::do_glMatrixMode(Batch& batch, uint32 paramOffset) { - glMatrixMode(batch._params[paramOffset]._uint); - CHECK_GL_ERROR(); -} - -void Batch::_glPushMatrix() { - ADD_COMMAND_GL(glPushMatrix); - - DO_IT_NOW(_glPushMatrix, 0); -} -void GLBackend::do_glPushMatrix(Batch& batch, uint32 paramOffset) { - glPushMatrix(); - CHECK_GL_ERROR(); -} - -void Batch::_glPopMatrix() { - ADD_COMMAND_GL(glPopMatrix); - - DO_IT_NOW(_glPopMatrix, 0); -} -void GLBackend::do_glPopMatrix(Batch& batch, uint32 paramOffset) { - glPopMatrix(); - CHECK_GL_ERROR(); -} - -void Batch::_glMultMatrixf(const GLfloat *m) { - ADD_COMMAND_GL(glMultMatrixf); - - const int MATRIX4_SIZE = 16 * sizeof(float); - _params.push_back(cacheData(MATRIX4_SIZE, m)); - - DO_IT_NOW(_glMultMatrixf, 1); -} -void GLBackend::do_glMultMatrixf(Batch& batch, uint32 paramOffset) { - glMultMatrixf((const GLfloat*)batch.editData(batch._params[paramOffset]._uint)); - CHECK_GL_ERROR(); -} - -void Batch::_glLoadMatrixf(const GLfloat *m) { - ADD_COMMAND_GL(glLoadMatrixf); - - const int MATRIX4_SIZE = 16 * sizeof(float); - _params.push_back(cacheData(MATRIX4_SIZE, m)); - - DO_IT_NOW(_glLoadMatrixf, 1); -} -void GLBackend::do_glLoadMatrixf(Batch& batch, uint32 paramOffset) { - glLoadMatrixf((const GLfloat*)batch.editData(batch._params[paramOffset]._uint)); - CHECK_GL_ERROR(); -} - -void Batch::_glLoadIdentity(void) { - ADD_COMMAND_GL(glLoadIdentity); - - DO_IT_NOW(_glLoadIdentity, 0); -} -void GLBackend::do_glLoadIdentity(Batch& batch, uint32 paramOffset) { - glLoadIdentity(); - CHECK_GL_ERROR(); -} - -void Batch::_glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) { - ADD_COMMAND_GL(glRotatef); - - _params.push_back(z); - _params.push_back(y); - _params.push_back(x); - _params.push_back(angle); - - DO_IT_NOW(_glRotatef, 4); -} -void GLBackend::do_glRotatef(Batch& batch, uint32 paramOffset) { - glRotatef( - batch._params[paramOffset + 3]._float, - batch._params[paramOffset + 2]._float, - batch._params[paramOffset + 1]._float, - batch._params[paramOffset + 0]._float); - CHECK_GL_ERROR(); -} - -void Batch::_glScalef(GLfloat x, GLfloat y, GLfloat z) { - ADD_COMMAND_GL(glScalef); - - _params.push_back(z); - _params.push_back(y); - _params.push_back(x); - - DO_IT_NOW(_glScalef, 3); -} -void GLBackend::do_glScalef(Batch& batch, uint32 paramOffset) { - glScalef( - batch._params[paramOffset + 2]._float, - batch._params[paramOffset + 1]._float, - batch._params[paramOffset + 0]._float); - CHECK_GL_ERROR(); -} - -void Batch::_glTranslatef(GLfloat x, GLfloat y, GLfloat z) { - ADD_COMMAND_GL(glTranslatef); - - _params.push_back(z); - _params.push_back(y); - _params.push_back(x); - - DO_IT_NOW(_glTranslatef, 3); -} -void GLBackend::do_glTranslatef(Batch& batch, uint32 paramOffset) { - glTranslatef( - batch._params[paramOffset + 2]._float, - batch._params[paramOffset + 1]._float, - batch._params[paramOffset + 0]._float); - CHECK_GL_ERROR(); -} - void Batch::_glDrawArrays(GLenum mode, GLint first, GLsizei count) { ADD_COMMAND_GL(glDrawArrays); diff --git a/libraries/gpu/src/gpu/GLBackend.h b/libraries/gpu/src/gpu/GLBackend.h index 1731701022..e3450ae71a 100644 --- a/libraries/gpu/src/gpu/GLBackend.h +++ b/libraries/gpu/src/gpu/GLBackend.h @@ -175,17 +175,7 @@ protected: void do_glUniform1f(Batch& batch, uint32 paramOffset); void do_glUniform2f(Batch& batch, uint32 paramOffset); void do_glUniform4fv(Batch& batch, uint32 paramOffset); - void do_glUniformMatrix4fv(Batch& batch, uint32 paramOffset); - - void do_glMatrixMode(Batch& batch, uint32 paramOffset); - void do_glPushMatrix(Batch& batch, uint32 paramOffset); - void do_glPopMatrix(Batch& batch, uint32 paramOffset); - void do_glMultMatrixf(Batch& batch, uint32 paramOffset); - void do_glLoadMatrixf(Batch& batch, uint32 paramOffset); - void do_glLoadIdentity(Batch& batch, uint32 paramOffset); - void do_glRotatef(Batch& batch, uint32 paramOffset); - void do_glScalef(Batch& batch, uint32 paramOffset); - void do_glTranslatef(Batch& batch, uint32 paramOffset); + void do_glUniformMatrix4fv(Batch& batch, uint32 paramOffset); void do_glDrawArrays(Batch& batch, uint32 paramOffset); void do_glDrawRangeElements(Batch& batch, uint32 paramOffset); diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index abf57843b7..16bf958920 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -1753,15 +1753,18 @@ bool NetworkGeometry::isLoadedWithTextures() const { if (!isLoaded()) { return false; } - foreach (const NetworkMesh& mesh, _meshes) { - foreach (const NetworkMeshPart& part, mesh.parts) { - if ((part.diffuseTexture && !part.diffuseTexture->isLoaded()) || - (part.normalTexture && !part.normalTexture->isLoaded()) || - (part.specularTexture && !part.specularTexture->isLoaded()) || - (part.emissiveTexture && !part.emissiveTexture->isLoaded())) { - return false; + if (!_isLoadedWithTextures) { + foreach (const NetworkMesh& mesh, _meshes) { + foreach (const NetworkMeshPart& part, mesh.parts) { + if ((part.diffuseTexture && !part.diffuseTexture->isLoaded()) || + (part.normalTexture && !part.normalTexture->isLoaded()) || + (part.specularTexture && !part.specularTexture->isLoaded()) || + (part.emissiveTexture && !part.emissiveTexture->isLoaded())) { + return false; + } } } + _isLoadedWithTextures = true; } return true; } @@ -1938,6 +1941,7 @@ void NetworkGeometry::setTextureWithNameToURL(const QString& name, const QUrl& u // we don't have meshes downloaded yet, so hold this texture as pending _pendingTextureChanges.insert(name, url); } + _isLoadedWithTextures = false; } QStringList NetworkGeometry::getTextureNames() const { diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index 300e68aadd..04cea4f9f8 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -339,6 +339,8 @@ private: QHash, QVector > _jointMappings; QHash _pendingTextureChanges; + + mutable bool _isLoadedWithTextures = false; }; /// The state associated with a single mesh part. diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 79f938e7f6..1bf379208a 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -686,7 +686,7 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { // Let's introduce a gpu::Batch to capture all the calls to the graphics api _renderBatch.clear(); gpu::Batch& batch = _renderBatch; - GLBATCH(glPushMatrix)(); + //GLBATCH(glPushMatrix)(); // Capture the view matrix once for the rendering of this model if (_transforms.empty()) { @@ -835,12 +835,23 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { GLBATCH(glBindBuffer)(GL_ELEMENT_ARRAY_BUFFER, 0); GLBATCH(glBindTexture)(GL_TEXTURE_2D, 0); - GLBATCH(glPopMatrix)(); + //GLBATCH(glPopMatrix)(); // Render! { PROFILE_RANGE("render Batch"); + + #if defined(ANDROID) + #else + glPushMatrix(); + #endif + ::gpu::GLBackend::renderBatch(batch); + + #if defined(ANDROID) + #else + glPopMatrix(); + #endif } // restore all the default material settings @@ -1638,7 +1649,7 @@ void Model::startScene(RenderArgs::RenderSide renderSide) { } void Model::setupBatchTransform(gpu::Batch& batch) { - GLBATCH(glPushMatrix)(); + //GLBATCH(glPushMatrix)(); // Capture the view matrix once for the rendering of this model if (_transforms.empty()) { @@ -1811,7 +1822,17 @@ void Model::endScene(RenderMode mode, RenderArgs* args) { // Render! { PROFILE_RANGE("render Batch"); + #if defined(ANDROID) + #else + glPushMatrix(); + #endif + ::gpu::GLBackend::renderBatch(_sceneRenderBatch); + + #if defined(ANDROID) + #else + glPopMatrix(); + #endif } // restore all the default material settings @@ -2271,7 +2292,7 @@ int Model::renderMeshesForModelsInScene(gpu::Batch& batch, RenderMode mode, bool } model->setupBatchTransform(batch); meshPartsRendered += model->renderMeshesFromList(list, batch, mode, translucent, alphaThreshold, args, locations, skinLocations); - GLBATCH(glPopMatrix)(); + //GLBATCH(glPopMatrix)(); } } } @@ -2437,11 +2458,9 @@ int Model::renderMeshesFromList(QVector& list, gpu::Batch& batch, RenderMod } static bool showDiffuse = true; if (showDiffuse && diffuseMap) { - // GLBATCH(glBindTexture)(GL_TEXTURE_2D, diffuseMap->getID()); batch.setUniformTexture(0, diffuseMap->getGPUTexture()); } else { - // GLBATCH(glBindTexture)(GL_TEXTURE_2D, textureCache->getWhiteTextureID()); batch.setUniformTexture(0, textureCache->getWhiteTexture()); } From a6f006a36d998cfd6450a66ec445e229c029483c Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Tue, 10 Feb 2015 18:41:36 -0800 Subject: [PATCH 3/3] more cleaning --- libraries/render-utils/src/Model.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 1bf379208a..f166aecae9 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -686,7 +686,6 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { // Let's introduce a gpu::Batch to capture all the calls to the graphics api _renderBatch.clear(); gpu::Batch& batch = _renderBatch; - //GLBATCH(glPushMatrix)(); // Capture the view matrix once for the rendering of this model if (_transforms.empty()) { @@ -835,8 +834,6 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { GLBATCH(glBindBuffer)(GL_ELEMENT_ARRAY_BUFFER, 0); GLBATCH(glBindTexture)(GL_TEXTURE_2D, 0); - //GLBATCH(glPopMatrix)(); - // Render! { PROFILE_RANGE("render Batch"); @@ -1649,7 +1646,6 @@ void Model::startScene(RenderArgs::RenderSide renderSide) { } void Model::setupBatchTransform(gpu::Batch& batch) { - //GLBATCH(glPushMatrix)(); // Capture the view matrix once for the rendering of this model if (_transforms.empty()) { @@ -2292,7 +2288,6 @@ int Model::renderMeshesForModelsInScene(gpu::Batch& batch, RenderMode mode, bool } model->setupBatchTransform(batch); meshPartsRendered += model->renderMeshesFromList(list, batch, mode, translucent, alphaThreshold, args, locations, skinLocations); - //GLBATCH(glPopMatrix)(); } } } @@ -2392,8 +2387,6 @@ int Model::renderMeshesFromList(QVector& list, gpu::Batch& batch, RenderMod } } - // GLBATCH(glPushMatrix)(); - const MeshState& state = _meshStates.at(i); if (state.clusterMatrices.size() > 1) { GLBATCH(glUniformMatrix4fv)(skinLocations->clusterMatrices, state.clusterMatrices.size(), false,