From f1f1576543bb4e0f3b9bc4cd0ba4a12a70546c3c Mon Sep 17 00:00:00 2001 From: Frederico Linhares 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