package android.opengl.OpenGLES10;
import android.opengl.GLES10;
import android.opengl.GLES11;
import android.opengl.GLES20;
import android.util.Log;
import java.util.Arrays;
public class OpenGLESState
{
private static final String TAG = "OpenGLESState";
private UniformBase[] uniforms = new UniformBase[UniformId.COUNT];
private Attribute[] attributes = new Attribute[AttributeId.COUNT];
private ShaderFile[] shaders = new ShaderFile[ShaderId.COUNT];
private java.util.ArrayList<StateShaderProgram > stateShaderPrograms = new java.util.ArrayList<StateShaderProgram >();
private StateShaderProgram currentStateShaderProgram;
private int stateSize;
private int stateSizeBool;
private int[] currentState = new int[1 + (UniformId.STATE_UNIFORM_BOOL_COUNT / 32) + UniformId.STATE_UNIFORM_INT_COUNT];
private int activeTexture;
private int clientActiveTexture;
private java.util.HashMap<Integer, Integer> boundTextureFormats = new java.util.HashMap<Integer, Integer>();
private int[] boundTextures = null;
public class ShaderId {
public static final int MAIN_VERTEX_SHADER = 0;
public static final int LIGHTING_VERTEX_SHADER = 1;
public static final int LIGHTING_PER_VERTEX_VERTEX_SHADER = 2;
public static final int LIGHTING_PER_FRAGMENT_VERTEX_SHADER = 3;
public static final int CLIP_PLANE_VERTEX_SHADER = 4;
public static final int TEXTURE_VERTEX_SHADER = 5;
public static final int TEXTURE0_VERTEX_SHADER = 6;
public static final int TEXTURE1_VERTEX_SHADER = 7;
public static final int TEXTURE2_VERTEX_SHADER = 8;
public static final int FOG_VERTEX_SHADER = 9;
public static final int MAIN_FRAGMENT_SHADER = 10;
public static final int LIGHTING_FRAGMENT_SHADER = 11;
public static final int LIGHTING_PER_FRAGMENT_FRAGMENT_SHADER = 12;
public static final int ALPHA_TEST_FRAGMENT_SHADER = 13;
public static final int CLIP_PLANE_FRAGMENT_SHADER = 14;
public static final int TEXTURE_FRAGMENT_SHADER = 15;
public static final int TEXTURE0_FRAGMENT_SHADER = 16;
public static final int TEXTURE1_FRAGMENT_SHADER = 17;
public static final int TEXTURE2_FRAGMENT_SHADER = 18;
public static final int FOG_FRAGMENT_SHADER = 19;
public static final int FIRST_VERTEX_SHADER = MAIN_VERTEX_SHADER;
public static final int LAST_VERTEX_SHADER = FOG_VERTEX_SHADER;
public static final int FIRST_FRAGMENT_SHADER = MAIN_FRAGMENT_SHADER;
public static final int LAST_FRAGMENT_SHADER = FOG_FRAGMENT_SHADER;
public static final int COUNT = LAST_FRAGMENT_SHADER + 1;
};
public class AttributeId {
public static final int POSITION = 0;
public static final int NORMAL = 1;
public static final int COLOR = 2;
public static final int TEXCOORD0 = 3;
public static final int TEXCOORD1 = 4;
public static final int TEXCOORD2 = 5;
public static final int COUNT = TEXCOORD2 + 1;
};
public class UniformId {
public static final int POSITION_ENABLED = 0;
public static final int NORMAL_ENABLED = 1;
public static final int COLOR_ENABLED = 2;
public static final int TEXCOORD0_ENABLED = 3;
public static final int TEXCOORD1_ENABLED = 4;
public static final int TEXCOORD2_ENABLED = 5;
public static final int LIGHTING_ENABLED = 6;
public static final int LIGHT_MODEL_LOCAL_VIEWER_ENABLED = 7;
public static final int LIGHT_MODEL_TWO_SIDE_ENABLED = 8;
public static final int LIGHT0_ENABLED = 9;
public static final int LIGHT1_ENABLED = 10;
public static final int LIGHT2_ENABLED = 11;
public static final int TEXTURE0_ENABLED = 12;
public static final int TEXTURE1_ENABLED = 13;
public static final int TEXTURE2_ENABLED = 14;
public static final int TEXTURE0_MATRIX_ENABLED = 15;
public static final int TEXTURE1_MATRIX_ENABLED = 16;
public static final int TEXTURE2_MATRIX_ENABLED = 17;
public static final int FOG_ENABLED = 18;
public static final int ALPHA_TEST_ENABLED = 19;
public static final int CLIP_PLANE0_ENABLED = 20;
public static final int CLIP_PLANE1_ENABLED = 21;
public static final int CLIP_PLANE2_ENABLED = 22;
public static final int CLIP_PLANE3_ENABLED = 23;
public static final int CLIP_PLANE4_ENABLED = 24;
public static final int CLIP_PLANE5_ENABLED = 25;
public static final int RESCALE_NORMAL_ENABLED = 26;
public static final int NORMALIZE_ENABLED = 27;
public static final int FOG_MODE = 28;
public static final int FOG_HINT = 29;
public static final int ALPHA_FUNC = 30;
public static final int TEXTURE0_FORMAT = 31;
public static final int TEXTURE1_FORMAT = 32;
public static final int TEXTURE2_FORMAT = 33;
public static final int TEXTURE0_ENV_MODE = 34;
public static final int TEXTURE1_ENV_MODE = 35;
public static final int TEXTURE2_ENV_MODE = 36;
public static final int TEXTURE0_ENV_COMBINE_RGB = 37;
public static final int TEXTURE1_ENV_COMBINE_RGB = 38;
public static final int TEXTURE2_ENV_COMBINE_RGB = 39;
public static final int TEXTURE0_ENV_COMBINE_ALPHA = 40;
public static final int TEXTURE1_ENV_COMBINE_ALPHA = 41;
public static final int TEXTURE2_ENV_COMBINE_ALPHA = 42;
public static final int TEXTURE0_ENV_SRC0_RGB = 43;
public static final int TEXTURE0_ENV_SRC1_RGB = 44;
public static final int TEXTURE0_ENV_SRC2_RGB = 45;
public static final int TEXTURE1_ENV_SRC0_RGB = 46;
public static final int TEXTURE1_ENV_SRC1_RGB = 47;
public static final int TEXTURE1_ENV_SRC2_RGB = 48;
public static final int TEXTURE2_ENV_SRC0_RGB = 49;
public static final int TEXTURE2_ENV_SRC1_RGB = 50;
public static final int TEXTURE2_ENV_SRC2_RGB = 51;
public static final int TEXTURE0_ENV_OPERAND0_RGB = 52;
public static final int TEXTURE0_ENV_OPERAND1_RGB = 53;
public static final int TEXTURE0_ENV_OPERAND2_RGB = 54;
public static final int TEXTURE1_ENV_OPERAND0_RGB = 55;
public static final int TEXTURE1_ENV_OPERAND1_RGB = 56;
public static final int TEXTURE1_ENV_OPERAND2_RGB = 57;
public static final int TEXTURE2_ENV_OPERAND0_RGB = 58;
public static final int TEXTURE2_ENV_OPERAND1_RGB = 59;
public static final int TEXTURE2_ENV_OPERAND2_RGB = 60;
public static final int TEXTURE0_ENV_SRC0_ALPHA = 61;
public static final int TEXTURE0_ENV_SRC1_ALPHA = 62;
public static final int TEXTURE0_ENV_SRC2_ALPHA = 63;
public static final int TEXTURE1_ENV_SRC0_ALPHA = 64;
public static final int TEXTURE1_ENV_SRC1_ALPHA = 65;
public static final int TEXTURE1_ENV_SRC2_ALPHA = 66;
public static final int TEXTURE2_ENV_SRC0_ALPHA = 67;
public static final int TEXTURE2_ENV_SRC1_ALPHA = 68;
public static final int TEXTURE2_ENV_SRC2_ALPHA = 69;
public static final int TEXTURE0_ENV_OPERAND0_ALPHA = 70;
public static final int TEXTURE0_ENV_OPERAND1_ALPHA = 71;
public static final int TEXTURE0_ENV_OPERAND2_ALPHA = 72;
public static final int TEXTURE1_ENV_OPERAND0_ALPHA = 73;
public static final int TEXTURE1_ENV_OPERAND1_ALPHA = 74;
public static final int TEXTURE1_ENV_OPERAND2_ALPHA = 75;
public static final int TEXTURE2_ENV_OPERAND0_ALPHA = 76;
public static final int TEXTURE2_ENV_OPERAND1_ALPHA = 77;
public static final int TEXTURE2_ENV_OPERAND2_ALPHA = 78;
public static final int LIGHTING_HINT = 79;
public static final int MODELVIEW_PROJECTION_MATRIX = 80;
public static final int MODELVIEW_MATRIX = 81;
public static final int TRANPOSE_ADJOINT_MODEL_VIEW_MATRIX = 82;
public static final int TEXTURE0_MATRIX = 83;
public static final int TEXTURE1_MATRIX = 84;
public static final int TEXTURE2_MATRIX = 85;
public static final int TEXTURE0_SAMPLER = 86;
public static final int TEXTURE1_SAMPLER = 87;
public static final int TEXTURE2_SAMPLER = 88;
public static final int TEXTURE0_ENV_COLOR = 89;
public static final int TEXTURE1_ENV_COLOR = 90;
public static final int TEXTURE2_ENV_COLOR = 91;
public static final int TEXTURE0_ENV_RGB_SCALE = 92;
public static final int TEXTURE1_ENV_RGB_SCALE = 93;
public static final int TEXTURE2_ENV_RGB_SCALE = 94;
public static final int TEXTURE0_ENV_ALPHA_SCALE = 95;
public static final int TEXTURE1_ENV_ALPHA_SCALE = 96;
public static final int TEXTURE2_ENV_ALPHA_SCALE = 97;
public static final int TEXTURE0_ENV_BLUR_AMOUNT = 98;
public static final int TEXTURE1_ENV_BLUR_AMOUNT = 99;
public static final int TEXTURE2_ENV_BLUR_AMOUNT = 100;
public static final int RESCALE_NORMAL_FACTOR = 101;
public static final int LIGHT0_AMBIENT = 102;
public static final int LIGHT1_AMBIENT = 103;
public static final int LIGHT2_AMBIENT = 104;
public static final int LIGHT0_DIFFUSE = 105;
public static final int LIGHT1_DIFFUSE = 106;
public static final int LIGHT2_DIFFUSE = 107;
public static final int LIGHT0_SPECULAR = 108;
public static final int LIGHT1_SPECULAR = 109;
public static final int LIGHT2_SPECULAR = 110;
public static final int LIGHT0_POSITION = 111;
public static final int LIGHT1_POSITION = 112;
public static final int LIGHT2_POSITION = 113;
public static final int LIGHT0_SPOT_DIRECTION = 114;
public static final int LIGHT1_SPOT_DIRECTION = 115;
public static final int LIGHT2_SPOT_DIRECTION = 116;
public static final int LIGHT0_SPOT_EXPONENT = 117;
public static final int LIGHT1_SPOT_EXPONENT = 118;
public static final int LIGHT2_SPOT_EXPONENT = 119;
public static final int LIGHT0_SPOT_CUTOFF_ANGLE_COS = 120;
public static final int LIGHT1_SPOT_CUTOFF_ANGLE_COS = 121;
public static final int LIGHT2_SPOT_CUTOFF_ANGLE_COS = 122;
public static final int LIGHT0_CONSTANT_ATTENUATION = 123;
public static final int LIGHT1_CONSTANT_ATTENUATION = 124;
public static final int LIGHT2_CONSTANT_ATTENUATION = 125;
public static final int LIGHT0_LINEAR_ATTENUATION = 126;
public static final int LIGHT1_LINEAR_ATTENUATION = 127;
public static final int LIGHT2_LINEAR_ATTENUATION = 128;
public static final int LIGHT0_QUADRATIC_ATTENUATION = 129;
public static final int LIGHT1_QUADRATIC_ATTENUATION = 130;
public static final int LIGHT2_QUADRATIC_ATTENUATION = 131;
public static final int MATERIAL_AMBIENT = 132;
public static final int MATERIAL_DIFFUSE = 133;
public static final int MATERIAL_SPECULAR = 134;
public static final int MATERIAL_EMISSION = 135;
public static final int MATERIAL_SHININESS = 136;
public static final int FOG_COLOR = 137;
public static final int FOG_DENSITY = 138;
public static final int FOG_START = 139;
public static final int FOG_END = 140;
public static final int ALPHA_FUNC_VALUE = 141;
public static final int CLIP_PLANE0_EQUATION = 142;
public static final int CLIP_PLANE1_EQUATION = 143;
public static final int CLIP_PLANE2_EQUATION = 144;
public static final int CLIP_PLANE3_EQUATION = 145;
public static final int CLIP_PLANE4_EQUATION = 146;
public static final int CLIP_PLANE5_EQUATION = 147;
public static final int GLOBAL_AMBIENT_COLOR = 148;
public static final int FIRST_STATE_UNIFORM_BOOL = POSITION_ENABLED;
public static final int LAST_STATE_UNIFORM_BOOL = NORMALIZE_ENABLED;
public static final int FIRST_STATE_UNIFORM_INT = FOG_MODE;
public static final int LAST_STATE_UNIFORM_INT = LIGHTING_HINT;
public static final int FIRST_NORMAL_UNIFORM = MODELVIEW_PROJECTION_MATRIX;
public static final int LAST_NORMAL_UNIFORM = GLOBAL_AMBIENT_COLOR;
public static final int COUNT = LAST_NORMAL_UNIFORM + 1;
public static final int STATE_UNIFORM_BOOL_COUNT = LAST_STATE_UNIFORM_BOOL - FIRST_STATE_UNIFORM_BOOL + 1;
public static final int STATE_UNIFORM_INT_COUNT = LAST_STATE_UNIFORM_INT - FIRST_STATE_UNIFORM_INT + 1;
};
public OpenGLESState()
{
this.stateShaderPrograms = new java.util.ArrayList<StateShaderProgram >();
this.currentStateShaderProgram = null;
this.stateSize = 1 + (UniformId.STATE_UNIFORM_BOOL_COUNT / 32) + UniformId.STATE_UNIFORM_INT_COUNT;
this.stateSizeBool = 1 + (UniformId.STATE_UNIFORM_BOOL_COUNT / 32);
this.activeTexture = 0;
this.clientActiveTexture = 0;
}
public void init(OpenGLES10Context context)
{
Arrays.fill(currentState, 0);
boundTextures = new int[context.maxTextureImageUnits];
Arrays.fill(boundTextures, 0);
// TODO: Read all the following from text file
shaders[ShaderId.MAIN_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "main.vert");
shaders[ShaderId.LIGHTING_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "lighting.vert");
shaders[ShaderId.LIGHTING_PER_VERTEX_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "lightingPerVertex.vert");
shaders[ShaderId.LIGHTING_PER_FRAGMENT_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "lightingPerFragment.vert");
shaders[ShaderId.FOG_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "fog.glsl");
shaders[ShaderId.CLIP_PLANE_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "clipPlane.vert");
shaders[ShaderId.TEXTURE_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "texture.vert");
shaders[ShaderId.TEXTURE0_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "texture0.vert");
shaders[ShaderId.TEXTURE1_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "texture1.vert");
shaders[ShaderId.TEXTURE2_VERTEX_SHADER] = new ShaderFile(GLES20.GL_VERTEX_SHADER, "texture2.vert");
shaders[ShaderId.MAIN_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "main.frag");
shaders[ShaderId.LIGHTING_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "lighting.frag");
shaders[ShaderId.LIGHTING_PER_FRAGMENT_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "lightingPerFragment.frag");
shaders[ShaderId.FOG_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "fog.glsl");
shaders[ShaderId.ALPHA_TEST_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "alphaTest.frag");
shaders[ShaderId.CLIP_PLANE_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "clipPlane.frag");
shaders[ShaderId.TEXTURE_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "texture.frag");
shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "texture0.frag");
shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "texture1.frag");
shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER] = new ShaderFile(GLES20.GL_FRAGMENT_SHADER, "texture2.frag");
attributes[AttributeId.POSITION] = new Attribute();
attributes[AttributeId.NORMAL] = new Attribute();
attributes[AttributeId.COLOR] = new Attribute();
attributes[AttributeId.TEXCOORD0] = new Attribute();
attributes[AttributeId.TEXCOORD1] = new Attribute();
attributes[AttributeId.TEXCOORD2] = new Attribute();
// Bool uniforms with defines
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.POSITION_ENABLED && UniformId.POSITION_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.POSITION_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "POSITION_ENABLED", false);
}
else
{
uniforms[UniformId.POSITION_ENABLED] = new Uniform<Boolean>(false);
}
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.COLOR_ENABLED && UniformId.COLOR_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.COLOR_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "COLOR_ENABLED", false);
}
else
{
uniforms[UniformId.COLOR_ENABLED] = new Uniform<Boolean>(false);
}
UniformState<Boolean> texcoord0Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXCOORD0_ENABLED && UniformId.TEXCOORD0_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
texcoord0Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "TEXCOORD0_ENABLED", false);
texcoord0Enabled.addDefineShaderFile(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER]);
uniforms[UniformId.TEXCOORD0_ENABLED] = texcoord0Enabled;
}
else
{
uniforms[UniformId.TEXCOORD0_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.TEXCOORD0_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE_VERTEX_SHADER]);
uniforms[UniformId.TEXCOORD0_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE0_VERTEX_SHADER]);
UniformState<Boolean> texcoord1Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXCOORD1_ENABLED && UniformId.TEXCOORD1_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
texcoord1Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "TEXCOORD1_ENABLED", false);
texcoord1Enabled.addDefineShaderFile(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER]);
uniforms[UniformId.TEXCOORD1_ENABLED] = texcoord1Enabled;
}
else
{
uniforms[UniformId.TEXCOORD1_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.TEXCOORD1_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE_VERTEX_SHADER]);
uniforms[UniformId.TEXCOORD1_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE1_VERTEX_SHADER]);
UniformState<Boolean> texcoord2Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXCOORD2_ENABLED && UniformId.TEXCOORD2_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
texcoord2Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "TEXCOORD2_ENABLED", false);
texcoord2Enabled.addDefineShaderFile(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER]);
uniforms[UniformId.TEXCOORD2_ENABLED] = texcoord2Enabled;
}
else
{
uniforms[UniformId.TEXCOORD2_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.TEXCOORD2_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE_VERTEX_SHADER]);
uniforms[UniformId.TEXCOORD2_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE2_VERTEX_SHADER]);
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXTURE0_MATRIX_ENABLED && UniformId.TEXTURE0_MATRIX_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.TEXTURE0_MATRIX_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.TEXTURE_VERTEX_SHADER], "TEXTURE0_MATRIX_ENABLED", false);
}
else
{
uniforms[UniformId.TEXTURE0_MATRIX_ENABLED] = new Uniform<Boolean>(false);
}
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXTURE1_MATRIX_ENABLED && UniformId.TEXTURE1_MATRIX_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.TEXTURE1_MATRIX_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.TEXTURE_VERTEX_SHADER], "TEXTURE1_MATRIX_ENABLED", false);
}
else
{
uniforms[UniformId.TEXTURE1_MATRIX_ENABLED] = new Uniform<Boolean>(false);
}
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXTURE2_MATRIX_ENABLED && UniformId.TEXTURE2_MATRIX_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.TEXTURE2_MATRIX_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.TEXTURE_VERTEX_SHADER], "TEXTURE2_MATRIX_ENABLED", false);
}
else
{
uniforms[UniformId.TEXTURE2_MATRIX_ENABLED] = new Uniform<Boolean>(false);
}
UniformState<Boolean> lightingEnabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.LIGHTING_ENABLED && UniformId.LIGHTING_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
lightingEnabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "LIGHTING_ENABLED", false);
lightingEnabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.LIGHTING_ENABLED] = lightingEnabled;
}
else
{
uniforms[UniformId.LIGHTING_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.LIGHTING_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.LIGHTING_VERTEX_SHADER]);
uniforms[UniformId.LIGHTING_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.LIGHTING_FRAGMENT_SHADER]);
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.LIGHT_MODEL_LOCAL_VIEWER_ENABLED && UniformId.LIGHT_MODEL_LOCAL_VIEWER_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.LIGHT_MODEL_LOCAL_VIEWER_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "LIGHT_MODEL_LOCAL_VIEWER_ENABLED", false);
}
else
{
uniforms[UniformId.LIGHT_MODEL_LOCAL_VIEWER_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.LIGHT_MODEL_LOCAL_VIEWER_ENABLED].setFather(lightingEnabled);
UniformState<Boolean> lightModelTwoSideEnabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.LIGHT_MODEL_TWO_SIDE_ENABLED && UniformId.LIGHT_MODEL_TWO_SIDE_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
lightModelTwoSideEnabled = new UniformState<Boolean>(shaders[ShaderId.LIGHTING_VERTEX_SHADER], "LIGHT_MODEL_TWO_SIDE_ENABLED", false);
lightModelTwoSideEnabled.addDefineShaderFile(shaders[ShaderId.LIGHTING_FRAGMENT_SHADER]);
uniforms[UniformId.LIGHT_MODEL_TWO_SIDE_ENABLED] = lightModelTwoSideEnabled;
}
else
{
uniforms[UniformId.LIGHT_MODEL_TWO_SIDE_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.LIGHT_MODEL_TWO_SIDE_ENABLED].setFather(lightingEnabled);
UniformState<Boolean> light0Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.LIGHT0_ENABLED && UniformId.LIGHT0_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
light0Enabled = new UniformState<Boolean>(shaders[ShaderId.LIGHTING_VERTEX_SHADER], "LIGHT0_ENABLED", false);
light0Enabled.addDefineShaderFile(shaders[ShaderId.LIGHTING_PER_FRAGMENT_FRAGMENT_SHADER]);
uniforms[UniformId.LIGHT0_ENABLED] = light0Enabled;
}
else
{
uniforms[UniformId.LIGHT0_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.LIGHT0_ENABLED].setFather(lightingEnabled);
UniformState<Boolean> light1Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.LIGHT1_ENABLED && UniformId.LIGHT1_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
light1Enabled = new UniformState<Boolean>(shaders[ShaderId.LIGHTING_VERTEX_SHADER], "LIGHT1_ENABLED", false);
light1Enabled.addDefineShaderFile(shaders[ShaderId.LIGHTING_PER_FRAGMENT_FRAGMENT_SHADER]);
uniforms[UniformId.LIGHT1_ENABLED] = light1Enabled;
}
else
{
uniforms[UniformId.LIGHT1_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.LIGHT1_ENABLED].setFather(lightingEnabled);
UniformState<Boolean> light2Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.LIGHT2_ENABLED && UniformId.LIGHT2_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
light2Enabled = new UniformState<Boolean>(shaders[ShaderId.LIGHTING_VERTEX_SHADER], "LIGHT2_ENABLED", false);
light2Enabled.addDefineShaderFile(shaders[ShaderId.LIGHTING_PER_FRAGMENT_FRAGMENT_SHADER]);
uniforms[UniformId.LIGHT2_ENABLED] = light2Enabled;
}
else
{
uniforms[UniformId.LIGHT2_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.LIGHT2_ENABLED].setFather(lightingEnabled);
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.NORMAL_ENABLED && UniformId.NORMAL_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.NORMAL_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "NORMAL_ENABLED", false);
}
else
{
uniforms[UniformId.NORMAL_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.NORMAL_ENABLED].setFather(lightingEnabled);
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.RESCALE_NORMAL_ENABLED && UniformId.RESCALE_NORMAL_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.RESCALE_NORMAL_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "RESCALE_NORMAL_ENABLED", false);
}
else
{
uniforms[UniformId.RESCALE_NORMAL_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.RESCALE_NORMAL_ENABLED].setFather(lightingEnabled);
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.NORMALIZE_ENABLED && UniformId.NORMALIZE_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
uniforms[UniformId.NORMALIZE_ENABLED] = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "NORMALIZE_ENABLED", false);
}
else
{
uniforms[UniformId.NORMALIZE_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.NORMALIZE_ENABLED].setFather(lightingEnabled);
UniformState<Boolean> fogEnabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.FOG_ENABLED && UniformId.FOG_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
fogEnabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "FOG_ENABLED", false);
fogEnabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.FOG_ENABLED] = fogEnabled;
}
else
{
uniforms[UniformId.FOG_ENABLED] = new Uniform<Boolean>(false);
}
UniformState<Boolean> texture0Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXTURE0_ENABLED && UniformId.TEXTURE0_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
texture0Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "TEXTURE0_ENABLED", false);
texture0Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.TEXTURE0_ENABLED] = texture0Enabled;
}
else
{
uniforms[UniformId.TEXTURE0_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.TEXTURE0_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE_FRAGMENT_SHADER]);
uniforms[UniformId.TEXTURE0_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER]);
UniformState<Boolean> texture1Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXTURE1_ENABLED && UniformId.TEXTURE1_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
texture1Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "TEXTURE1_ENABLED", false);
texture1Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.TEXTURE1_ENABLED] = texture1Enabled;
}
else
{
uniforms[UniformId.TEXTURE1_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.TEXTURE1_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE_FRAGMENT_SHADER]);
uniforms[UniformId.TEXTURE1_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER]);
UniformState<Boolean> texture2Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.TEXTURE2_ENABLED && UniformId.TEXTURE2_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
texture2Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "TEXTURE2_ENABLED", false);
texture2Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.TEXTURE2_ENABLED] = texture2Enabled;
}
else
{
uniforms[UniformId.TEXTURE2_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.TEXTURE2_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE_FRAGMENT_SHADER]);
uniforms[UniformId.TEXTURE2_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER]);
UniformState<Boolean> alphaTestEnabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.ALPHA_TEST_ENABLED && UniformId.ALPHA_TEST_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
alphaTestEnabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_FRAGMENT_SHADER], "ALPHA_TEST_ENABLED", false);
uniforms[UniformId.ALPHA_TEST_ENABLED] = alphaTestEnabled;
}
else
{
uniforms[UniformId.ALPHA_TEST_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.ALPHA_TEST_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.ALPHA_TEST_FRAGMENT_SHADER]);
UniformState<Boolean> clipPlane0Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.CLIP_PLANE0_ENABLED && UniformId.CLIP_PLANE0_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
clipPlane0Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "CLIP_PLANE0_ENABLED", false);
clipPlane0Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.CLIP_PLANE0_ENABLED] = clipPlane0Enabled;
}
else
{
uniforms[UniformId.CLIP_PLANE0_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.CLIP_PLANE0_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_VERTEX_SHADER]);
uniforms[UniformId.CLIP_PLANE0_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_FRAGMENT_SHADER]);
UniformState<Boolean> clipPlane1Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.CLIP_PLANE1_ENABLED && UniformId.CLIP_PLANE1_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
clipPlane1Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "CLIP_PLANE1_ENABLED", false);
clipPlane1Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.CLIP_PLANE1_ENABLED] = clipPlane1Enabled;
}
else
{
uniforms[UniformId.CLIP_PLANE1_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.CLIP_PLANE1_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_VERTEX_SHADER]);
uniforms[UniformId.CLIP_PLANE1_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_FRAGMENT_SHADER]);
UniformState<Boolean> clipPlane2Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.CLIP_PLANE2_ENABLED && UniformId.CLIP_PLANE2_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
clipPlane2Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "CLIP_PLANE2_ENABLED", false);
clipPlane2Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.CLIP_PLANE2_ENABLED] = clipPlane2Enabled;
}
else
{
uniforms[UniformId.CLIP_PLANE2_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.CLIP_PLANE2_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_VERTEX_SHADER]);
uniforms[UniformId.CLIP_PLANE2_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_FRAGMENT_SHADER]);
UniformState<Boolean> clipPlane3Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.CLIP_PLANE3_ENABLED && UniformId.CLIP_PLANE3_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
clipPlane3Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "CLIP_PLANE3_ENABLED", false);
clipPlane3Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.CLIP_PLANE3_ENABLED] = clipPlane3Enabled;
}
else
{
uniforms[UniformId.CLIP_PLANE3_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.CLIP_PLANE3_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_VERTEX_SHADER]);
uniforms[UniformId.CLIP_PLANE3_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_FRAGMENT_SHADER]);
UniformState<Boolean> clipPlane4Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.CLIP_PLANE4_ENABLED && UniformId.CLIP_PLANE4_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
clipPlane4Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "CLIP_PLANE4_ENABLED", false);
clipPlane4Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.CLIP_PLANE4_ENABLED] = clipPlane4Enabled;
}
else
{
uniforms[UniformId.CLIP_PLANE4_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.CLIP_PLANE4_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_VERTEX_SHADER]);
uniforms[UniformId.CLIP_PLANE4_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_FRAGMENT_SHADER]);
UniformState<Boolean> clipPlane5Enabled = null;
if (UniformId.FIRST_STATE_UNIFORM_BOOL <= UniformId.CLIP_PLANE5_ENABLED && UniformId.CLIP_PLANE5_ENABLED <= UniformId.LAST_STATE_UNIFORM_BOOL)
{
clipPlane5Enabled = new UniformState<Boolean>(shaders[ShaderId.MAIN_VERTEX_SHADER], "CLIP_PLANE5_ENABLED", false);
clipPlane5Enabled.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.CLIP_PLANE5_ENABLED] = clipPlane5Enabled;
}
else
{
uniforms[UniformId.CLIP_PLANE5_ENABLED] = new Uniform<Boolean>(false);
}
uniforms[UniformId.CLIP_PLANE5_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_VERTEX_SHADER]);
uniforms[UniformId.CLIP_PLANE5_ENABLED].addAdditionalRequiredShaderFile(1, shaders[ShaderId.CLIP_PLANE_FRAGMENT_SHADER]);
// Int uniforms with defines
UniformState<Integer> fogMode = null;
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.FOG_MODE && UniformId.FOG_MODE <= UniformId.LAST_STATE_UNIFORM_INT)
{
fogMode = new UniformState<Integer>(shaders[ShaderId.MAIN_VERTEX_SHADER], "FOG_MODE", GLES10.GL_EXP);
fogMode.addDefineShaderFile(shaders[ShaderId.FOG_FRAGMENT_SHADER]);
uniforms[UniformId.FOG_MODE] = fogMode;
}
else
{
uniforms[UniformId.FOG_MODE] = new Uniform<Integer>(GLES10.GL_EXP);
}
uniforms[UniformId.FOG_MODE].setFather(fogEnabled);
UniformState<Integer> fogHint = null;
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.FOG_HINT && UniformId.FOG_HINT <= UniformId.LAST_STATE_UNIFORM_INT)
{
fogHint = new UniformState<Integer>(shaders[ShaderId.MAIN_VERTEX_SHADER], "FOG_HINT", GLES10.GL_FASTEST);
fogHint.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.FOG_HINT] = fogHint;
}
else
{
uniforms[UniformId.FOG_HINT] = new Uniform<Integer>(GLES10.GL_FASTEST);
}
uniforms[UniformId.FOG_HINT].addAdditionalRequiredShaderFile(GLES10.GL_FASTEST, shaders[ShaderId.FOG_VERTEX_SHADER]);
uniforms[UniformId.FOG_HINT].addAdditionalRequiredShaderFile(GLES10.GL_NICEST, shaders[ShaderId.FOG_FRAGMENT_SHADER]);
uniforms[UniformId.FOG_HINT].setFather(fogEnabled);
UniformState<Integer> lightingHint = null;
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.LIGHTING_HINT && UniformId.LIGHTING_HINT <= UniformId.LAST_STATE_UNIFORM_INT)
{
lightingHint = new UniformState<Integer>(shaders[ShaderId.MAIN_VERTEX_SHADER], "LIGHTING_HINT", GLES10.GL_FASTEST);
lightingHint.addDefineShaderFile(shaders[ShaderId.MAIN_FRAGMENT_SHADER]);
uniforms[UniformId.LIGHTING_HINT] = lightingHint;
}
else
{
uniforms[UniformId.LIGHTING_HINT] = new Uniform<Integer>(GLES10.GL_FASTEST);
}
uniforms[UniformId.LIGHTING_HINT].addAdditionalRequiredShaderFile(GLES10.GL_FASTEST, shaders[ShaderId.LIGHTING_VERTEX_SHADER]);
uniforms[UniformId.LIGHTING_HINT].addAdditionalRequiredShaderFile(GLES10.GL_FASTEST, shaders[ShaderId.LIGHTING_PER_VERTEX_VERTEX_SHADER]);
uniforms[UniformId.LIGHTING_HINT].addAdditionalRequiredShaderFile(GLES10.GL_NICEST, shaders[ShaderId.LIGHTING_FRAGMENT_SHADER]);
uniforms[UniformId.LIGHTING_HINT].addAdditionalRequiredShaderFile(GLES10.GL_NICEST, shaders[ShaderId.LIGHTING_PER_FRAGMENT_VERTEX_SHADER]);
uniforms[UniformId.LIGHTING_HINT].addAdditionalRequiredShaderFile(GLES10.GL_NICEST, shaders[ShaderId.LIGHTING_PER_FRAGMENT_FRAGMENT_SHADER]);
uniforms[UniformId.LIGHTING_HINT].setFather(lightingEnabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.ALPHA_FUNC && UniformId.ALPHA_FUNC <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.ALPHA_FUNC] = new UniformState<Integer>(shaders[ShaderId.ALPHA_TEST_FRAGMENT_SHADER], "ALPHA_FUNC", GLES10.GL_ALWAYS);
}
else
{
uniforms[UniformId.ALPHA_FUNC] = new Uniform<Integer>(GLES10.GL_ALWAYS);
}
uniforms[UniformId.ALPHA_FUNC].setFather(alphaTestEnabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_FORMAT && UniformId.TEXTURE0_FORMAT <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_FORMAT] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_FORMAT", GLES10.GL_RGBA);
}
else
{
uniforms[UniformId.TEXTURE0_FORMAT] = new Uniform<Integer>(GLES10.GL_RGBA);
}
uniforms[UniformId.TEXTURE0_FORMAT].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_FORMAT && UniformId.TEXTURE1_FORMAT <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_FORMAT] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_FORMAT", GLES10.GL_RGBA);
}
else
{
uniforms[UniformId.TEXTURE1_FORMAT] = new Uniform<Integer>(GLES10.GL_RGBA);
}
uniforms[UniformId.TEXTURE1_FORMAT].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_FORMAT && UniformId.TEXTURE2_FORMAT <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_FORMAT] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_FORMAT", GLES10.GL_RGBA);
}
else
{
uniforms[UniformId.TEXTURE2_FORMAT] = new Uniform<Integer>(GLES10.GL_RGBA);
}
uniforms[UniformId.TEXTURE2_FORMAT].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_MODE && UniformId.TEXTURE0_ENV_MODE <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_MODE] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_MODE", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_MODE] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE0_ENV_MODE].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_MODE && UniformId.TEXTURE1_ENV_MODE <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_MODE] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_MODE", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_MODE] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE1_ENV_MODE].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_MODE && UniformId.TEXTURE2_ENV_MODE <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_MODE] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_MODE", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_MODE] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE2_ENV_MODE].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_COMBINE_RGB && UniformId.TEXTURE0_ENV_COMBINE_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_COMBINE_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_COMBINE_RGB", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_COMBINE_RGB] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE0_ENV_COMBINE_RGB].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_COMBINE_RGB && UniformId.TEXTURE1_ENV_COMBINE_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_COMBINE_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_COMBINE_RGB", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_COMBINE_RGB] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE1_ENV_COMBINE_RGB].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_COMBINE_RGB && UniformId.TEXTURE2_ENV_COMBINE_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_COMBINE_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_COMBINE_RGB", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_COMBINE_RGB] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE2_ENV_COMBINE_RGB].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_COMBINE_ALPHA && UniformId.TEXTURE0_ENV_COMBINE_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_COMBINE_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_COMBINE_ALPHA", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_COMBINE_ALPHA] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE0_ENV_COMBINE_ALPHA].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_COMBINE_ALPHA && UniformId.TEXTURE1_ENV_COMBINE_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_COMBINE_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_COMBINE_ALPHA", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_COMBINE_ALPHA] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE1_ENV_COMBINE_ALPHA].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_COMBINE_ALPHA && UniformId.TEXTURE2_ENV_COMBINE_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_COMBINE_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_COMBINE_ALPHA", GLES10.GL_MODULATE);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_COMBINE_ALPHA] = new Uniform<Integer>(GLES10.GL_MODULATE);
}
uniforms[UniformId.TEXTURE2_ENV_COMBINE_ALPHA].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_SRC0_RGB && UniformId.TEXTURE0_ENV_SRC0_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_SRC0_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_SRC0_RGB", 0);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_SRC0_RGB] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE0_ENV_SRC0_RGB].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_SRC1_RGB && UniformId.TEXTURE0_ENV_SRC1_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_SRC1_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_SRC1_RGB", GLES11.GL_PREVIOUS);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_SRC1_RGB] = new Uniform<Integer>(GLES11.GL_PREVIOUS);
}
uniforms[UniformId.TEXTURE0_ENV_SRC1_RGB].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_SRC2_RGB && UniformId.TEXTURE0_ENV_SRC2_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_SRC2_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_SRC2_RGB", GLES11.GL_CONSTANT);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_SRC2_RGB] = new Uniform<Integer>(GLES11.GL_CONSTANT);
}
uniforms[UniformId.TEXTURE0_ENV_SRC2_RGB].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_SRC0_RGB && UniformId.TEXTURE1_ENV_SRC0_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_SRC0_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_SRC0_RGB", 1);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_SRC0_RGB] = new Uniform<Integer>(1);
}
uniforms[UniformId.TEXTURE1_ENV_SRC0_RGB].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_SRC1_RGB && UniformId.TEXTURE1_ENV_SRC1_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_SRC1_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_SRC1_RGB", GLES11.GL_PREVIOUS);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_SRC1_RGB] = new Uniform<Integer>(GLES11.GL_PREVIOUS);
}
uniforms[UniformId.TEXTURE1_ENV_SRC1_RGB].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_SRC2_RGB && UniformId.TEXTURE1_ENV_SRC2_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_SRC2_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_SRC2_RGB", GLES11.GL_CONSTANT);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_SRC2_RGB] = new Uniform<Integer>(GLES11.GL_CONSTANT);
}
uniforms[UniformId.TEXTURE1_ENV_SRC2_RGB].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_SRC0_RGB && UniformId.TEXTURE2_ENV_SRC0_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_SRC0_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_SRC0_RGB", 2);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_SRC0_RGB] = new Uniform<Integer>(2);
}
uniforms[UniformId.TEXTURE2_ENV_SRC0_RGB].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_SRC1_RGB && UniformId.TEXTURE2_ENV_SRC1_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_SRC1_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_SRC1_RGB", GLES11.GL_PREVIOUS);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_SRC1_RGB] = new Uniform<Integer>(GLES11.GL_PREVIOUS);
}
uniforms[UniformId.TEXTURE2_ENV_SRC1_RGB].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_SRC2_RGB && UniformId.TEXTURE2_ENV_SRC2_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_SRC2_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_SRC2_RGB", GLES11.GL_CONSTANT);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_SRC2_RGB] = new Uniform<Integer>(GLES11.GL_CONSTANT);
}
uniforms[UniformId.TEXTURE2_ENV_SRC2_RGB].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_OPERAND0_RGB && UniformId.TEXTURE0_ENV_OPERAND0_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND0_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_OPERAND0_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND0_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE0_ENV_OPERAND0_RGB].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_OPERAND1_RGB && UniformId.TEXTURE0_ENV_OPERAND1_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND1_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_OPERAND1_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND1_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE0_ENV_OPERAND1_RGB].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_OPERAND2_RGB && UniformId.TEXTURE0_ENV_OPERAND2_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND2_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_OPERAND2_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND2_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE0_ENV_OPERAND2_RGB].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_OPERAND0_RGB && UniformId.TEXTURE1_ENV_OPERAND0_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND0_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_OPERAND0_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND0_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE1_ENV_OPERAND0_RGB].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_OPERAND1_RGB && UniformId.TEXTURE1_ENV_OPERAND1_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND1_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_OPERAND1_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND1_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE1_ENV_OPERAND1_RGB].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_OPERAND2_RGB && UniformId.TEXTURE1_ENV_OPERAND2_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND2_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_OPERAND2_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND2_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE1_ENV_OPERAND2_RGB].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_OPERAND0_RGB && UniformId.TEXTURE2_ENV_OPERAND0_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND0_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_OPERAND0_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND0_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE2_ENV_OPERAND0_RGB].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_OPERAND1_RGB && UniformId.TEXTURE2_ENV_OPERAND1_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND1_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_OPERAND1_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND1_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE2_ENV_OPERAND1_RGB].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_OPERAND2_RGB && UniformId.TEXTURE2_ENV_OPERAND2_RGB <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND2_RGB] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_OPERAND2_RGB", GLES10.GL_SRC_COLOR);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND2_RGB] = new Uniform<Integer>(GLES10.GL_SRC_COLOR);
}
uniforms[UniformId.TEXTURE2_ENV_OPERAND2_RGB].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_SRC0_ALPHA && UniformId.TEXTURE0_ENV_SRC0_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_SRC0_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_SRC0_ALPHA", 0); // TODO: default value
}
else
{
uniforms[UniformId.TEXTURE0_ENV_SRC0_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE0_ENV_SRC0_ALPHA].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_SRC1_ALPHA && UniformId.TEXTURE0_ENV_SRC1_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_SRC1_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_SRC1_ALPHA", 0);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_SRC1_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE0_ENV_SRC1_ALPHA].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_SRC2_ALPHA && UniformId.TEXTURE0_ENV_SRC2_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_SRC2_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_SRC2_ALPHA", 0);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_SRC2_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE0_ENV_SRC2_ALPHA].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_SRC0_ALPHA && UniformId.TEXTURE1_ENV_SRC0_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_SRC0_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_SRC0_ALPHA", 0);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_SRC0_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE1_ENV_SRC0_ALPHA].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_SRC1_ALPHA && UniformId.TEXTURE1_ENV_SRC1_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_SRC1_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_SRC1_ALPHA", 0);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_SRC1_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE1_ENV_SRC1_ALPHA].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_SRC2_ALPHA && UniformId.TEXTURE1_ENV_SRC2_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_SRC2_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_SRC2_ALPHA", 0);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_SRC2_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE1_ENV_SRC2_ALPHA].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_SRC0_ALPHA && UniformId.TEXTURE2_ENV_SRC0_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_SRC0_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_SRC0_ALPHA", 0);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_SRC0_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE2_ENV_SRC0_ALPHA].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_SRC1_ALPHA && UniformId.TEXTURE2_ENV_SRC1_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_SRC1_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_SRC1_ALPHA", 0);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_SRC1_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE2_ENV_SRC1_ALPHA].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_SRC2_ALPHA && UniformId.TEXTURE2_ENV_SRC2_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_SRC2_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_SRC2_ALPHA", 0);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_SRC2_ALPHA] = new Uniform<Integer>(0);
}
uniforms[UniformId.TEXTURE2_ENV_SRC2_ALPHA].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_OPERAND0_ALPHA && UniformId.TEXTURE0_ENV_OPERAND0_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND0_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_OPERAND0_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND0_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE0_ENV_OPERAND0_ALPHA].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_OPERAND1_ALPHA && UniformId.TEXTURE0_ENV_OPERAND1_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND1_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_OPERAND1_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND1_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE0_ENV_OPERAND1_ALPHA].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE0_ENV_OPERAND2_ALPHA && UniformId.TEXTURE0_ENV_OPERAND2_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND2_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE0_FRAGMENT_SHADER], "TEXTURE0_ENV_OPERAND2_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE0_ENV_OPERAND2_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE0_ENV_OPERAND2_ALPHA].setFather(texture0Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_OPERAND0_ALPHA && UniformId.TEXTURE1_ENV_OPERAND0_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND0_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_OPERAND0_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND0_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE1_ENV_OPERAND0_ALPHA].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_OPERAND1_ALPHA && UniformId.TEXTURE1_ENV_OPERAND1_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND1_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_OPERAND1_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND1_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE1_ENV_OPERAND1_ALPHA].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE1_ENV_OPERAND2_ALPHA && UniformId.TEXTURE1_ENV_OPERAND2_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND2_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE1_FRAGMENT_SHADER], "TEXTURE1_ENV_OPERAND2_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE1_ENV_OPERAND2_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE1_ENV_OPERAND2_ALPHA].setFather(texture1Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_OPERAND0_ALPHA && UniformId.TEXTURE2_ENV_OPERAND0_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND0_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_OPERAND0_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND0_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE2_ENV_OPERAND0_ALPHA].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_OPERAND1_ALPHA && UniformId.TEXTURE2_ENV_OPERAND1_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND1_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_OPERAND1_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND1_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE2_ENV_OPERAND1_ALPHA].setFather(texture2Enabled);
if (UniformId.FIRST_STATE_UNIFORM_INT <= UniformId.TEXTURE2_ENV_OPERAND2_ALPHA && UniformId.TEXTURE2_ENV_OPERAND2_ALPHA <= UniformId.LAST_STATE_UNIFORM_INT)
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND2_ALPHA] = new UniformState<Integer>(shaders[ShaderId.TEXTURE2_FRAGMENT_SHADER], "TEXTURE2_ENV_OPERAND2_ALPHA", GLES10.GL_SRC_ALPHA);
}
else
{
uniforms[UniformId.TEXTURE2_ENV_OPERAND2_ALPHA] = new Uniform<Integer>(GLES10.GL_SRC_ALPHA);
}
uniforms[UniformId.TEXTURE2_ENV_OPERAND2_ALPHA].setFather(texture2Enabled);
// Non-state uniforms
uniforms[UniformId.LIGHT0_AMBIENT] = new Uniform4f(0.0f, 0.0f, 0.0f, 1.0f);
uniforms[UniformId.LIGHT1_AMBIENT] = new Uniform4f(0.0f, 0.0f, 0.0f, 1.0f);
uniforms[UniformId.LIGHT2_AMBIENT] = new Uniform4f(0.0f, 0.0f, 0.0f, 1.0f);
uniforms[UniformId.LIGHT0_DIFFUSE] = new Uniform4f(1.0f, 1.0f, 1.0f, 1.0f);
uniforms[UniformId.LIGHT1_DIFFUSE] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.LIGHT2_DIFFUSE] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.LIGHT0_SPECULAR] = new Uniform4f(1.0f, 1.0f, 1.0f, 1.0f);
uniforms[UniformId.LIGHT1_SPECULAR] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.LIGHT2_SPECULAR] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.LIGHT0_POSITION] = new Uniform4f(0.0f, 0.0f, 1.0f, 0.0f);
uniforms[UniformId.LIGHT1_POSITION] = new Uniform4f(0.0f, 0.0f, 1.0f, 0.0f);
uniforms[UniformId.LIGHT2_POSITION] = new Uniform4f(0.0f, 0.0f, 1.0f, 0.0f);
uniforms[UniformId.LIGHT0_SPOT_DIRECTION] = new Uniform3f(0.0f, 0.0f, -1.0f);
uniforms[UniformId.LIGHT1_SPOT_DIRECTION] = new Uniform3f(0.0f, 0.0f, -1.0f);
uniforms[UniformId.LIGHT2_SPOT_DIRECTION] = new Uniform3f(0.0f, 0.0f, -1.0f);
uniforms[UniformId.LIGHT0_SPOT_EXPONENT] = new Uniform<Float>(0.0f);
uniforms[UniformId.LIGHT1_SPOT_EXPONENT] = new Uniform<Float>(0.0f);
uniforms[UniformId.LIGHT2_SPOT_EXPONENT] = new Uniform<Float>(0.0f);
uniforms[UniformId.LIGHT0_SPOT_CUTOFF_ANGLE_COS] = new Uniform<Float>(-1.0f);
uniforms[UniformId.LIGHT1_SPOT_CUTOFF_ANGLE_COS] = new Uniform<Float>(-1.0f);
uniforms[UniformId.LIGHT2_SPOT_CUTOFF_ANGLE_COS] = new Uniform<Float>(-1.0f);
uniforms[UniformId.LIGHT0_CONSTANT_ATTENUATION] = new Uniform<Float>(1.0f);
uniforms[UniformId.LIGHT1_CONSTANT_ATTENUATION] = new Uniform<Float>(1.0f);
uniforms[UniformId.LIGHT2_CONSTANT_ATTENUATION] = new Uniform<Float>(1.0f);
uniforms[UniformId.LIGHT0_LINEAR_ATTENUATION] = new Uniform<Float>(0.0f);
uniforms[UniformId.LIGHT1_LINEAR_ATTENUATION] = new Uniform<Float>(0.0f);
uniforms[UniformId.LIGHT2_LINEAR_ATTENUATION] = new Uniform<Float>(0.0f);
uniforms[UniformId.LIGHT0_QUADRATIC_ATTENUATION] = new Uniform<Float>(0.0f);
uniforms[UniformId.LIGHT1_QUADRATIC_ATTENUATION] = new Uniform<Float>(0.0f);
uniforms[UniformId.LIGHT2_QUADRATIC_ATTENUATION] = new Uniform<Float>(0.0f);
uniforms[UniformId.MATERIAL_AMBIENT] = new Uniform4f(0.2f, 0.2f, 0.2f, 1.0f);
uniforms[UniformId.MATERIAL_DIFFUSE] = new Uniform4f(0.8f, 0.8f, 0.8f, 1.0f);
uniforms[UniformId.MATERIAL_SPECULAR] = new Uniform4f(0.0f, 0.0f, 0.0f, 1.0f);
uniforms[UniformId.MATERIAL_EMISSION] = new Uniform4f(0.0f, 0.0f, 0.0f, 1.0f);
uniforms[UniformId.MATERIAL_SHININESS] = new Uniform<Float>(0.0f);
uniforms[UniformId.MODELVIEW_MATRIX] = new Uniform<Matrix4x4f>();
uniforms[UniformId.MODELVIEW_PROJECTION_MATRIX] = new Uniform<Matrix4x4f>();
uniforms[UniformId.TRANPOSE_ADJOINT_MODEL_VIEW_MATRIX] = new Uniform<Matrix3x3f>();
uniforms[UniformId.RESCALE_NORMAL_FACTOR] = new Uniform<Float>(1.0f);
uniforms[UniformId.FOG_COLOR] = new Uniform3f(0.0f, 0.0f, 0.0f);
uniforms[UniformId.FOG_DENSITY] = new Uniform<Float>(1.0f);
uniforms[UniformId.FOG_START] = new Uniform<Float>(1.0f);
uniforms[UniformId.FOG_END] = new Uniform<Float>(0.0f);
uniforms[UniformId.GLOBAL_AMBIENT_COLOR] = new Uniform4f(0.2f, 0.2f, 0.2f, 1.0f);
uniforms[UniformId.ALPHA_FUNC_VALUE] = new Uniform<Float>(0.0f);
uniforms[UniformId.CLIP_PLANE0_EQUATION] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.CLIP_PLANE1_EQUATION] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.CLIP_PLANE2_EQUATION] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.CLIP_PLANE3_EQUATION] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.CLIP_PLANE4_EQUATION] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.CLIP_PLANE5_EQUATION] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.TEXTURE0_ENV_COLOR] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.TEXTURE1_ENV_COLOR] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.TEXTURE2_ENV_COLOR] = new Uniform4f(0.0f, 0.0f, 0.0f, 0.0f);
uniforms[UniformId.TEXTURE0_ENV_RGB_SCALE] = new Uniform<Float>(1.0f);
uniforms[UniformId.TEXTURE1_ENV_RGB_SCALE] = new Uniform<Float>(1.0f);
uniforms[UniformId.TEXTURE2_ENV_RGB_SCALE] = new Uniform<Float>(1.0f);
uniforms[UniformId.TEXTURE0_ENV_ALPHA_SCALE] = new Uniform<Float>(1.0f);
uniforms[UniformId.TEXTURE1_ENV_ALPHA_SCALE] = new Uniform<Float>(1.0f);
uniforms[UniformId.TEXTURE2_ENV_ALPHA_SCALE] = new Uniform<Float>(1.0f);
uniforms[UniformId.TEXTURE0_ENV_BLUR_AMOUNT] = new Uniform<Float>(0.0f);
uniforms[UniformId.TEXTURE1_ENV_BLUR_AMOUNT] = new Uniform<Float>(0.0f);
uniforms[UniformId.TEXTURE2_ENV_BLUR_AMOUNT] = new Uniform<Float>(0.0f);
uniforms[UniformId.TEXTURE0_SAMPLER] = new Uniform<Integer>(0);
uniforms[UniformId.TEXTURE1_SAMPLER] = new Uniform<Integer>(1);
uniforms[UniformId.TEXTURE2_SAMPLER] = new Uniform<Integer>(2);
uniforms[UniformId.TEXTURE0_MATRIX] = new Uniform<Matrix4x4f>();
uniforms[UniformId.TEXTURE1_MATRIX] = new Uniform<Matrix4x4f>();
uniforms[UniformId.TEXTURE2_MATRIX] = new Uniform<Matrix4x4f>();
}
private boolean setCurrentProgram_uberShaderCompiled = false;
public void setCurrentProgram()
{
if (OpenGLESConfig.USE_ONLY_UBER_SHADER)
{
// static boolean uberShaderCompiled = false;
if (!setCurrentProgram_uberShaderCompiled)
{
java.util.ArrayList<ShaderSource > vertexShaderSources = new java.util.ArrayList<ShaderSource >();
for (int i = ShaderId.FIRST_VERTEX_SHADER; i <= ShaderId.LAST_VERTEX_SHADER; i++)
{
vertexShaderSources.add(new ShaderSource(shaders[i], ""));
}
java.util.ArrayList<ShaderSource > fragmentShaderSources = new java.util.ArrayList<ShaderSource >();
for (int i = ShaderId.FIRST_FRAGMENT_SHADER; i <= ShaderId.LAST_FRAGMENT_SHADER; i++)
{
fragmentShaderSources.add(new ShaderSource(shaders[i], ""));
}
Shader vertexShader = new Shader(GLES20.GL_VERTEX_SHADER, vertexShaderSources);
Shader fragmentShader = new Shader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderSources);
currentStateShaderProgram = new StateShaderProgram(getCopyOfCurrentState(), new ShaderProgram("UberShader", vertexShader, fragmentShader));
stateShaderPrograms.add(currentStateShaderProgram);
currentStateShaderProgram.shaderProgram.use();
setActiveUniformLocations(currentStateShaderProgram.shaderProgram.getActiveUniforms());
setActiveAttributeLocations(currentStateShaderProgram.shaderProgram.getActiveAttributes());
setCurrentProgram_uberShaderCompiled = true;
}
uploadUniforms();
uploadAttributes();
return;
}
StateShaderProgram oldStateShaderProgram = currentStateShaderProgram;
// Set current state to faster array
int currentBit = 0;
for (int i = UniformId.FIRST_STATE_UNIFORM_BOOL; i <= UniformId.LAST_STATE_UNIFORM_BOOL; i++)
{
if (currentBit % 32 == 0)
{
currentState[currentBit / 32] = 0;
}
boolean value = ((UniformState<Boolean>)(uniforms[i])).getValue();
currentState[currentBit / 32] |= (value ? 1 : 0) << (currentBit % 32);
currentBit++;
}
int index = stateSizeBool;
for (int i = UniformId.FIRST_STATE_UNIFORM_INT; i <= UniformId.LAST_STATE_UNIFORM_INT; i++)
{
int val = ((UniformState<Integer>)(uniforms[i])).getValue();
currentState[index] = val;
index++;
}
// Check if it matches to any existing state
int stateIndex = -1;
for (int i = 0; i < stateShaderPrograms.size(); i++)
{
boolean stateFound = true;
for (int j = 0; j < stateSize; j++)
{
if (currentState[j] != stateShaderPrograms.get(i).state[j])
{
stateFound = false;
break;
}
}
if (stateFound)
{
stateIndex = i;
break;
}
}
// If matched, fetch shader program from cache
if (stateIndex >= 0)
{
currentStateShaderProgram = stateShaderPrograms.get(stateIndex);
}
else
{
Log.d(TAG, "State binary presentation:");
Log.d(TAG, "Bool states: ");
for (int i = 0; i < stateSizeBool; i++)
{
Log.d(TAG, Integer.toBinaryString(currentState[i]));
}
Log.d(TAG, "Int states: ");
for (int i = stateSizeBool; i < stateSize; i++)
{
Log.d(TAG, Integer.toHexString(currentState[i]));
}
java.util.ArrayList<ShaderSource > vertexShaderSources = new java.util.ArrayList<ShaderSource >();
java.util.ArrayList<ShaderSource > fragmentShaderSources = new java.util.ArrayList<ShaderSource >();
addRequiredShaderSources(vertexShaderSources, fragmentShaderSources);
addDefinesToShaderSources(vertexShaderSources, fragmentShaderSources);
if (true)
{
Log.d(TAG, "Using shader files:");
for (int i = 0; i < vertexShaderSources.size(); i++)
{
Log.d(TAG, vertexShaderSources.get(i).getFile().getName());
}
for (int i = 0; i < fragmentShaderSources.size(); i++)
{
Log.d(TAG, fragmentShaderSources.get(i).getFile().getName());
}
}
Shader vertexShader = new Shader(GLES20.GL_VERTEX_SHADER, vertexShaderSources);
Shader fragmentShader = new Shader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderSources);
currentStateShaderProgram = new StateShaderProgram(getCopyOfCurrentState(), new ShaderProgram("Optimized Shader " + (stateShaderPrograms.size() + 1), vertexShader, fragmentShader));
stateShaderPrograms.add(currentStateShaderProgram);
}
if (currentStateShaderProgram != oldStateShaderProgram)
{
currentStateShaderProgram.shaderProgram.use();
setActiveUniformLocations(currentStateShaderProgram.shaderProgram.getActiveUniforms());
setActiveAttributeLocations(currentStateShaderProgram.shaderProgram.getActiveAttributes());
}
uploadAttributes();
uploadUniforms();
}
public void setActiveTexture(int a)
{
activeTexture = a;
}
public int getActiveTexture()
{
return activeTexture;
}
public void setClientActiveTexture(int a)
{
clientActiveTexture = a;
}
public int getClientActiveTexture()
{
return clientActiveTexture;
}
public void setBoundTextureFormat(int format)
{
boundTextureFormats.put(boundTextures[activeTexture], format);
}
public void setBoundTexture(int i)
{
boundTextures[activeTexture] = i;
}
public void setPosition(int size, int type, int stride, java.nio.Buffer pointer)
{
attributes[AttributeId.POSITION].setValues(size, type, stride, pointer);
}
public void setNormal(int size, int type, int stride, java.nio.Buffer pointer)
{
attributes[AttributeId.NORMAL].setValues(size, type, stride, pointer);
}
public void setColor(int size, int type, int stride, java.nio.Buffer pointer)
{
attributes[AttributeId.COLOR].setValues(size, type, stride, pointer);
}
public void setTexCoord(int size, int type, int stride, java.nio.Buffer pointer)
{
attributes[AttributeId.TEXCOORD0 + clientActiveTexture].setValues(size, type, stride, pointer);
}
public void setPosition(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.POSITION_ENABLED])).setValue(enabled);
attributes[AttributeId.POSITION].setEnabled(enabled);
}
public void setNormal(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.NORMAL_ENABLED])).setValue(enabled);
attributes[AttributeId.NORMAL].setEnabled(enabled);
}
public boolean isNormal()
{
return ((Uniform<Boolean>)(uniforms[UniformId.NORMAL_ENABLED])).getValue();
}
public void setColor(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.COLOR_ENABLED])).setValue(enabled);
attributes[AttributeId.COLOR].setEnabled(enabled);
}
public void setTexCoord(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.TEXCOORD0_ENABLED + clientActiveTexture])).setValue(enabled);
attributes[AttributeId.TEXCOORD0 + clientActiveTexture].setEnabled(enabled);
}
public boolean isTexCoord(int index)
{
return ((Uniform<Boolean>)(uniforms[UniformId.TEXCOORD0_ENABLED + index])).getValue();
}
public void setTexture(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.TEXTURE0_ENABLED + activeTexture])).setValue(enabled);
}
public void setTextureFormat()
{
((Uniform<Integer>)(uniforms[UniformId.TEXTURE0_FORMAT + activeTexture])).setValue(boundTextureFormats.get(boundTextures[activeTexture]));
}
public void setTextureEnvMode(int val)
{
((Uniform<Integer>)(uniforms[UniformId.TEXTURE0_ENV_MODE + activeTexture])).setValue(val);
}
public void setTextureEnvColor(Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.TEXTURE0_ENV_COLOR + activeTexture])).setValue(vec);
}
public void setTextureEnvCombineRGB(int val)
{
((Uniform<Integer>)(uniforms[UniformId.TEXTURE0_ENV_COMBINE_RGB + activeTexture])).setValue(val);
}
public void setTextureEnvCombineAlpha(int val)
{
((Uniform<Integer>)(uniforms[UniformId.TEXTURE0_ENV_COMBINE_ALPHA + activeTexture])).setValue(val);
}
public void setTextureEnvSrcRGB(int index, int val)
{
((Uniform<Integer>)(uniforms[UniformId.TEXTURE0_ENV_SRC0_RGB + index + 3 * activeTexture])).setValue(val);
}
public void setTextureEnvOperandRGB(int index, int val)
{
((Uniform<Integer>)(uniforms[UniformId.TEXTURE0_ENV_OPERAND0_RGB + index + 3 * activeTexture])).setValue(val);
}
public void setTextureEnvSrcAlpha(int index, int val)
{
((Uniform<Integer>)(uniforms[UniformId.TEXTURE0_ENV_SRC0_ALPHA + index + 3 * activeTexture])).setValue(val);
}
public void setTextureEnvOperandAlpha(int index, int val)
{
((Uniform<Integer>)(uniforms[UniformId.TEXTURE0_ENV_OPERAND0_ALPHA + index + 3 * activeTexture])).setValue(val);
}
public void setTextureEnvRGBScale(float val)
{
((Uniform<Float>)(uniforms[UniformId.TEXTURE0_ENV_RGB_SCALE + activeTexture])).setValue(val);
}
public void setTextureEnvAlphaScale(float val)
{
((Uniform<Float>)(uniforms[UniformId.TEXTURE0_ENV_ALPHA_SCALE + activeTexture])).setValue(val);
}
public void setTextureEnvBlurAmount(float val)
{
((Uniform<Float>)(uniforms[UniformId.TEXTURE0_ENV_BLUR_AMOUNT + activeTexture])).setValue(val);
}
public void setLightModelLocalViewer(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.LIGHT_MODEL_LOCAL_VIEWER_ENABLED])).setValue(enabled);
}
public void setLightModelTwoSide(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.LIGHT_MODEL_TWO_SIDE_ENABLED])).setValue(enabled);
}
public void setLighting(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.LIGHTING_ENABLED])).setValue(enabled);
}
public void setLightingHint(int val)
{
((Uniform<Integer>)(uniforms[UniformId.LIGHTING_HINT])).setValue(val);
}
public void setLight(int light, boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.LIGHT0_ENABLED + light])).setValue(enabled);
}
public void setLightAmbient(int light, Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.LIGHT0_AMBIENT + light])).setValue(vec);
}
public void setLightDiffuse(int light, Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.LIGHT0_DIFFUSE + light])).setValue(vec);
}
public void setLightSpecular(int light, Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.LIGHT0_SPECULAR + light])).setValue(vec);
}
public void setLightPosition(int light, Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.LIGHT0_POSITION + light])).setValue(vec);
}
public void setLightSpotDirection(int light, Vector3f vec)
{
((Uniform<Vector3f>)(uniforms[UniformId.LIGHT0_SPOT_DIRECTION + light])).setValue(new Vector3f(vec));
}
public void setLightSpotExponent(int light, float val)
{
((Uniform<Float>)(uniforms[UniformId.LIGHT0_SPOT_EXPONENT + light])).setValue(val);
}
public void setLightSpotCutoffAngleCos(int light, float val)
{
((Uniform<Float>)(uniforms[UniformId.LIGHT0_SPOT_CUTOFF_ANGLE_COS + light])).setValue(val);
}
public void setLightConstantAttenuation(int light, float val)
{
((Uniform<Float>)(uniforms[UniformId.LIGHT0_CONSTANT_ATTENUATION + light])).setValue(val);
}
public void setLightLinearAttenuation(int light, float val)
{
((Uniform<Float>)(uniforms[UniformId.LIGHT0_LINEAR_ATTENUATION + light])).setValue(val);
}
public void setLightQuadraticAttenuation(int light, float val)
{
((Uniform<Float>)(uniforms[UniformId.LIGHT0_QUADRATIC_ATTENUATION + light])).setValue(val);
}
public void setMaterialAmbient(Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.MATERIAL_AMBIENT])).setValue(vec);
}
public void setMaterialDiffuse(Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.MATERIAL_DIFFUSE])).setValue(vec);
}
public void setMaterialSpecular(Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.MATERIAL_SPECULAR])).setValue(vec);
}
public void setMaterialEmission(Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.MATERIAL_EMISSION])).setValue(vec);
}
public void setMaterialShininess(float val)
{
((Uniform<Float>)(uniforms[UniformId.MATERIAL_SHININESS])).setValue(val);
}
public void setModelViewMatrix(Matrix4x4f mat)
{
((Uniform<Matrix4x4f>)(uniforms[UniformId.MODELVIEW_MATRIX])).setValue(new Matrix4x4f(mat));
}
public void setModelViewProjectionMatrix(Matrix4x4f mat)
{
((Uniform<Matrix4x4f>)(uniforms[UniformId.MODELVIEW_PROJECTION_MATRIX])).setValue(new Matrix4x4f(mat));
}
public void setTransposeAdjointModelViewMatrix(Matrix3x3f mat)
{
((Uniform<Matrix3x3f>)(uniforms[UniformId.TRANPOSE_ADJOINT_MODEL_VIEW_MATRIX])).setValue(new Matrix3x3f(mat));
}
public void setNormalize(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.NORMALIZE_ENABLED])).setValue(enabled);
}
public void setRescaleNormal(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.RESCALE_NORMAL_ENABLED])).setValue(enabled);
}
public boolean isRescaleNormal()
{
return ((Uniform<Boolean>)(uniforms[UniformId.RESCALE_NORMAL_ENABLED])).getValue();
}
public void setRescaleNormalFactor(float val)
{
((Uniform<Float>)(uniforms[UniformId.RESCALE_NORMAL_FACTOR])).setValue(val);
}
public void setGlobalAmbientColor(Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.GLOBAL_AMBIENT_COLOR])).setValue(vec);
}
public void setFog(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.FOG_ENABLED])).setValue(enabled);
}
public void setFogColor(Vector3f vec)
{
((Uniform<Vector3f>)(uniforms[UniformId.FOG_COLOR])).setValue(vec);
}
public void setFogMode(int val)
{
((Uniform<Integer>)(uniforms[UniformId.FOG_MODE])).setValue(val);
}
public void setFogDensity(float val)
{
((Uniform<Float>)(uniforms[UniformId.FOG_DENSITY])).setValue(val);
}
public void setFogStart(float val)
{
((Uniform<Float>)(uniforms[UniformId.FOG_START])).setValue(val);
}
public void setFogEnd(float val)
{
((Uniform<Float>)(uniforms[UniformId.FOG_END])).setValue(val);
}
public void setFogHint(int val)
{
((Uniform<Integer>)(uniforms[UniformId.FOG_HINT])).setValue(val);
}
public void setAlphaTest(boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.ALPHA_TEST_ENABLED])).setValue(enabled);
}
public void setAlphaFunc(int val)
{
((Uniform<Integer>)(uniforms[UniformId.ALPHA_FUNC])).setValue(val);
}
public void setAlphaFuncValue(float val)
{
((Uniform<Float>)(uniforms[UniformId.ALPHA_FUNC_VALUE])).setValue(val);
}
public void setClipPlane(int clipPlaneIndex, boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.CLIP_PLANE0_ENABLED + clipPlaneIndex])).setValue(enabled);
}
public void setClipPlane(int clipPlaneIndex, Vector4f vec)
{
((Uniform<Vector4f>)(uniforms[UniformId.CLIP_PLANE0_EQUATION + clipPlaneIndex])).setValue(vec);
}
public void getClipPlane(int clipPlaneIndex, float[] eqn)
{
Vector4f vec = ((Uniform<Vector4f>)(uniforms[UniformId.CLIP_PLANE0_EQUATION + clipPlaneIndex])).getValue();
eqn[0] = vec.getItem(0);
eqn[1] = vec.getItem(1);
eqn[2] = vec.getItem(2);
eqn[3] = vec.getItem(3);
}
public void setTextureMatrix(int index, Matrix4x4f mat)
{
((Uniform<Matrix4x4f>)(uniforms[UniformId.TEXTURE0_MATRIX + index])).setValue(mat);
}
public void setTextureMatrix(int index, boolean enabled)
{
((Uniform<Boolean>)(uniforms[UniformId.TEXTURE0_MATRIX_ENABLED + index])).setValue(enabled);
}
public int getCachedShaderAmount()
{
return stateShaderPrograms.size();
}
private void setActiveUniformLocations(java.util.ArrayList<UniformSimple > activeUniforms)
{
for (int i = 0; i < activeUniforms.size(); i++)
{
UniformSimple activeUniform = activeUniforms.get(i);
int index = activeUniform.getId();
uniforms[index].setLocation(activeUniform.getLocation());
}
}
private void setActiveAttributeLocations(java.util.ArrayList<AttributeSimple > activeAttributes)
{
for (int i = 0; i < activeAttributes.size(); i++)
{
AttributeSimple activeAttribute = activeAttributes.get(i);
int index = activeAttribute.getId();
attributes[index].setLocation(activeAttribute.getLocation());
}
}
private void uploadAttributes()
{
java.util.ArrayList<AttributeSimple > activeAttributes = currentStateShaderProgram.shaderProgram.getActiveAttributes();
for (int i = 0; i < activeAttributes.size(); i++)
{
AttributeSimple activeAttribute = activeAttributes.get(i);
attributes[activeAttribute.getId()].upload(currentStateShaderProgram.shaderProgram);
}
}
private void uploadUniforms()
{
java.util.ArrayList<UniformSimple > activeUniforms = currentStateShaderProgram.shaderProgram.getActiveUniforms();
for (int i = 0; i < activeUniforms.size(); i++)
{
UniformSimple activeUniform = activeUniforms.get(i);
uniforms[activeUniform.getId()].upload(currentStateShaderProgram.shaderProgram);
}
}
private void addRequiredShaderSources(java.util.ArrayList<ShaderSource > vertexShaderSources, java.util.ArrayList<ShaderSource > fragmentShaderSources)
{
vertexShaderSources.add(new ShaderSource(shaders[ShaderId.MAIN_VERTEX_SHADER]));
fragmentShaderSources.add(new ShaderSource(shaders[ShaderId.MAIN_FRAGMENT_SHADER]));
for (int i = 0; i < UniformId.COUNT; i++)
{
java.util.ArrayList<ShaderFile > additionalRequiredShaderFiles = uniforms[i].getAdditionalRequiredShaderFiles();
for (int j = 0; j < additionalRequiredShaderFiles.size(); j++)
{
boolean shaderFileFound = false;
if (additionalRequiredShaderFiles.get(j).getType() == GLES20.GL_VERTEX_SHADER)
{
for (int k = 0; k < vertexShaderSources.size(); k++)
{
if (vertexShaderSources.get(k).getFile() == additionalRequiredShaderFiles.get(j))
{
shaderFileFound = true;
break;
}
}
if (!shaderFileFound)
{
vertexShaderSources.add(new ShaderSource(additionalRequiredShaderFiles.get(j)));
}
}
else
{
for (int k = 0; k < fragmentShaderSources.size(); k++)
{
if (fragmentShaderSources.get(k).getFile() == additionalRequiredShaderFiles.get(j))
{
shaderFileFound = true;
break;
}
}
if (!shaderFileFound)
{
fragmentShaderSources.add(new ShaderSource(additionalRequiredShaderFiles.get(j)));
}
}
}
}
}
private void addDefinesToShaderSources(java.util.ArrayList<ShaderSource > vertexShaderSources, java.util.ArrayList<ShaderSource > fragmentShaderSources)
{
for (int i = UniformId.FIRST_STATE_UNIFORM_BOOL; i <= UniformId.LAST_STATE_UNIFORM_BOOL; i++)
{
UniformState<Boolean> uniformState = (UniformState<Boolean>)(uniforms[i]);
java.util.ArrayList<ShaderFile > defineShaderFiles = uniformState.getDefineShaderFiles();
String define = uniformState.getDefine();
addDefineToShaderSources(define, defineShaderFiles, vertexShaderSources, fragmentShaderSources);
}
for (int i = UniformId.FIRST_STATE_UNIFORM_INT; i <= UniformId.LAST_STATE_UNIFORM_INT; i++)
{
UniformState<Integer> uniformState = (UniformState<Integer>)(uniforms[i]);
java.util.ArrayList<ShaderFile > defineShaderFiles = uniformState.getDefineShaderFiles();
String define = uniformState.getDefine();
addDefineToShaderSources(define, defineShaderFiles, vertexShaderSources, fragmentShaderSources);
}
// Additional defines for shader optimization
boolean light = uniforms[UniformId.LIGHTING_ENABLED] instanceof UniformState<?> ? true : false;
boolean light0 = uniforms[UniformId.LIGHT0_ENABLED] instanceof UniformState<?> ? true : false;
boolean light1 = uniforms[UniformId.LIGHT1_ENABLED] instanceof UniformState<?> ? true : false;
boolean light2 = uniforms[UniformId.LIGHT2_ENABLED] instanceof UniformState<?> ? true : false;
if (light && light0 && light1 && light2)
{
boolean nonDirectionalLightEnabled = false;
if (((Uniform<Boolean>)(uniforms[UniformId.LIGHTING_ENABLED])).getValue())
{
for (int i = 0; i < 3; i++)
{
if (((Uniform<Boolean>)(uniforms[UniformId.LIGHT0_ENABLED + i])).getValue() && ((Uniform<Vector4f>)(uniforms[UniformId.LIGHT0_POSITION + i])).getValue().v[3] != 0.0f)
{
nonDirectionalLightEnabled = true;
break;
}
}
}
String nonDirectionalLightEnabledString = "#define NON_DIRECTIONAL_LIGHT_ENABLED ";
nonDirectionalLightEnabledString += nonDirectionalLightEnabled ? "1" : "0";
nonDirectionalLightEnabledString += "\n";
vertexShaderSources.get(ShaderId.MAIN_VERTEX_SHADER).appendAdditionalSource(nonDirectionalLightEnabledString);
}
}
private void addDefineToShaderSources(String define, java.util.ArrayList<ShaderFile > shaderFiles, java.util.ArrayList<ShaderSource > vertexShaderSources, java.util.ArrayList<ShaderSource > fragmentShaderSources)
{
for (int i = 0; i < shaderFiles.size(); i++)
{
if (shaderFiles.get(i).getType() == GLES20.GL_VERTEX_SHADER)
{
for (int j = 0; j < vertexShaderSources.size(); j++)
{
if (shaderFiles.get(i) == vertexShaderSources.get(j).getFile())
{
vertexShaderSources.get(j).appendAdditionalSource(define);
}
}
}
else
{
for (int j = 0; j < fragmentShaderSources.size(); j++)
{
if (shaderFiles.get(i) == fragmentShaderSources.get(j).getFile())
{
fragmentShaderSources.get(j).appendAdditionalSource(define);
}
}
}
}
}
private int[] getCopyOfCurrentState()
{
int[] state = new int[stateSize];
for (int i = 0; i < stateSize; i++)
{
state[i] = currentState[i];
}
return state;
}
}