* LwjglGL1Renderer: do not set vertexbuffer on mesh if vertexcolor is disabled. This fixes issue where an unshaded material still uses vertex colors even if they are disabled.

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9613 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
Sha..rd 13 years ago
parent 20566963f8
commit 8e153c0379
  1. 31
      engine/src/lwjgl/com/jme3/renderer/lwjgl/LwjglGL1Renderer.java

@ -94,8 +94,8 @@ public class LwjglGL1Renderer implements GL1Renderer {
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
// Enable rescaling/normaling of normal vectors. // Enable rescaling/normaling of normal vectors.
// Fixes lighting issues with scaled models. // Fixes lighting issues with scaled models.
if (gl12){ if (gl12){
glEnable(GL12.GL_RESCALE_NORMAL); glEnable(GL12.GL_RESCALE_NORMAL);
}else{ }else{
@ -183,25 +183,25 @@ public class LwjglGL1Renderer implements GL1Renderer {
* Applies fixed function bindings from the context to OpenGL * Applies fixed function bindings from the context to OpenGL
*/ */
private void applyFixedFuncBindings(boolean forLighting){ private void applyFixedFuncBindings(boolean forLighting){
if (forLighting){ if (forLighting) {
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, context.shininess); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, context.shininess);
setMaterialColor(GL_AMBIENT, context.ambient, ColorRGBA.DarkGray); setMaterialColor(GL_AMBIENT, context.ambient, ColorRGBA.DarkGray);
setMaterialColor(GL_DIFFUSE, context.diffuse, ColorRGBA.White); setMaterialColor(GL_DIFFUSE, context.diffuse, ColorRGBA.White);
setMaterialColor(GL_SPECULAR, context.specular, ColorRGBA.Black); setMaterialColor(GL_SPECULAR, context.specular, ColorRGBA.Black);
if (context.useVertexColor){ if (context.useVertexColor) {
glEnable(GL_COLOR_MATERIAL); glEnable(GL_COLOR_MATERIAL);
}else{ } else {
glDisable(GL_COLOR_MATERIAL); glDisable(GL_COLOR_MATERIAL);
} }
}else{ } else {
// Ignore other values as they have no effect when // Ignore other values as they have no effect when
// GL_LIGHTING is disabled. // GL_LIGHTING is disabled.
ColorRGBA color = context.color; ColorRGBA color = context.color;
if (color != null){ if (color != null) {
glColor4f(color.r, color.g, color.b, color.a); glColor4f(color.r, color.g, color.b, color.a);
}else{ } else {
glColor4f(1,1,1,1); glColor4f(1, 1, 1, 1);
} }
} }
} }
@ -462,7 +462,7 @@ public class LwjglGL1Renderer implements GL1Renderer {
public void setLighting(LightList list) { public void setLighting(LightList list) {
// XXX: This is abuse of setLighting() to // XXX: This is abuse of setLighting() to
// apply fixed function bindings // apply fixed function bindings
// and do other book keeping. // and do other book keeping.
if (list == null || list.size() == 0){ if (list == null || list.size() == 0){
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
@ -907,6 +907,11 @@ public class LwjglGL1Renderer implements GL1Renderer {
} }
public void setVertexAttrib(VertexBuffer vb, VertexBuffer idb) { public void setVertexAttrib(VertexBuffer vb, VertexBuffer idb) {
if (vb.getBufferType() == VertexBuffer.Type.Color && !context.useVertexColor) {
// Ignore vertex color buffer if vertex color is disabled.
return;
}
int arrayType = convertArrayType(vb.getBufferType()); int arrayType = convertArrayType(vb.getBufferType());
if (arrayType == -1) { if (arrayType == -1) {
return; // unsupported return; // unsupported

Loading…
Cancel
Save