From a53d076f94c4b38ac511d6d3a5d4fc21e026b183 Mon Sep 17 00:00:00 2001 From: Connor Thomson Date: Fri, 25 Sep 2026 19:47:30 -0700 Subject: Add PCSS shadows --- src/model.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'src/model.c') diff --git a/src/model.c b/src/model.c index 2c78850..396e70a 100644 --- a/src/model.c +++ b/src/model.c @@ -145,7 +145,7 @@ typedef struct ta_model_light_uniforms { float shadow_minimum_bias; float shadow_maximum_bias; float shadow_strength; - float padding; + float shadow_penumbra_scale; } ta_model_light_uniforms; typedef struct ta_model_shadow_uniforms { @@ -182,7 +182,7 @@ bool ta_model_init(ta_model *model, SDL_GPUDevice *device, const float positions } model->vertex_count = (Uint32)model->mesh.vertex_count; SDL_GPUShader *vertex_shader = ta_model_shader(device, file_model_vert_slang_spv_start, file_model_vert_slang_spv_size, SDL_GPU_SHADERSTAGE_VERTEX, 0, 1); - SDL_GPUShader *fragment_shader = ta_model_shader(device, file_model_frag_slang_spv_start, file_model_frag_slang_spv_size, SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); + SDL_GPUShader *fragment_shader = ta_model_shader(device, file_model_frag_slang_spv_start, file_model_frag_slang_spv_size, SDL_GPU_SHADERSTAGE_FRAGMENT, 2, 1); SDL_GPUVertexBufferDescription vertex_buffer = {.slot = 0, .pitch = sizeof(ta_model_vertex), .input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX}; SDL_GPUVertexAttribute attributes[2] = { { @@ -374,17 +374,24 @@ void ta_model_render(const ta_model *model, SDL_GPUCommandBuffer *command_buffer ta_shadow_light_direction[1], ta_shadow_light_direction[2] }, - .shadow_texel_size = 1.0f / (float)TA_SHADOW_MAP_SIZE, - .shadow_minimum_bias = ta_shadow_minimum_bias, - .shadow_maximum_bias = ta_shadow_maximum_bias, - .shadow_strength = ta_shadow_strength, + .shadow_texel_size = 1.0f / (float)TA_SHADOW_MAP_SIZE, + .shadow_minimum_bias = ta_shadow_minimum_bias, + .shadow_maximum_bias = ta_shadow_maximum_bias, + .shadow_strength = ta_shadow_strength, + .shadow_penumbra_scale = ta_shadow_penumbra_scale, }; - SDL_GPUTextureSamplerBinding shadow_binding = { - .texture = ta_shadow_texture, - .sampler = ta_shadow_sampler + SDL_GPUTextureSamplerBinding shadow_bindings[2] = { + { + .texture = ta_shadow_texture, + .sampler = ta_shadow_sampler + }, + { + .texture = ta_shadow_texture, + .sampler = ta_shadow_depth_sampler + }, }; SDL_PushGPUFragmentUniformData(command_buffer, 0, &light, sizeof(light)); - SDL_BindGPUFragmentSamplers(render_pass, 0, &shadow_binding, 1); + SDL_BindGPUFragmentSamplers(render_pass, 0, shadow_bindings, 2); } SDL_GPUBufferBinding binding = { -- cgit v1.2.3