This is my first post, and I've only recently started programming for Android and OpenGl, so be nice to me
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.
My shader currently is:
- Code: Select all
precision lowp float;
varying vec2 v_texCoord;
uniform sampler2D s_texture;
uniform int s_palette; // Specify a palette of 64 rgb entries
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);
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 and that i should add #version 130 at the top of my file. However, adding that had no effect and my shader still doesn't work.
Does anyone have any ideas therefore how to get around this rather crippling flaw in my plan.