diff options
Diffstat (limited to 'glsl/shader_3d.frag.glsl')
-rw-r--r-- | glsl/shader_3d.frag.glsl | 54 |
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); +} |