对一个精灵做灰度效果,结果一直是黑色,由于对shader不懂,求各位大小指点。谢谢
function graySprite(sprite)
local pProgram = cc.GLProgram:create("shader/ccShader_PositionTextureColor.vsh", "shader/alphaSprite.fsh")
pProgram:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION,cc.VERTEX_ATTRIB_POSITION)
pProgram:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR,cc.VERTEX_ATTRIB_COLOR)
pProgram:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD,cc.VERTEX_ATTRIB_TEX_COORD)
pProgram:link()
pProgram:updateUniforms()
sprite:setGLProgram(pProgram)
end
ccShader_PositionTextureColor.vsh 文件内容
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
#ifdef GL_ES
varying lowp vec4 v_fragmentColor;
varying mediump vec2 v_texCoord;
#else
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
#endif
void main()
{
gl_Position = CC_MVPMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}
alphaSprite.fsh 文件内容
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoord;
varying vec4 v_fragmentColor;
uniform vec4 u_grayParam;
void main(void)
{
vec4 texColor = texture2D(CC_Texture0, v_texCoord);
float grey = dot(texColor.rgba, u_grayParam);
gl_FragColor = vec4(vec3(grey), texColor.a) * v_fragmentColor;
}