diff --git a/graphics/CMakeLists.txt b/graphics/CMakeLists.txt index a367403f..840b33e2 100644 --- a/graphics/CMakeLists.txt +++ b/graphics/CMakeLists.txt @@ -31,7 +31,8 @@ ENV opengl FORMAT num SOURCES shaders/shader.vert -shaders/shader.frag +shaders/solid_objects.frag +shaders/on_screen_text.frag ) add_library(rse_graphics SHARED shaders/shader.vert.num shaders/shader.frag.num) diff --git a/graphics/shaders/shader.frag b/graphics/shaders/on_screen_text.frag similarity index 100% rename from graphics/shaders/shader.frag rename to graphics/shaders/on_screen_text.frag diff --git a/graphics/shaders/solid_objects.frag b/graphics/shaders/solid_objects.frag new file mode 100644 index 00000000..4389dbb4 --- /dev/null +++ b/graphics/shaders/solid_objects.frag @@ -0,0 +1,18 @@ +#version 450 + +/* Each time texture count is changed this value also need to change. I have to fix it somehow. */ + +#extension GL_EXT_nonuniform_qualifier : enable + +layout(set = 1, binding = 1) uniform sampler2D texSampler[]; + +layout(location = 0) in vec3 fragColor; +layout(location = 1) in vec2 fragTexCoord; +layout(location = 2) in flat uint instanceTextureId; + +layout(location = 0) out vec4 outColor; + +void main() { + vec4 texturePixels = texture(texSampler[instanceTextureId], fragTexCoord); + outColor = vec4(fragColor * texturePixels, texturePixels.a); +} diff --git a/graphics/src/rse_graphics.c b/graphics/src/rse_graphics.c index b1c492d3..108879b5 100644 --- a/graphics/src/rse_graphics.c +++ b/graphics/src/rse_graphics.c @@ -51,25 +51,25 @@ void rse_graphics_test_function(void) {{0.5f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}}, {{-0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}}}; - struct rse_vertex_t vertices2[] = {{{-0.5f, -0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}}, - {{0.5f, -0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {1.0f, 0.0f}}, - {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f}}, - {{-0.5f, 0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}}}; + struct rse_vertex_t vertices2[] = {{{-0.5f, -0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}}, + {{0.5f, -0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {1.0f, 0.0f}}, + {{0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f}}, + {{-0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}}}; // FIXME: Temporary array of vertices, for testing purposes uint16_t indices[] = {0, 1, 2, 2, 3, 0}; uint16_t mesh_id = create_mesh(vertices, indices, 6, 6); create_mesh_instance(mesh_id, (struct rse_instance_data_t){ - {0.0f, 0.0f, 0.4f}, + {0.0f, 0.0f, 2.4f}, {0.0f, 0.0f, rse_math_deg_to_radians(45.0f)}, 1.0f, tex_id_2 }); create_mesh_instance(mesh_id, (struct rse_instance_data_t){ - {-1.0f, 0.0f, 0.3f}, - {0.0f, 0.0f, 0.0f}, + {-0.5f, 0.0f, -1.0f}, + {0.0f, 0.0f, rse_math_deg_to_radians(10.0f)}, 1.0f, tex_id_2 }); diff --git a/graphics/src/rse_vulkan_image.c b/graphics/src/rse_vulkan_image.c index 39c14215..94ea4a8f 100644 --- a/graphics/src/rse_vulkan_image.c +++ b/graphics/src/rse_vulkan_image.c @@ -572,7 +572,7 @@ rse_err_t find_depth_format(VkFormat* found_format) { #define formats_count 3 rse_err_t status; - VkFormat formats[formats_count] = {VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT}; + VkFormat formats[formats_count] = {VK_FORMAT_D32_SFLOAT}; STATUS_CHECK(find_supported_format( formats, diff --git a/graphics/src/vulkan_pipeline.c b/graphics/src/vulkan_pipeline.c index 18ccd665..bf360667 100644 --- a/graphics/src/vulkan_pipeline.c +++ b/graphics/src/vulkan_pipeline.c @@ -16,7 +16,7 @@ #include #include -#define SHADER_MODULES_COUNT 2U +#define SHADER_MODULES_COUNT 3U enum shader_stage_t { @@ -33,7 +33,8 @@ VkShaderModule g_shader_modules[SHADER_MODULES_COUNT]; const char* g_shader_paths[] = { "../graphics/shaders/shader.vert.num", - "../graphics/shaders/shader.frag.num", + "../graphics/shaders/solid_objects.frag.num", + "../graphics/shaders/on_screen_text.frag.num", }; static VkVertexInputBindingDescription get_binding_description()