Updated api
This commit is contained in:
@@ -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) ---------------- */
|
||||
|
||||
Reference in New Issue
Block a user