diff --git a/jme3-android/src/main/java/com/jme3/renderer/android/OGLESShaderRenderer.java b/jme3-android/src/main/java/com/jme3/renderer/android/OGLESShaderRenderer.java index 5b2b3b7b1..681c6b0e9 100644 --- a/jme3-android/src/main/java/com/jme3/renderer/android/OGLESShaderRenderer.java +++ b/jme3-android/src/main/java/com/jme3/renderer/android/OGLESShaderRenderer.java @@ -153,6 +153,11 @@ public class OGLESShaderRenderer implements Renderer { powerVr = GLES20.glGetString(GLES20.GL_RENDERER).contains("PowerVR"); + + //workaround, always assume we support GLSL100 + //some cards just don't report this correctly + caps.add(Caps.GLSL100); + /* // Fix issue in TestRenderToMemory when GL_FRONT is the main // buffer being used. diff --git a/jme3-core/src/main/java/com/jme3/material/Material.java b/jme3-core/src/main/java/com/jme3/material/Material.java index 73c928e96..827512b6f 100644 --- a/jme3-core/src/main/java/com/jme3/material/Material.java +++ b/jme3-core/src/main/java/com/jme3/material/Material.java @@ -434,6 +434,17 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable { public Collection getParams() { return paramValues.values(); } + + /** + * Returns the ListMap of all parameters set on this material. + * + * @return a ListMap of all parameters set on this material. + * + * @see #setParam(java.lang.String, com.jme3.shader.VarType, java.lang.Object) + */ + public ListMap getParamsMap() { + return paramValues; + } /** * Check if setting the parameter given the type and name is allowed. diff --git a/jme3-core/src/main/java/com/jme3/material/Technique.java b/jme3-core/src/main/java/com/jme3/material/Technique.java index 82c87313a..fb5ee4b69 100644 --- a/jme3-core/src/main/java/com/jme3/material/Technique.java +++ b/jme3-core/src/main/java/com/jme3/material/Technique.java @@ -34,8 +34,8 @@ package com.jme3.material; import com.jme3.asset.AssetManager; import com.jme3.renderer.Caps; import com.jme3.shader.*; +import com.jme3.util.ListMap; import java.util.ArrayList; -import java.util.Collection; import java.util.EnumSet; import java.util.List; import java.util.logging.Logger; @@ -182,12 +182,13 @@ public class Technique /* implements Savable */ { // If the technique was switched, check if the define list changed // based on material parameters. - Collection params = owner.getParams(); - - if (!defines.equalsParams(params,def)) { + ListMap params = owner.getParamsMap(); + + if (!defines.equalsParams(params, def)) { // Defines were changed, update define list defines.clear(); - for (MatParam param : params) { + for(int i=0;i params, TechniqueDef def) { - + public boolean equalsParams(ListMap params, TechniqueDef def) { + int size = 0; - for (MatParam param : params) { + for(int i = 0; i < params.size() ; i++ ) { + MatParam param = (MatParam)params.getValue(i); String key = def.getShaderParamDefine(param.getName()); if (key != null) { Object val = param.getValue(); diff --git a/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglGL1Renderer.java b/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglGL1Renderer.java index 18f25206a..4717bf77e 100644 --- a/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglGL1Renderer.java +++ b/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglGL1Renderer.java @@ -138,6 +138,10 @@ public class JoglGL1Renderer implements GL1Renderer { gl12 = true; } + //workaround, always assume we support GLSL100 + //some cards just don't report this correctly + caps.add(Caps.GLSL100); + // Default values for certain GL state. gl.getGL2ES1().glShadeModel(GLLightingFunc.GL_SMOOTH); gl.getGL2().glColorMaterial(GL.GL_FRONT_AND_BACK, GLLightingFunc.GL_DIFFUSE); diff --git a/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglRenderer.java b/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglRenderer.java index c512323f5..0ce6b7e6d 100644 --- a/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglRenderer.java +++ b/jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglRenderer.java @@ -164,6 +164,10 @@ public class JoglRenderer implements Renderer { } } + //workaround, always assume we support GLSL100 + //some cards just don't report this correctly + caps.add(Caps.GLSL100); + String versionStr = null; if (caps.contains(Caps.OpenGL20) || gl.isGL2ES2()) { versionStr = gl.glGetString(GL2ES2.GL_SHADING_LANGUAGE_VERSION); diff --git a/jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglGL1Renderer.java b/jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglGL1Renderer.java index c0bb17daa..f88a651d1 100644 --- a/jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglGL1Renderer.java +++ b/jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglGL1Renderer.java @@ -102,6 +102,10 @@ public class LwjglGL1Renderer implements GL1Renderer { gl12 = true; } + //workaround, always assume we support GLSL100 + //some cards just don't report this correctly + caps.add(Caps.GLSL100); + // Default values for certain GL state. glShadeModel(GL_SMOOTH); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); diff --git a/jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglRenderer.java b/jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglRenderer.java index fe775f9be..039b0f7f9 100644 --- a/jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglRenderer.java +++ b/jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglRenderer.java @@ -158,7 +158,11 @@ public class LwjglRenderer implements Renderer { } } } - + + //workaround, always assume we support GLSL100 + //some cards just don't report this correctly + caps.add(Caps.GLSL100); + String versionStr = null; if (ctxCaps.OpenGL20) { versionStr = glGetString(GL_SHADING_LANGUAGE_VERSION);