--@function [parent=#XX] Scale9SpriteSetGray
--@param #cc.Scale9Sprite sprite9
function Scale9SpriteSetGray(sprite9)
if sprite9 then
if GrayProgram == nil then
local program = cc.GLProgram:create("res/gray.vsh", "res/gray.fsh")
program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS)
program:link()
program:updateUniforms()
GrayProgram = program
end
if GrayProgram then
local children = sprite9:getChildren()
if children and #children > 0 then
for _, aSprite in ipairs(children) do
cclog("XXX")
if aSprite.setGLProgram then
aSprite:setGLProgram(GrayProgram)
end
end
end
end
end
end
gray.fsh :
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform sampler2D CC_Texture0;
void main()
{
vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114));
gl_FragColor = vec4(gray, gray, gray, v_orColor.a);
}
gray.vsh
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main()
{
gl_Position = CC_PMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}
3.2 :
API已变更为
void setGLProgram(GLProgram *glprogram);
GLProgram* getGLProgram()
lua_cocos2dx_manual.cpp 中
static void extendGLProgram(lua_State* tolua_S)
导出了个别GLProgram的接口
自定义创建方法
cc.GLProgram.create(vShaderFilename, fShaderFilename)