From f1f1576543bb4e0f3b9bc4cd0ba4a12a70546c3c Mon Sep 17 00:00:00 2001
From: Frederico Linhares <fred@linhares.blue>
Date: Tue, 30 Aug 2022 17:45:40 -0300
Subject: feat Create 2d graphics pipeline

---
 glsl/shader.frag         | 38 ----------------------------------
 glsl/shader.vert         | 38 ----------------------------------
 glsl/shader_2d.frag.glsl | 30 +++++++++++++++++++++++++++
 glsl/shader_2d.vert.glsl | 53 +++++++++++++++++++++++++++++++++++++++++++++++
 glsl/shader_3d.frag.glsl | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
 glsl/shader_3d.vert.glsl | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 191 insertions(+), 76 deletions(-)
 delete mode 100644 glsl/shader.frag
 delete mode 100644 glsl/shader.vert
 create mode 100644 glsl/shader_2d.frag.glsl
 create mode 100644 glsl/shader_2d.vert.glsl
 create mode 100644 glsl/shader_3d.frag.glsl
 create mode 100644 glsl/shader_3d.vert.glsl

(limited to 'glsl')

diff --git a/glsl/shader.frag b/glsl/shader.frag
deleted file mode 100644
index 8ecf883..0000000
--- a/glsl/shader.frag
+++ /dev/null
@@ -1,38 +0,0 @@
-#version 450
-#extension GL_ARB_separate_shader_objects : enable
-
-struct DataTransferObject
-{
-  vec4 frag_color;
-  vec2 frag_texture_coord;
-  vec3 normal;
-};
-
-layout(location = 0) in DataTransferObject in_dto;
-
-layout(location = 0) out vec4 out_color;
-
-layout(set = 0, binding = 1) uniform UBODirectionalLight
-{
-  vec3 direction;
-  vec4 color;
-} ubo_directional_light;
-
-layout(set = 1, binding = 1) uniform sampler2D texture_sampler;
-
-void
-main()
-{
-  float diffuse_factor =
-    max(dot(in_dto.normal, -ubo_directional_light.direction), 0.0);
-
-  vec4 diff_samp = texture(texture_sampler, in_dto.frag_texture_coord);
-  vec4 ambient = vec4(vec3(in_dto.frag_color), diff_samp.a);
-  vec4 diffuse =
-    vec4(vec3(ubo_directional_light.color * diffuse_factor), diff_samp.a);
-
-  diffuse *= diff_samp;
-  ambient *= diff_samp;
-
-  out_color = (ambient + diffuse);
-}
diff --git a/glsl/shader.vert b/glsl/shader.vert
deleted file mode 100644
index 50dcec5..0000000
--- a/glsl/shader.vert
+++ /dev/null
@@ -1,38 +0,0 @@
-#version 450
-#extension GL_ARB_separate_shader_objects : enable
-
-layout(location = 0) in vec3 in_position;
-layout(location = 1) in vec3 in_normal;
-layout(location = 2) in vec2 in_texture_coord;
-
-
-layout(location = 0) out DataTransferObject
-{
-  vec4 frag_color;
-  vec2 frag_texture_coord;
-  vec3 normal;
-} out_dto;
-
-layout(set = 0, binding = 0) uniform UBOViewProjection
-{
-  mat4 view;
-  mat4 proj;
-  vec4 ambient_color;
-} ubo_view_projection;
-
-layout(set = 1, binding = 0) uniform UBOModelInstance
-{
-  mat4 model[128];
-} ubo_model_instance;
-
-void
-main()
-{
-  gl_Position =
-      ubo_view_projection.proj * ubo_view_projection.view *
-      ubo_model_instance.model[gl_InstanceIndex] * vec4(in_position, 1.0);
-  out_dto.frag_color = ubo_view_projection.ambient_color;
-  out_dto.frag_texture_coord = in_texture_coord;
-  out_dto.normal = mat3(ubo_model_instance.model[gl_InstanceIndex]) *
-    in_normal;
-}
diff --git a/glsl/shader_2d.frag.glsl b/glsl/shader_2d.frag.glsl
new file mode 100644
index 0000000..1edbbbb
--- /dev/null
+++ b/glsl/shader_2d.frag.glsl
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2022 Frederico de Oliveira Linhares
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#version 450
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(location = 0) in vec2 in_texture_coord;
+
+layout(location = 0) out vec4 out_color;
+
+layout(set = 0, binding = 1) uniform sampler2D texture_sampler;
+
+void
+main()
+{
+  out_color = texture(texture_sampler, in_texture_coord);
+}
diff --git a/glsl/shader_2d.vert.glsl b/glsl/shader_2d.vert.glsl
new file mode 100644
index 0000000..6e8ac59
--- /dev/null
+++ b/glsl/shader_2d.vert.glsl
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2022 Frederico de Oliveira Linhares
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#version 450
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(location = 0) in vec2 in_texture_coord;
+
+layout(location = 0) out vec2 out_texture_coord;
+
+layout(set = 0, binding = 0) uniform UBOSpritePositions
+{
+  vec4 positions[128];
+} ubo_sprite_positions;
+
+void
+main()
+{
+  vec2 coordinate;
+  vec4 position = ubo_sprite_positions.positions[gl_InstanceIndex];
+
+  out_texture_coord = in_texture_coord;
+
+  switch(gl_VertexIndex)
+  {
+  case 0:
+    coordinate = vec2(position.x, position.y);
+    break;
+  case 1:
+    coordinate = vec2(position.x, position.w);
+    break;
+  case 2:
+    coordinate = vec2(position.z, position.y);
+    break;
+  case 3:
+    coordinate = vec2(position.z, position.w);
+    break;
+  }
+  gl_Position = vec4(coordinate, 0.0, 1.0);
+}
diff --git a/glsl/shader_3d.frag.glsl b/glsl/shader_3d.frag.glsl
new file mode 100644
index 0000000..5c4b857
--- /dev/null
+++ b/glsl/shader_3d.frag.glsl
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2022 Frederico de Oliveira Linhares
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#version 450
+#extension GL_ARB_separate_shader_objects : enable
+
+struct DataTransferObject
+{
+  vec4 frag_color;
+  vec2 frag_texture_coord;
+  vec3 normal;
+};
+
+layout(location = 0) in DataTransferObject in_dto;
+
+layout(location = 0) out vec4 out_color;
+
+layout(set = 0, binding = 1) uniform UBODirectionalLight
+{
+  vec3 direction;
+  vec4 color;
+} ubo_directional_light;
+
+layout(set = 1, binding = 1) uniform sampler2D texture_sampler;
+
+void
+main()
+{
+  float diffuse_factor =
+    max(dot(in_dto.normal, -ubo_directional_light.direction), 0.0);
+
+  vec4 diff_samp = texture(texture_sampler, in_dto.frag_texture_coord);
+  vec4 ambient = vec4(vec3(in_dto.frag_color), diff_samp.a);
+  vec4 diffuse =
+    vec4(vec3(ubo_directional_light.color * diffuse_factor), diff_samp.a);
+
+  diffuse *= diff_samp;
+  ambient *= diff_samp;
+
+  out_color = (ambient + diffuse);
+}
diff --git a/glsl/shader_3d.vert.glsl b/glsl/shader_3d.vert.glsl
new file mode 100644
index 0000000..387ad00
--- /dev/null
+++ b/glsl/shader_3d.vert.glsl
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2022 Frederico de Oliveira Linhares
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#version 450
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(location = 0) in vec3 in_position;
+layout(location = 1) in vec3 in_normal;
+layout(location = 2) in vec2 in_texture_coord;
+
+
+layout(location = 0) out DataTransferObject
+{
+  vec4 frag_color;
+  vec2 frag_texture_coord;
+  vec3 normal;
+} out_dto;
+
+layout(set = 0, binding = 0) uniform UBOViewProjection
+{
+  mat4 view;
+  mat4 proj;
+  vec4 ambient_color;
+} ubo_view_projection;
+
+layout(set = 1, binding = 0) uniform UBOModelInstance
+{
+  mat4 instances[128];
+} ubo_model_instance;
+
+void
+main()
+{
+  gl_Position =
+      ubo_view_projection.proj * ubo_view_projection.view *
+      ubo_model_instance.instances[gl_InstanceIndex] * vec4(in_position, 1.0);
+  out_dto.frag_color = ubo_view_projection.ambient_color;
+  out_dto.frag_texture_coord = in_texture_coord;
+  out_dto.normal = mat3(ubo_model_instance.instances[gl_InstanceIndex]) *
+    in_normal;
+}
-- 
cgit v1.2.3