Updated api

This commit is contained in:
2025-12-31 00:43:04 +09:00
parent f1d3dddb9a
commit 84b2504a6f
9 changed files with 646 additions and 194 deletions

View File

@@ -665,52 +665,99 @@ SRT_API srt_result_e srt_scene_texture_set_sampler(srt_scene_t* scene,
/* ---------------- Sky ---------------- */
SRT_API srt_result_e srt_scene_set_sky_none(srt_scene_t* scene)
SRT_API srt_result_e srt_scene_set_sky(srt_scene_t* scene, const srt_sky_desc_t* desc)
{
if (scene == NULL)
if (scene == NULL || desc == NULL)
{
return SRT_INVALID_ARGUMENT;
}
free_current_sky(&scene->scene.lights);
return SRT_OK;
switch ((srt_sky_kind_e)desc->kind)
{
case SRT_SKY_NONE:
{
free_current_sky(&scene->scene.lights);
return SRT_OK;
}
case SRT_SKY_CONSTANT:
{
if (desc->data == NULL || desc->data_size != sizeof(srt_sky_constant_desc_t))
{
return SRT_INVALID_ARGUMENT;
}
const srt_sky_constant_desc_t* d = (const srt_sky_constant_desc_t*)desc->data;
free_current_sky(&scene->scene.lights);
constant_sky_data_t data = {
.color = srt_to_vec3(d->color),
.intensity = d->intensity,
};
scene->scene.lights.sky_light = sky_create_constant_sky(&data);
return SRT_OK;
}
case SRT_SKY_HDR:
{
if (desc->data == NULL || desc->data_size != sizeof(srt_sky_hdr_desc_t))
{
return SRT_INVALID_ARGUMENT;
}
const srt_sky_hdr_desc_t* d = (const srt_sky_hdr_desc_t*)desc->data;
texture_handle_t h = {.id = d->hdri.id};
if (get_texture(&scene->scene.textures, h) == NULL)
{
return SRT_NOT_FOUND;
}
free_current_sky(&scene->scene.lights);
scene->scene.lights.sky_light = sky_create_hdr_sky(&scene->scene.textures, h, d->intensity);
return SRT_OK;
}
default:
return SRT_INVALID_ARGUMENT;
}
}
SRT_API srt_result_e srt_scene_set_sky_none(srt_scene_t* scene)
{
const srt_sky_desc_t d = {
.kind = SRT_SKY_NONE,
.data_size = 0,
.data = NULL,
};
return srt_scene_set_sky(scene, &d);
}
SRT_API srt_result_e srt_scene_set_sky_constant(srt_scene_t* scene, srt_vec3_t color, float intensity)
{
if (scene == NULL)
{
return SRT_INVALID_ARGUMENT;
}
free_current_sky(&scene->scene.lights);
constant_sky_data_t data = {
.color = srt_to_vec3(color),
const srt_sky_constant_desc_t cd = {
.color = color,
.intensity = intensity,
};
scene->scene.lights.sky_light = sky_create_constant_sky(&data);
return SRT_OK;
const srt_sky_desc_t d = {
.kind = SRT_SKY_CONSTANT,
.data_size = (uint32_t)sizeof(cd),
.data = &cd,
};
return srt_scene_set_sky(scene, &d);
}
SRT_API srt_result_e srt_scene_set_sky_hdr(srt_scene_t* scene, srt_texture_handle_t hdri, float intensity)
{
if (scene == NULL)
{
return SRT_INVALID_ARGUMENT;
}
texture_handle_t h = {.id = hdri.id};
if (get_texture(&scene->scene.textures, h) == NULL)
{
return SRT_NOT_FOUND;
}
free_current_sky(&scene->scene.lights);
scene->scene.lights.sky_light = sky_create_hdr_sky(&scene->scene.textures, h, intensity);
return SRT_OK;
const srt_sky_hdr_desc_t hd = {
.hdri = hdri,
.intensity = intensity,
};
const srt_sky_desc_t d = {
.kind = SRT_SKY_HDR,
.data_size = (uint32_t)sizeof(hd),
.data = &hd,
};
return srt_scene_set_sky(scene, &d);
}
/* ---------------- Mesh loading (Assimp) ---------------- */