From ef4b95c6e0b1c50da01fce0bce9312e4ce5b8077 Mon Sep 17 00:00:00 2001 From: TonyPeng Date: Wed, 9 Jul 2014 13:27:42 -0700 Subject: [PATCH] Merged from master. Get rid of redundant GL fog states. Moved local light parameters to shader uniform arrays. --- examples/avatarLocalLight.js | 8 ++++---- interface/resources/shaders/model.frag | 2 +- interface/resources/shaders/model.vert | 1 + interface/resources/shaders/model_specular_map.frag | 3 ++- interface/resources/shaders/skin_model.vert | 1 - interface/src/avatar/Avatar.cpp | 2 +- interface/src/avatar/Avatar.h | 2 +- interface/src/renderer/Model.cpp | 2 +- interface/src/renderer/Model.h | 4 ++-- interface/src/renderer/ProgramObject.cpp | 2 +- interface/src/renderer/ProgramObject.h | 2 +- interface/src/voxels/VoxelSystem.cpp | 2 +- 12 files changed, 16 insertions(+), 15 deletions(-) diff --git a/examples/avatarLocalLight.js b/examples/avatarLocalLight.js index 69b491d430..57f9d84ffe 100644 --- a/examples/avatarLocalLight.js +++ b/examples/avatarLocalLight.js @@ -23,19 +23,19 @@ function keyPressEvent(event) { if (event.text == "1") { currentSelection = 0; - print("selection = " + currentSelection); + print("light election = " + currentSelection); } else if (event.text == "2" ) { currentSelection = 1; - print("selection = " + currentSelection); + print("light selection = " + currentSelection); } else if (event.text == "3" ) { currentSelection = 2; - print("selection = " + currentSelection); + print("light selection = " + currentSelection); } else if (event.text == "4" ) { currentSelection = 3; - print("selection = " + currentSelection); + print("light selection = " + currentSelection); } else if (event.text == "5" ) { localLightColors[currentSelection].x += 0.01; diff --git a/interface/resources/shaders/model.frag b/interface/resources/shaders/model.frag index 95afaa0e5f..468a892686 100644 --- a/interface/resources/shaders/model.frag +++ b/interface/resources/shaders/model.frag @@ -16,7 +16,7 @@ uniform sampler2D diffuseMap; // local lights -const int MAX_LOCAL_LIGHTS = 2; // 2 lights for now, will probably need more later on +const int MAX_LOCAL_LIGHTS = 2; // 2 lights for now, will probably need more later on uniform int numLocalLights; uniform vec3 localLightDirections[MAX_LOCAL_LIGHTS]; uniform vec3 localLightColors[MAX_LOCAL_LIGHTS]; diff --git a/interface/resources/shaders/model.vert b/interface/resources/shaders/model.vert index 789c90817b..13eee2fa3d 100644 --- a/interface/resources/shaders/model.vert +++ b/interface/resources/shaders/model.vert @@ -39,3 +39,4 @@ void main(void) { // use standard pipeline transform gl_Position = ftransform(); } + diff --git a/interface/resources/shaders/model_specular_map.frag b/interface/resources/shaders/model_specular_map.frag index 7038ea84f7..329da65e9e 100644 --- a/interface/resources/shaders/model_specular_map.frag +++ b/interface/resources/shaders/model_specular_map.frag @@ -12,6 +12,7 @@ // const int MAX_LOCAL_LIGHTS = 2; +uniform int numLocalLights; uniform vec3 localLightDirections[MAX_LOCAL_LIGHTS]; uniform vec3 localLightColors[MAX_LOCAL_LIGHTS]; @@ -35,7 +36,7 @@ void main(void) { // the local light that is always present vec4 totalLocalLight = vec4(0.0, 0.0, 0.0, 1.0); - for (int i = 0; i < MAX_LOCAL_LIGHTS; i++) { + for (int i = 0; i < numLocalLights; i++) { float localDiffuse = dot(normalizedNormal, vec4(localLightDirections[i], 1.0)); float localLight = step(0.0, localDiffuse); float localLightVal = localDiffuse * localLight; diff --git a/interface/resources/shaders/skin_model.vert b/interface/resources/shaders/skin_model.vert index 1ce1baa76f..943daf9061 100644 --- a/interface/resources/shaders/skin_model.vert +++ b/interface/resources/shaders/skin_model.vert @@ -13,7 +13,6 @@ const int MAX_CLUSTERS = 128; const int INDICES_PER_VERTEX = 4; -const int MAX_LOCAL_LIGHTS = 4; uniform mat4 clusterMatrices[MAX_CLUSTERS]; diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index e6bd204505..83105c9022 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -86,7 +86,7 @@ void Avatar::init() { for (int i = 0; i < MAX_LOCAL_LIGHTS; i++) { _localLightColors[i] = glm::vec3(0.0f, 0.0f, 0.0f); - _localLightDirections[i] = glm::vec3(0.0f, 0.0f, 1.0f); + _localLightDirections[i] = glm::vec3(0.0f, 0.0f, 0.0f); } glm::vec3 darkGrayColor(0.3f, 0.3f, 0.3f); diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 79718c40df..31161e657b 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -184,7 +184,7 @@ protected: // always-present local lighting for the avatar glm::vec3 _localLightDirections[MAX_LOCAL_LIGHTS]; glm::vec3 _localLightColors[MAX_LOCAL_LIGHTS]; - int _numLocalLights; + int _numLocalLights; // protected methods... glm::vec3 getBodyRightDirection() const { return getOrientation() * IDENTITY_RIGHT; } diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 053e928ca3..8b8557709c 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -1489,7 +1489,7 @@ void Model::renderMeshes(float alpha, RenderMode mode, bool translucent, bool re program->setUniform(skinLocations->shadowDistances, Application::getInstance()->getShadowDistances()); } - // local light + // local light uniforms skinProgram->setUniformValue("numLocalLights", _numLocalLights); skinProgram->setUniformArray("localLightDirections", _localLightDirections, MAX_LOCAL_LIGHTS); skinProgram->setUniformArray("localLightColors", _localLightColors, MAX_LOCAL_LIGHTS); diff --git a/interface/src/renderer/Model.h b/interface/src/renderer/Model.h index 89b8843cf9..9e2e0d8348 100644 --- a/interface/src/renderer/Model.h +++ b/interface/src/renderer/Model.h @@ -166,8 +166,8 @@ protected: glm::vec3 _localLightDirections[MAX_LOCAL_LIGHTS]; glm::vec3 _localLightColors[MAX_LOCAL_LIGHTS]; - int _numLocalLights; - + int _numLocalLights; + QVector _jointStates; class MeshState { diff --git a/interface/src/renderer/ProgramObject.cpp b/interface/src/renderer/ProgramObject.cpp index bcc80960d7..16b3461ad0 100644 --- a/interface/src/renderer/ProgramObject.cpp +++ b/interface/src/renderer/ProgramObject.cpp @@ -26,7 +26,7 @@ void ProgramObject::setUniform(const char* name, const glm::vec3& value) { void ProgramObject::setUniformArray(const char* name, const glm::vec3* values, int count) { GLfloat* floatVal = new GLfloat[count*3]; int index = 0; - for(int i = 0; i < count; i++) { + for (int i = 0; i < count; i++) { assert(index < count*3); const float* valPtr = glm::value_ptr(values[i]); floatVal[index++] = valPtr[0]; diff --git a/interface/src/renderer/ProgramObject.h b/interface/src/renderer/ProgramObject.h index 17d0ee0d22..8e66ce9bc9 100644 --- a/interface/src/renderer/ProgramObject.h +++ b/interface/src/renderer/ProgramObject.h @@ -23,7 +23,7 @@ public: void setUniform(int location, const glm::vec3& value); void setUniform(const char* name, const glm::vec3& value); - void setUniformArray(const char* name, const glm::vec3* values, int count); + void setUniformArray(const char* name, const glm::vec3* values, int count); }; #endif // hifi_ProgramObject_h diff --git a/interface/src/voxels/VoxelSystem.cpp b/interface/src/voxels/VoxelSystem.cpp index 2354bbf13e..6c19cfd4c2 100644 --- a/interface/src/voxels/VoxelSystem.cpp +++ b/interface/src/voxels/VoxelSystem.cpp @@ -540,7 +540,7 @@ void VoxelSystem::initVoxelMemory() { _readArraysLock.unlock(); // fog for haze - if(_drawHaze) { + if (_drawHaze) { GLfloat fogColor[] = {_hazeColor.x, _hazeColor.y, _hazeColor.z, 1.0f}; glFogi(GL_FOG_MODE, GL_LINEAR); glFogfv(GL_FOG_COLOR, fogColor);