From 45df6d814bd9f29f4cadc2ddb96f46f869380bfb Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 9 May 2007 19:51:32 +0000 Subject: [PATCH] Use VBOs for vertices, indices when using shaders; multiply vertices by weights even if we only have one weight per vertex. git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@232 ed5b42cb-e716-0410-a449-f6a68f950b19 --- rsrc/media/jme/skin.vert | 4 ++-- src/java/com/threerings/jme/model/ModelMesh.java | 2 +- src/java/com/threerings/jme/model/SkinMesh.java | 16 +++++++++------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/rsrc/media/jme/skin.vert b/rsrc/media/jme/skin.vert index 2a5b7aab..736d3ef4 100644 --- a/rsrc/media/jme/skin.vert +++ b/rsrc/media/jme/skin.vert @@ -49,8 +49,8 @@ void main () // add up the vertex as transformed by each bone and scaled by each weight #if BONES_PER_VERTEX == 1 - vec4 skinVertex = boneTransforms[int(boneIndices)] * gl_Vertex; - vec4 skinNormal = boneTransforms[int(boneIndices)] * normal4; + vec4 skinVertex = boneTransforms[int(boneIndices)] * gl_Vertex * boneWeights; + vec4 skinNormal = boneTransforms[int(boneIndices)] * normal4 * boneWeights; #else vec4 skinVertex = boneTransforms[int(boneIndices[0])] * gl_Vertex * boneWeights[0]; vec4 skinNormal = boneTransforms[int(boneIndices[0])] * normal4 * boneWeights[0]; diff --git a/src/java/com/threerings/jme/model/ModelMesh.java b/src/java/com/threerings/jme/model/ModelMesh.java index ec15625e..59d85561 100644 --- a/src/java/com/threerings/jme/model/ModelMesh.java +++ b/src/java/com/threerings/jme/model/ModelMesh.java @@ -408,7 +408,7 @@ public class ModelMesh extends TriMesh TextureState tstate = tprov.getTexture(_emissiveMap); emissiveTex = tstate.getTexture(); emissiveTex.setApply(Texture.AM_BLEND); - emissiveTex.setBlendColor(ColorRGBA.white); + emissiveTex.getBlendColor().set(ColorRGBA.white); } _tstates = new TextureState[_textures.length]; for (int ii = 0; ii < _textures.length; ii++) { diff --git a/src/java/com/threerings/jme/model/SkinMesh.java b/src/java/com/threerings/jme/model/SkinMesh.java index 28dfaa36..40c99d18 100644 --- a/src/java/com/threerings/jme/model/SkinMesh.java +++ b/src/java/com/threerings/jme/model/SkinMesh.java @@ -343,14 +343,8 @@ public class SkinMesh extends ModelMesh public void lockStaticMeshes ( Renderer renderer, boolean useVBOs, boolean useDisplayLists) { - // we can use VBOs for color, texture, and indices + // we can use VBOs for color, texture, and indices if not using shaders if (useVBOs && renderer.supportsVBO()) { - VBOInfo vboinfo = new VBOInfo(false); - vboinfo.setVBOColorEnabled(true); - vboinfo.setVBOTextureEnabled(true); - vboinfo.setVBOIndexEnabled(!_translucent); - setVBOInfo(vboinfo); - // use VBOs for shader attributes GLSLShaderObjectsState sstate = (GLSLShaderObjectsState)getRenderState( RenderState.RS_GLSL_SHADER_OBJECTS); @@ -359,6 +353,14 @@ public class SkinMesh extends ModelMesh attrib.useVBO = true; } } + + VBOInfo vboinfo = new VBOInfo(true); + if (sstate == null) { + vboinfo.setVBOVertexEnabled(false); + vboinfo.setVBONormalEnabled(false); + } + vboinfo.setVBOIndexEnabled(!_translucent); + setVBOInfo(vboinfo); } _useDisplayLists = useDisplayLists && !_translucent; }