Hi. I am developing a small prototype and I wrote a small shader for the main character. It just multiplies pixel colors by custom value(from 0 to 1 to make a character become more dark) calculated in the game.
It works fine on PC but on android it doesn’t show a texture.
This is my first experience width shaders so I am not sure what the problem can be.
Fragment shader:
#ifdef GL_ES
precision lowp float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform sampler2D CC_Texture0;
uniform float u_m_1;
void main()
{
gl_FragColor = vec4(u_m_1, u_m_1, u_m_1, 255) * v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
}
Creating a shader:
CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
CCGLProgram *shader = new CCGLProgram();
shader->initWithVertexShaderFilename("user_vertex_shader.vsh", "user_fragment_shader.fsh");
shader->addAttribute("u_m_1", _multiplier_attr);
shader->link();
shader->updateUniforms();
CCShaderCache::sharedShaderCache()->addProgram(shader, "user_shader");
Applying this shader to user sprite:
CCGLProgram *program = CCShaderCache::sharedShaderCache()->programForKey("user_shader");
getUserSprite()->setShaderProgram(program);
Later updating the value:
CCGLProgram *program = CCShaderCache::sharedShaderCache()->programForKey("user_shader");
glUseProgram(program->getProgram());
glUniform1f( glGetUniformLocation(program->getProgram(), "u_m_1"), params );
Really need someone’s help.
Thanks.