summaryrefslogtreecommitdiff
path: root/src/model.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/model.c')
-rw-r--r--src/model.c27
1 files changed, 17 insertions, 10 deletions
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 = {