From 09f5818143ae567b96a67c153d44df952147205f Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 24 Jun 2020 02:00:40 +0800 Subject: [PATCH] 1.add DrawRect2D.vert/.geom shaders 2.add AlphaMask.frag shader --- shader/AlphaMask.frag | 16 ++++++++++++++++ shader/DrawRect2D.geom | 17 +++++++++++++++++ shader/DrawRect2D.vert | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 shader/AlphaMask.frag create mode 100644 shader/DrawRect2D.geom create mode 100644 shader/DrawRect2D.vert diff --git a/shader/AlphaMask.frag b/shader/AlphaMask.frag new file mode 100644 index 0000000..2d4a9bf --- /dev/null +++ b/shader/AlphaMask.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout(binding = 2) uniform sampler2D tex; + +layout(location = 0) in vec2 FragmentTexCoord; +layout(location = 0) out vec4 FragColor; + +void main() +{ + vec4 color=texture(tex,FragmentTexCoord); + + if(color.a<0.3) + discard; + + FragColor=vec4(color.rgb,1); +} diff --git a/shader/DrawRect2D.geom b/shader/DrawRect2D.geom new file mode 100644 index 0000000..852e958 --- /dev/null +++ b/shader/DrawRect2D.geom @@ -0,0 +1,17 @@ +#version 450 core + +layout (points) in; +layout (triangle_strip,max_vertices=4) out; + +void main() +{ + vec2 lt=gl_in[0].gl_Position.xy; + vec2 rb=gl_in[0].gl_Position.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(); + + EndPrimitive(); +} diff --git a/shader/DrawRect2D.vert b/shader/DrawRect2D.vert new file mode 100644 index 0000000..ca01486 --- /dev/null +++ b/shader/DrawRect2D.vert @@ -0,0 +1,32 @@ +#version 450 core + +layout(location = 0) in vec4 Vertex; + +layout(binding=0) uniform WorldMatrix // hgl/math/Math.h +{ + mat4 ortho; + + mat4 projection; + mat4 inverse_projection; + + mat4 modelview; + mat4 inverse_modelview; + + mat4 mvp; + mat4 inverse_mvp; + + vec4 view_pos; + vec2 canvas_resolution; + vec2 viewport_resolution; +}world; + +void main() +{ + vec4 lt=vec4(Vertex.xy,vec2(0,1)); + vec4 rb=vec4(Vertex.zw,vec2(0,1)); + + vec4 lt_fin=lt*world.ortho; + vec4 rb_fin=rb*world.ortho; + + gl_Position=vec4(lt_fin.xy,rb_fin.xy); +}