九宫格渲染着色器
Constructor
new (left:Float, top:Float, bottom:Float, right:Float, width:Float, height:Float)
Bate 测试内容 override function fragment() {
super.fragment();
var uv:Vec2 = size.z == 1 ? getFrameCoodv() * size.xy : gl_openfl_TextureCoordv * size.xy;
var centerWidth:Float = size.x - s9d.x - s9d.y; // 中间宽度
var centerHeight:Float = size.y - s9d.z - s9d.w; // 中间高度
var centerSliceWidth:Float = (size.z == 1 ? frameSpriteRect.z : gl_openfl_TextureSize.x) - s9d.x - s9d.y; // 中间原图宽度
var centerSliceHeight:Float = (size.z == 1 ? frameSpriteRect.w : gl_openfl_TextureSize.y) - s9d.z - s9d.w; // 中间原图高度
var color2:Vec4 = vec4(0);
var uvx:Float = uv.x;
var uvy:Float = uv.y;
var s9dx:Float = s9d.x;
var s9dy:Float = s9d.y;
var s9dz:Float = s9d.z;
var s9dw:Float = s9d.w;
var sizex:Float = size.x;
var sizey:Float = size.y;
// 左上
// if (uv.x <= s9d.x && uv.y <= s9d.z) {
var if1:Float = step(uvx, s9dx);
var if2:Float = step(uvy, s9dy);
color2 += texture2Dgery( getUv(uvx, uvy)) * if1 * if2;
// 右上
// } else if (uv.x >= size.x - s9d.y && uv.y <= s9d.z) {
var if3:Float = step(sizex - s9dy, uvx);
var if4:Float = step(uvy, s9dz);
color2 += if3 * if4 * texture2Dgery( getUv(s9dx + centerSliceWidth + uvx - (sizex - s9dy), uvy));
// 左下
var if5:Float = step(uvx, s9dx);
var if6:Float = step(sizey - s9dw, uvy);
color2 += if5 * if6 * texture2Dgery( getUv(uvx, centerSliceHeight + s9dz + uvy - (sizey - s9dw)));
// 右下
var if7:Float = step(sizex - s9dy, uvx);
var if8:Float = step(sizey - s9dw, uvy);
color2 += if7 * if8 * texture2Dgery(
getUv(s9dx + centerSliceWidth + uvx - (sizex - s9dy), centerSliceHeight + s9dz + uvy - (sizey - s9dw)));
// 上
var if9:Float = step(uvy , s9dz);
color2 += if9 * texture2Dgery( getUv(s9dx + (uvx - s9dx) / centerWidth * centerSliceWidth, uvy));
// 下
var if10:Float = step(sizey - s9dw, uvy);
color2 += if10 * texture2Dgery(
getUv(s9d.x + (uvx - s9dx) / centerWidth * centerSliceWidth, centerSliceHeight + s9dz + uvy - (sizey - s9dw)));
// 左
var if11:Float = step(uvx, s9dx);
color2 += if11 * texture2Dgery( getUv(uvx, s9dz + (uvy - s9dz) / centerHeight * centerSliceHeight));
// 右
var if12:Float = step(sizex - s9dy, uvx);
color2 += if12
+ texture2Dgery(
getUv(centerSliceWidth + s9dx + uvx - (sizex - s9dy), s9dz + (uvy - s9dz) / centerHeight * centerSliceHeight));
if (color.rgb == vec3(0, 0, 0)) {
// 中间
color2 = texture2Dgery(
getUv(s9dx + (uvx - s9dx) / centerWidth * centerSliceWidth, s9dz + (uvy - s9dz) / centerHeight * centerSliceHeight));
}
if (size.w == 1) {
var rgb:Float = (color2.r + color2.g + color2.b) / 3.;
color2 = vec4(rgb, rgb, rgb, gl_FragColor.a);
}
gl_FragColor = color2 * gl_openfl_Alphav;
}
#end