local GrayProgram = nil
–将节点变灰
–@function SpriteSetGray
–@param #cc.Sprite sprite
function SpriteSetGray(sprite, gray)
cclog(“SpriteSetGray”)
if sprite then
local isGray = false
if sprite.m_isGray then
isGray = sprite.m_isGray
end
if isGray == gray then
return
end
sprite.m_isGray = gray
local children = sprite:getChildren()
if gray then
if sprite.setGLProgram and (children == nil or #children == 0) 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
sprite:setGLProgram(GrayProgram)
else
for _, aChild in ipairs(children) do
if aChild.setGLProgram then
SpriteSetGray(aChild,gray)
end
end
end
else
if sprite.setGLProgramState and (children == nil or #children == 0) then
sprite:setGLProgramState(cc.GLProgramState:getOrCreateWithGLProgramName(“ShaderPositionTextureColor_noMVP”))
else
for _, aChild in ipairs(children) do
if aChild.setGLProgramState then
SpriteSetGray(aChild,gray)
end
end
end
end
end
end