function changeToGray( node, flag )
local program = nil
local vertShaderByteArray = "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;"
.."}"
local pszAddGrayShader = "#ifdef GL_ES \n"
.."precision mediump float; \n"
.."#endif \n"
.."varying vec4 v_fragmentColor;"
.."varying vec2 v_texCoord;"
.."void main(void)"
.."{"
.." vec4 c = texture2D(CC_Texture0, v_texCoord);"
.." gl_FragColor.xyz = vec3(0.4*c.r + 0.4*c.g + 0.4*c.b);"
.." gl_FragColor.w = c.w;"
.."}"
-- 移除置灰frag
local pszRemoveGrayShader = "#ifdef GL_ES \n"
.."precision mediump float; \n"
.."#endif \n"
.."varying vec4 v_fragmentColor; "
.."varying vec2 v_texCoord; "
.."void main(void) "
.."{"
.." gl_FragColor = texture2D(CC_Texture0, v_texCoord);"
.."}"
if flag then
program = cc.GLProgram:createWithByteArrays(vertShaderByteArray, pszAddGrayShader)
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();
node:setGLProgram(program);
else
local glProgram = cc.GLProgram:createWithByteArrays(vertShaderByteArray,pszRemoveGrayShader)
glProgram:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION,cc.VERTEX_ATTRIB_POSITION)
glProgram:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR,cc.VERTEX_ATTRIB_COLOR)
glProgram:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD,cc.VERTEX_ATTRIB_FLAG_TEX_COORDS)
glProgram:link()
glProgram:updateUniforms()
node:setGLProgram(glProgram)
end
end
cocos2dx组件置灰
最新推荐文章于 2023-10-30 20:12:11 发布