zip side load; 9 slice working
This commit is contained in:
@@ -1,32 +1,40 @@
|
||||
@block vert
|
||||
uniform vec4 rect;
|
||||
uniform vec2 diffuse_size;
|
||||
uniform vec4 rect; // uv rect
|
||||
|
||||
void vert()
|
||||
{
|
||||
pos *= vec3(diffuse_size*rect.zw, 1);
|
||||
uv = (uv*rect.zw)+rect.xy;
|
||||
}
|
||||
@end
|
||||
|
||||
@block frag
|
||||
uniform vec4 border;
|
||||
uniform vec2 scale;
|
||||
uniform vec4 border; // border given as [left,down,right,top], in uv coordinates of texture, so (pixel)border.x/texture.x, etc
|
||||
uniform vec2 win_tex_scale; // size of the drawing area over the size of the tex
|
||||
uniform vec4 shade;
|
||||
uniform vec4 frag_rect;
|
||||
|
||||
// border given as [left,down,right,top], in scaled coordinates
|
||||
float map(float value, float originalMin, float originalMax, float newMin, float newMax) {
|
||||
return (value - originalMin) / (originalMax - originalMin) * (newMax - newMin) + newMin;
|
||||
}
|
||||
|
||||
vec2 uv9slice(vec2 uv, vec2 s, vec4 b)
|
||||
{
|
||||
vec2 t = clamp((s * uv - b.xy) / (s - b.xy - b.zw), 0., 1.);
|
||||
return mix(uv * s, 1. - s * (1. - uv), t);
|
||||
return mix(uv * s, 1. - s * (1. - uv), t);
|
||||
}
|
||||
|
||||
void frag()
|
||||
{
|
||||
vec2 ruv = uv9slice(uv, scale, border);
|
||||
color = texture(sampler2D(diffuse,smp), ruv);
|
||||
if (color.a < 0.1) discard;
|
||||
vec2 guv;
|
||||
guv.x = map(uv.x, frag_rect.x, frag_rect.x+frag_rect.z, 0, 1);
|
||||
guv.y = map(uv.y, frag_rect.y, frag_rect.y+frag_rect.w, 0, 1);
|
||||
vec2 nuv = uv9slice(guv, win_tex_scale, border);
|
||||
nuv.x = map(nuv.x, 0, 1, frag_rect.x, frag_rect.x+frag_rect.z);
|
||||
nuv.y = map(nuv.y, 0, 1, frag_rect.y, frag_rect.y+frag_rect.w);
|
||||
|
||||
color = texture(sampler2D(diffuse,smp), nuv);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
#include <base.cg>
|
||||
#include <base.cg>
|
||||
@@ -33,6 +33,7 @@ out vec4 color;
|
||||
#define PI 3.141592
|
||||
|
||||
texture2D diffuse;
|
||||
@sampler_type smp nonfiltering
|
||||
sampler smp;
|
||||
|
||||
@include_block frag
|
||||
|
||||
@@ -24,7 +24,6 @@ void main()
|
||||
sprite s = sprites[int(baseinstance)+gl_InstanceIndex];
|
||||
pos = a_pos;
|
||||
uv = a_uv;
|
||||
pos *= vec3(s.rect.zw,1);
|
||||
uv = (uv*s.rect.zw)+s.rect.xy;
|
||||
gl_Position = vp * s.model * vec4(pos, 1.0);
|
||||
shade = s.shade;
|
||||
|
||||
Reference in New Issue
Block a user