From 1bcfc9a5cce0b30c3ad9983e407c06e237b491f3 Mon Sep 17 00:00:00 2001 From: Malte Veerman Date: Fri, 10 Jan 2020 14:39:29 +0100 Subject: Implemented a texture atlas for images and svgs. --- wgpu/src/shader/image.vert | 26 ++++++++++++++++++++++++++ wgpu/src/shader/image.vert.spv | Bin 2136 -> 2324 bytes 2 files changed, 26 insertions(+) create mode 100644 wgpu/src/shader/image.vert (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/image.vert b/wgpu/src/shader/image.vert new file mode 100644 index 00000000..953840d2 --- /dev/null +++ b/wgpu/src/shader/image.vert @@ -0,0 +1,26 @@ +#version 450 + +layout(location = 0) in vec2 v_Pos; +layout(location = 1) in vec2 i_Pos; +layout(location = 2) in vec2 i_Scale; +layout(location = 3) in vec2 i_Atlas_Pos; +layout(location = 4) in vec2 i_Atlas_Scale; + +layout (set = 0, binding = 0) uniform Globals { + mat4 u_Transform; +}; + +layout(location = 0) out vec2 o_Uv; + +void main() { + o_Uv = v_Pos * i_Atlas_Scale + i_Atlas_Pos; + + mat4 i_Transform = mat4( + vec4(i_Scale.x, 0.0, 0.0, 0.0), + vec4(0.0, i_Scale.y, 0.0, 0.0), + vec4(0.0, 0.0, 1.0, 0.0), + vec4(i_Pos, 0.0, 1.0) + ); + + gl_Position = u_Transform * i_Transform * vec4(v_Pos, 0.0, 1.0); +} diff --git a/wgpu/src/shader/image.vert.spv b/wgpu/src/shader/image.vert.spv index 9ba702bc..da76eca0 100644 Binary files a/wgpu/src/shader/image.vert.spv and b/wgpu/src/shader/image.vert.spv differ -- cgit From 2f77a6bf5ac1b657c1f54ea0b589b1e115b95e6b Mon Sep 17 00:00:00 2001 From: Malte Veerman Date: Mon, 13 Jan 2020 15:33:12 +0100 Subject: Use array of atlases instead of one growing indefinitely. --- wgpu/src/shader/image.frag | 6 +++--- wgpu/src/shader/image.vert | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/image.frag b/wgpu/src/shader/image.frag index e35e455a..2809e9e6 100644 --- a/wgpu/src/shader/image.frag +++ b/wgpu/src/shader/image.frag @@ -1,12 +1,12 @@ #version 450 -layout(location = 0) in vec2 v_Uv; +layout(location = 0) in vec3 v_Uv; layout(set = 0, binding = 1) uniform sampler u_Sampler; -layout(set = 1, binding = 0) uniform texture2D u_Texture; +layout(set = 1, binding = 0) uniform texture2DArray u_Texture; layout(location = 0) out vec4 o_Color; void main() { - o_Color = texture(sampler2D(u_Texture, u_Sampler), v_Uv); + o_Color = texture(sampler2DArray(u_Texture, u_Sampler), v_Uv); } diff --git a/wgpu/src/shader/image.vert b/wgpu/src/shader/image.vert index 953840d2..0ce7dd6b 100644 --- a/wgpu/src/shader/image.vert +++ b/wgpu/src/shader/image.vert @@ -5,15 +5,16 @@ layout(location = 1) in vec2 i_Pos; layout(location = 2) in vec2 i_Scale; layout(location = 3) in vec2 i_Atlas_Pos; layout(location = 4) in vec2 i_Atlas_Scale; +layout(location = 5) in float i_Layer; layout (set = 0, binding = 0) uniform Globals { mat4 u_Transform; }; -layout(location = 0) out vec2 o_Uv; +layout(location = 0) out vec3 o_Uv; void main() { - o_Uv = v_Pos * i_Atlas_Scale + i_Atlas_Pos; + o_Uv = vec3(v_Pos * i_Atlas_Scale + i_Atlas_Pos, i_Layer); mat4 i_Transform = mat4( vec4(i_Scale.x, 0.0, 0.0, 0.0), -- cgit From 2f695ef9803c9c08f64961f1b9902a661a385160 Mon Sep 17 00:00:00 2001 From: Malte Veerman Date: Fri, 17 Jan 2020 20:48:49 +0100 Subject: Updated shaders and removed debug_stub_derive dependency --- wgpu/src/shader/image.frag.spv | Bin 684 -> 584 bytes wgpu/src/shader/image.vert.spv | Bin 2324 -> 1596 bytes 2 files changed, 0 insertions(+), 0 deletions(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/image.frag.spv b/wgpu/src/shader/image.frag.spv index ebee82ac..6a6445b4 100644 Binary files a/wgpu/src/shader/image.frag.spv and b/wgpu/src/shader/image.frag.spv differ diff --git a/wgpu/src/shader/image.vert.spv b/wgpu/src/shader/image.vert.spv index da76eca0..cceff73a 100644 Binary files a/wgpu/src/shader/image.vert.spv and b/wgpu/src/shader/image.vert.spv differ -- cgit From 82f0a49062d10f3cbf202a5379c061a2509ec97b Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 25 Feb 2020 13:27:43 +0100 Subject: Recompile `image` shaders --- wgpu/src/shader/image.frag.spv | Bin 584 -> 684 bytes wgpu/src/shader/image.vert.spv | Bin 1596 -> 2472 bytes 2 files changed, 0 insertions(+), 0 deletions(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/image.frag.spv b/wgpu/src/shader/image.frag.spv index 6a6445b4..65b08aa3 100644 Binary files a/wgpu/src/shader/image.frag.spv and b/wgpu/src/shader/image.frag.spv differ diff --git a/wgpu/src/shader/image.vert.spv b/wgpu/src/shader/image.vert.spv index cceff73a..192bf6c3 100644 Binary files a/wgpu/src/shader/image.vert.spv and b/wgpu/src/shader/image.vert.spv differ -- cgit From c58d94f3fda40f215254008ec105aeab56085b0e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 26 Feb 2020 12:52:30 +0100 Subject: Avoid creating a vertex buffer every frame --- wgpu/src/shader/image.vert | 2 +- wgpu/src/shader/image.vert.spv | Bin 2472 -> 2504 bytes 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/image.vert b/wgpu/src/shader/image.vert index 0ce7dd6b..dab53cfe 100644 --- a/wgpu/src/shader/image.vert +++ b/wgpu/src/shader/image.vert @@ -5,7 +5,7 @@ layout(location = 1) in vec2 i_Pos; layout(location = 2) in vec2 i_Scale; layout(location = 3) in vec2 i_Atlas_Pos; layout(location = 4) in vec2 i_Atlas_Scale; -layout(location = 5) in float i_Layer; +layout(location = 5) in uint i_Layer; layout (set = 0, binding = 0) uniform Globals { mat4 u_Transform; diff --git a/wgpu/src/shader/image.vert.spv b/wgpu/src/shader/image.vert.spv index 192bf6c3..21f5db2d 100644 Binary files a/wgpu/src/shader/image.vert.spv and b/wgpu/src/shader/image.vert.spv differ -- cgit