title: Array indexing in fragment shader
body: <p>This is my first post, and I've only recently started programming for Android and OpenGl, so be nice to me :)</p>
  
  <p>I'm writing a little app that will include one screen that will use a palettised image for quick changes in colour. For speed I thought I could implement the system using a shader, so I have a shader up and running using the fantastic examples from the Open GL ES 2.0 programming guide. The problem that I've been banging my head over for the past couple of days is coming up with a way of referencing my palette data within the shader.</p>
  
  <p>My shader currently is:</p>
  
  <pre><code>precision lowp float;
  varying vec2      v_texCoord;
  uniform sampler2D s_texture;
  uniform int       s_palette[204];  // Specify a palette of 64 rgb entries
  
  void main()
  {
     vec4 col = texture2D( s_texture, v_texCoord );
     int index = (int(col.r * 255.0) * 3;
  
     gl_FragColor = vec4(float(s_palette[index]) / 255.0, float(s_palette[index+1]) / 255.0,  float(s_palette[index+2]) / 255.0, 1.0);
  }
  </code></pre>
  
  <p>After playing around with this for ages and not getting very far I discovered that if I reference my palette data by a constant value I could get results, but not by referencing with a variable. Having searched for a while with Google I discovered that this was just the way it was with GLSL 1.1 and was fixed with GLSL 1.3.  I believe Android is running on GLSL ES1.0 which is based on GLSL 1.3, so it should work, but I can't for the life of my get it to work.  I can't find anything in the GLSLES specs that would suggest it's not possible either, so where am I going wrong?</p>
  
  <p>If it simply isn't possible, then does anyone have any other ideas how to get around this rather crippling flaw in my plan?</p>