Lua
local prog = cc.GLProgram:create("test.vsh","test.fsh")
prog:link()
prog:updateUniforms()
local progStat= cc.GLProgramState:create(prog)
--[[]]
local sp = cc.Sprite:create("123123.png")
:pos(display.cx, display.cy)
:addTo(self)
:setScale(1)
:setAnchorPoint(0.5, 0.5)
sp:setGLProgram(prog)
sp:setGLProgramState(progStat)
self:schedule(function()
local pSize = sp:getContentSize()
size.x = 1 / pSize.width
size.y = 1 / pSize.height
progStat:setUniformVec2(prog:getUniform("blurSize").location, size);
prog:updateUniforms()
end, 1)
fsh
/*
#ifdef GL_ES
precision mediump float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform vec2 blurSize;
vec4 SingleBlur(vec2 BlurSize)
{
vec4 sum = vec4(0.0);
sum += texture2D(CC_Texture0, v_texCoord - 0.0001 * BlurSize) * 0.33;
sum += texture2D(CC_Texture0, v_texCoord) * 0.33;
sum += texture2D(CC_Texture0, v_texCoord + 0.0001 * BlurSize) * 0.33;
return sum;
}
void main()
{
vec4 sum = vec4(0.0);
sum += SingleBlur(vec2(0, blurSize.y)) * 0.11111;
sum += SingleBlur(vec2(0, -blurSize.y)) * 0.11111;
sum += SingleBlur(vec2(-blurSize.x, 0)) * 0.11111;
sum += SingleBlur(vec2(blurSize.x, 0)) * 0.11111;
sum += SingleBlur(vec2(blurSize.x, blurSize.y)) * 0.11111;
sum += SingleBlur(vec2(-blurSize.x, blurSize.y)) * 0.11111;
sum += SingleBlur(vec2(blurSize.x, -blurSize.y)) * 0.11111;
sum += SingleBlur(vec2(-blurSize.x, -blurSize.y)) * 0.11111;
sum += SingleBlur(vec2(0, 0)) * 0.11111;
gl_FragColor = sum * v_fragmentColor;
}
*/
/* 水波效果
#ifdef GL_ES
precision mediump float;
#endif
#define F cos(x-y)*cos(y),sin(x+y)*sin(y)
uniform vec2 blurSize;
uniform vec2 resolution;
varying vec2 v_texCoord;
vec2 s(vec2 p)
{
float d=blurSize.x*0.2,x=8.*(p.x+d),y=8.*(p.y+d);
return vec2(F);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
// 换成resolution
vec2 rs = resolution.xy;
// 换成纹理坐标v_texCoord.xy
vec2 uv = v_texCoord.xy;
vec2 q = uv+2./resolution.x*(s(uv)-s(uv+rs));
//反转y
// q.y=1.-q.y;
fragColor = texture2D(CC_Texture0,q);
}
void main()
{
mainImage(gl_FragColor, gl_FragCoord.xy);
}
*/
/*
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 blurSize;
varying vec2 v_texCoord;
vec4 draw(vec2 uv)
{
return texture2D(CC_Texture0,uv).rgba;
}
float grid(float var, float size)
{
return floor(var*size)/size;
}
float rand(vec2 co)
{
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
float bluramount = blurSize.x;
vec2 uv = v_texCoord.xy;
vec4 blurred_image = vec4(0.);
#define repeats 5.
for (float i = 0.; i < repeats; i++)
{
vec2 q = vec2(cos(degrees((i/repeats)*360.)),sin(degrees((i/repeats)*360.))) * (rand(vec2(i,uv.x+uv.y))+bluramount);
vec2 uv2 = uv+(q*bluramount);
blurred_image += draw(uv2)/2.;
q = vec2(cos(degrees((i/repeats)*360.)),sin(degrees((i/repeats)*360.))) * (rand(vec2(i+2.,uv.x+uv.y+24.))+bluramount);
uv2 = uv+(q*bluramount);
blurred_image += draw(uv2)/2.;
}
blurred_image /= repeats;
fragColor = vec4(blurred_image);
}
void main()
{
mainImage(gl_FragColor, gl_FragCoord.xy);
}
*/
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; //CC_PMatrix Max = DisplaySize //CC_MVPMatrix Max = DesignSize
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}