commit 4f21c3b2bf5840f8bd12575a2c7aac92a9c288ed
parent f8844125ffaa54e3dd7fd4fd7de098b09c5afd57
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Thu, 12 Apr 2018 15:04:29 +0200
API change: remove the need to give #media when creating a scene.
Diffstat:
12 files changed, 20 insertions(+), 41 deletions(-)
diff --git a/src/senc.h b/src/senc.h
@@ -104,7 +104,6 @@ senc_device_ref_put
SENC_API res_T
senc_scene_create
(struct senc_device* device,
- const unsigned media_count,
struct senc_scene** scene);
/* Add a new set of vertices and triangles to the scene.
diff --git a/src/senc_scene.c b/src/senc_scene.c
@@ -48,13 +48,12 @@ scene_release(ref_T * ref)
res_T
senc_scene_create
(struct senc_device* dev,
- const unsigned nmeds,
struct senc_scene** out_scn)
{
struct senc_scene* scn = NULL;
res_T res = RES_OK;
- if(!dev || !out_scn || !nmeds || nmeds > MEDIUM_MAX__)
+ if(!dev || !out_scn)
return RES_BAD_ARG;
scn = MEM_CALLOC(dev->allocator, 1, sizeof(struct senc_scene));
@@ -69,7 +68,7 @@ senc_scene_create
scn->ngeoms = 0;
scn->ntris = 0;
scn->nutris = 0;
- scn->nmeds = (medium_id_t)nmeds;
+ scn->nmeds = 0;
scn->nverts = 0;
scn->nuverts = 0;
darray_triangle_in_init(dev->allocator, &scn->triangles_in);
@@ -77,7 +76,6 @@ senc_scene_create
htable_vrtx_init(dev->allocator, &scn->unique_vertices);
htable_trg_init(dev->allocator, &scn->unique_triangles);
darray_side_range_init(dev->allocator, &scn->media_use);
- darray_side_range_resize(&scn->media_use, nmeds);
exit:
if(scn) *out_scn = scn;
@@ -194,17 +192,11 @@ senc_scene_add_geometry
}
/* Get media */
media(i, med, ctx); /* API: media needs an unsigned */
- ASSERT(scn->nmeds <= MEDIUM_MAX__);
FOR_EACH(j, 0, 2) {
if(med[j] >= scn->nmeds) {
- log_err(scn->dev,
- "%s: triangle %lu %s side references invalid medium: %lu.\n",
- FUNC_NAME,
- (unsigned long)tmp.global_id,
- (j ? "back" : "front"),
- (unsigned long)med[j]);
- res = RES_BAD_ARG;
- goto error;
+ ASSERT(med[j] <= MEDIUM_MAX__);
+ scn->nmeds = med[j] + 1;
+ darray_side_range_resize(&scn->media_use, scn->nmeds);
}
tmp.medium[j] = (medium_id_t)med[j];
}
diff --git a/src/test_senc_cube_behind_cube.c b/src/test_senc_cube_behind_cube.c
@@ -33,7 +33,7 @@ main(int argc, char** argv)
(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK);
/* Create the scene */
- CHK(senc_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
ctx.positions = box_vertices;
ctx.indices = box_indices;
diff --git a/src/test_senc_cube_in_cube.c b/src/test_senc_cube_in_cube.c
@@ -33,7 +33,7 @@ main(int argc, char** argv)
(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK);
/* Create the scene */
- CHK(senc_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
ctx.positions = box_vertices;
ctx.indices = box_indices;
diff --git a/src/test_senc_cube_on_cube.c b/src/test_senc_cube_on_cube.c
@@ -57,7 +57,7 @@ main(int argc, char** argv)
(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK);
/* Create the scene */
- CHK(senc_scene_create(dev, 3, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
ctx.positions = box_vertices;
ctx.indices = box_indices;
diff --git a/src/test_senc_descriptor.c b/src/test_senc_descriptor.c
@@ -41,7 +41,7 @@ main(int argc, char** argv)
CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev)
== RES_OK);
- CHK(senc_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
/* A 3D cube */
ctx.positions = box_vertices;
diff --git a/src/test_senc_enclosure.c b/src/test_senc_enclosure.c
@@ -48,7 +48,7 @@ main(int argc, char** argv)
CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev)
== RES_OK);
- CHK(senc_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
s3d_attribs.type = S3D_FLOAT3;
s3d_attribs.usage = S3D_POSITION;
@@ -179,7 +179,7 @@ main(int argc, char** argv)
/* Same 3D cube, but with a hole (incomplete).
* 1 single enclosure including both sides of triangles */
- CHK(senc_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
ctx.positions = box_vertices;
ctx.indices = box_indices;
diff --git a/src/test_senc_many_enclosures.c b/src/test_senc_many_enclosures.c
@@ -90,7 +90,7 @@ main(int argc, char** argv)
/* 64^3 = 262144 cylinders */
#define NB_CYL (NB_CYL_1 * NB_CYL_1 * NB_CYL_1)
/* Create the scene */
- CHK(senc_scene_create(dev, NB_CYL_1 + 1, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
ctx.ctx.positions = NULL;
ctx.ctx.indices = NULL;
diff --git a/src/test_senc_many_triangles.c b/src/test_senc_many_triangles.c
@@ -87,7 +87,7 @@ main(int argc, char** argv)
#define NB_CYL 4
/* Create the scene */
- CHK(senc_scene_create(dev, NB_CYL+1, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
ctx.ctx.positions = NULL;
ctx.ctx.indices = NULL;
diff --git a/src/test_senc_sample_enclosure.c b/src/test_senc_sample_enclosure.c
@@ -48,7 +48,7 @@ main(int argc, char** argv)
CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev)
== RES_OK);
- CHK(senc_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
vrtx_get.type = S3D_FLOAT3;
vrtx_get.usage = S3D_POSITION;
diff --git a/src/test_senc_scene.c b/src/test_senc_scene.c
@@ -34,15 +34,10 @@ main(int argc, char** argv)
CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev)
== RES_OK);
- CHK(senc_scene_create(NULL, 2, &scn) == RES_BAD_ARG);
- CHK(senc_scene_create(dev, 0, &scn) == RES_BAD_ARG);
- CHK(senc_scene_create(dev, 2, NULL) == RES_BAD_ARG);
- CHK(senc_scene_create(NULL, 0, &scn) == RES_BAD_ARG);
- CHK(senc_scene_create(NULL, 2, NULL) == RES_BAD_ARG);
- CHK(senc_scene_create(dev, 0, NULL) == RES_BAD_ARG);
- CHK(senc_scene_create(NULL, 0, NULL) == RES_BAD_ARG);
- /* It is valid to have unused media */
- CHK(senc_scene_create(dev, 4, &scn) == RES_OK);
+ CHK(senc_scene_create(NULL, &scn) == RES_BAD_ARG);
+ CHK(senc_scene_create(dev, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_create(NULL, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
CHK(senc_scene_get_triangles_count(NULL, &count) == RES_BAD_ARG);
CHK(senc_scene_get_triangles_count(scn, NULL) == RES_BAD_ARG);
@@ -116,7 +111,7 @@ main(int argc, char** argv)
CHK(senc_scene_ref_put(scn) == RES_OK);
CHK(senc_descriptor_ref_put(desc) == RES_OK);
- CHK(senc_scene_create(dev, 4, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media,
get_global_id, box_nvertices, get_position, &ctx) == RES_OK);
CHK(senc_scene_analyze(scn, &desc) == RES_OK);
@@ -130,7 +125,7 @@ main(int argc, char** argv)
CHK(senc_scene_ref_put(scn) == RES_OK);
CHK(senc_descriptor_ref_put(desc) == RES_OK);
- CHK(senc_scene_create(dev, 4, &scn) == RES_OK);
+ CHK(senc_scene_create(dev, &scn) == RES_OK);
CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL,
box_nvertices, get_position, &ctx) == RES_OK);
CHK(senc_scene_analyze(scn, &desc) == RES_OK);
@@ -142,12 +137,6 @@ main(int argc, char** argv)
CHK(gid == i);
}
- /* Invalid medium ID */
- ctx.back_media = medium1_12;
- CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL,
- box_nvertices, get_position, &ctx) == RES_BAD_ARG);
- ctx.back_media = medium1;
-
/* Invalid vertex ID */
CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL,
box_nvertices - 1, get_position, &ctx) == RES_BAD_ARG);
diff --git a/src/test_senc_utils.h b/src/test_senc_utils.h
@@ -73,7 +73,6 @@ static const unsigned medium0[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
static const unsigned medium1[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static const unsigned medium2[12] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
static const unsigned medium1_3[12] = { 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 };
-static const unsigned medium1_12[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1 };
static const unsigned medium1_back0[12] = { 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1 };
static const unsigned medium1_front0[12] = { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };