From 9ce56221ff5907b041147f12fda367c226eba73f Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 8 Jul 2020 15:43:51 +0800 Subject: [PATCH] update DrawRect2D shaders --- shader/DrawRect2D.geom | 17 +++++++++++------ shader/DrawRect2D.vert | 5 +++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/shader/DrawRect2D.geom b/shader/DrawRect2D.geom index 852e958..34dcec0 100644 --- a/shader/DrawRect2D.geom +++ b/shader/DrawRect2D.geom @@ -3,15 +3,20 @@ layout (points) in; layout (triangle_strip,max_vertices=4) out; +layout(location=0) in vec4 GeometryTexCoord[]; +layout(location=0) out vec2 FragmentTexCoord; + void main() { - vec2 lt=gl_in[0].gl_Position.xy; - vec2 rb=gl_in[0].gl_Position.zw; + vec2 vlt=gl_in[0].gl_Position.xy; + vec2 vrb=gl_in[0].gl_Position.zw; + vec2 tlt=GeometryTexCoord[0].xy; + vec2 trb=GeometryTexCoord[0].zw; - gl_Position=vec4(lt, vec2(0,1));EmitVertex(); - gl_Position=vec4(lt.x,rb.y, vec2(0,1));EmitVertex(); - gl_Position=vec4(rb.x,lt.y, vec2(0,1));EmitVertex(); - gl_Position=vec4(rb, vec2(0,1));EmitVertex(); + gl_Position=vec4(vlt, vec2(0,1));FragmentTexCoord=tlt; EmitVertex(); + gl_Position=vec4(vlt.x, vrb.y, vec2(0,1));FragmentTexCoord=vec2(tlt.x,trb.y); EmitVertex(); + gl_Position=vec4(vrb.x, vlt.y, vec2(0,1));FragmentTexCoord=vec2(trb.x,tlt.y); EmitVertex(); + gl_Position=vec4(vrb, vec2(0,1));FragmentTexCoord=trb; EmitVertex(); EndPrimitive(); } diff --git a/shader/DrawRect2D.vert b/shader/DrawRect2D.vert index ca01486..8acacef 100644 --- a/shader/DrawRect2D.vert +++ b/shader/DrawRect2D.vert @@ -1,6 +1,7 @@ #version 450 core layout(location = 0) in vec4 Vertex; +layout(location = 1) in vec4 TexCoord; layout(binding=0) uniform WorldMatrix // hgl/math/Math.h { @@ -20,6 +21,8 @@ layout(binding=0) uniform WorldMatrix // hgl/math/Math.h vec2 viewport_resolution; }world; +layout(location=0) out vec4 GeometryTexCoord; + void main() { vec4 lt=vec4(Vertex.xy,vec2(0,1)); @@ -28,5 +31,7 @@ void main() vec4 lt_fin=lt*world.ortho; vec4 rb_fin=rb*world.ortho; + GeometryTexCoord=TexCoord; + gl_Position=vec4(lt_fin.xy,rb_fin.xy); }