summaryrefslogtreecommitdiff
path: root/glsl/shader_3d.frag.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'glsl/shader_3d.frag.glsl')
-rw-r--r--glsl/shader_3d.frag.glsl54
1 files changed, 54 insertions, 0 deletions
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);
+}