commit 290716a4bca6200bcfb04f784fb753e45e979a30
parent 323f0953ec36f4d849cbf3435ae83a0c9482e4fb
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Thu, 12 Apr 2018 14:24:21 +0200
API change: remove the need to give #media when creating a scene.
Diffstat:
12 files changed, 21 insertions(+), 42 deletions(-)
diff --git a/src/senc2d.h b/src/senc2d.h
@@ -104,7 +104,6 @@ senc2d_device_ref_put
SENC2D_API res_T
senc2d_scene_create
(struct senc2d_device* device,
- const unsigned media_count,
struct senc2d_scene** scene);
/* Add a new set of vertices and segments to the scene.
diff --git a/src/senc2d_scene.c b/src/senc2d_scene.c
@@ -48,14 +48,12 @@ scene_release(ref_T * ref)
res_T
senc2d_scene_create
(struct senc2d_device* dev,
- const unsigned nmeds,
struct senc2d_scene** out_scn)
{
struct senc2d_scene* scn = NULL;
res_T res = RES_OK;
- if(!dev || !out_scn || !nmeds || nmeds > MEDIUM_MAX__)
- return RES_BAD_ARG;
+ if(!dev || !out_scn) return RES_BAD_ARG;
scn = MEM_CALLOC(dev->allocator, 1, sizeof(struct senc2d_scene));
if(!scn) {
@@ -69,7 +67,7 @@ senc2d_scene_create
scn->ngeoms = 0;
scn->nsegs = 0;
scn->nusegs = 0;
- scn->nmeds = (medium_id_t)nmeds;
+ scn->nmeds = 0;
scn->nverts = 0;
scn->nuverts = 0;
darray_segment_in_init(dev->allocator, &scn->segments_in);
@@ -77,7 +75,6 @@ senc2d_scene_create
htable_vrtx_init(dev->allocator, &scn->unique_vertices);
htable_seg_init(dev->allocator, &scn->unique_segments);
darray_side_range_init(dev->allocator, &scn->media_use);
- darray_side_range_resize(&scn->media_use, nmeds);
exit:
if(scn) *out_scn = scn;
@@ -191,17 +188,12 @@ senc2d_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: segment %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;
+ /* New medium */
+ ASSERT(med[j] <= MEDIUM_MAX__);
+ scn->nmeds = 1 + med[j];
+ darray_side_range_resize(&scn->media_use, scn->nmeds);
}
tmp.medium[j] = (medium_id_t)med[j];
}
diff --git a/src/test_senc2d_descriptor.c b/src/test_senc2d_descriptor.c
@@ -41,7 +41,7 @@ main(int argc, char** argv)
CHK(senc2d_device_create(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev)
== RES_OK);
- CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
/* A 2D square */
ctx.positions = square_vertices;
diff --git a/src/test_senc2d_enclosure.c b/src/test_senc2d_enclosure.c
@@ -48,7 +48,7 @@ main(int argc, char** argv)
CHK(senc2d_device_create(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev)
== RES_OK);
- CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
s2d_attribs.type = S2D_FLOAT2;
s2d_attribs.usage = S2D_POSITION;
@@ -178,7 +178,7 @@ main(int argc, char** argv)
/* Same 2D square, but with a hole (incomplete).
* 1 single enclosure including both sides of segments */
- CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
ctx.positions = square_vertices;
ctx.indices = square_indices;
diff --git a/src/test_senc2d_many_enclosures.c b/src/test_senc2d_many_enclosures.c
@@ -76,7 +76,7 @@ main(int argc, char** argv)
/* 64^3 = 262144 circles */
#define NB_CIRC (NB_CIRC_1 * NB_CIRC_1 * NB_CIRC_1)
/* Create the scene */
- CHK(senc2d_scene_create(dev, NB_CIRC_1 + 1, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
ctx.positions = NULL;
ctx.indices = NULL;
diff --git a/src/test_senc2d_many_segments.c b/src/test_senc2d_many_segments.c
@@ -73,7 +73,7 @@ main(int argc, char** argv)
#define NB_CIRC 4
/* Create the scene */
- CHK(senc2d_scene_create(dev, NB_CIRC+1, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
ctx.positions = NULL;
ctx.indices = NULL;
diff --git a/src/test_senc2d_sample_enclosure.c b/src/test_senc2d_sample_enclosure.c
@@ -48,7 +48,7 @@ main(int argc, char** argv)
CHK(senc2d_device_create(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev)
== RES_OK);
- CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
vrtx_get.type = S2D_FLOAT2;
vrtx_get.usage = S2D_POSITION;
diff --git a/src/test_senc2d_scene.c b/src/test_senc2d_scene.c
@@ -36,15 +36,10 @@ main(int argc, char** argv)
CHK(senc2d_device_create(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev)
== RES_OK);
- CHK(senc2d_scene_create(NULL, 2, &scn) == RES_BAD_ARG);
- CHK(senc2d_scene_create(dev, 0, &scn) == RES_BAD_ARG);
- CHK(senc2d_scene_create(dev, 2, NULL) == RES_BAD_ARG);
- CHK(senc2d_scene_create(NULL, 0, &scn) == RES_BAD_ARG);
- CHK(senc2d_scene_create(NULL, 2, NULL) == RES_BAD_ARG);
- CHK(senc2d_scene_create(dev, 0, NULL) == RES_BAD_ARG);
- CHK(senc2d_scene_create(NULL, 0, NULL) == RES_BAD_ARG);
- /* It is valid to have unused media */
- CHK(senc2d_scene_create(dev, 4, &scn) == RES_OK);
+ CHK(senc2d_scene_create(NULL, &scn) == RES_BAD_ARG);
+ CHK(senc2d_scene_create(dev, NULL) == RES_BAD_ARG);
+ CHK(senc2d_scene_create(NULL, NULL) == RES_BAD_ARG);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
CHK(senc2d_scene_get_segments_count(NULL, &count) == RES_BAD_ARG);
CHK(senc2d_scene_get_segments_count(scn, NULL) == RES_BAD_ARG);
@@ -118,7 +113,7 @@ main(int argc, char** argv)
CHK(senc2d_scene_ref_put(scn) == RES_OK);
CHK(senc2d_descriptor_ref_put(desc) == RES_OK);
- CHK(senc2d_scene_create(dev, 4, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
CHK(senc2d_scene_add_geometry(scn, square_nsegments, get_indices, get_media,
get_global_id, square_nvertices, get_position, &ctx) == RES_OK);
CHK(senc2d_scene_analyze(scn, &desc) == RES_OK);
@@ -132,7 +127,7 @@ main(int argc, char** argv)
CHK(senc2d_scene_ref_put(scn) == RES_OK);
CHK(senc2d_descriptor_ref_put(desc) == RES_OK);
- CHK(senc2d_scene_create(dev, 4, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
CHK(senc2d_scene_add_geometry(scn, square_nsegments, get_indices, get_media, NULL,
square_nvertices, get_position, &ctx) == RES_OK);
CHK(senc2d_scene_analyze(scn, &desc) == RES_OK);
@@ -144,12 +139,6 @@ main(int argc, char** argv)
CHK(gid == i);
}
- /* Invalid medium ID */
- ctx.back_media = medium1_12;
- CHK(senc2d_scene_add_geometry(scn, square_nsegments, get_indices, get_media, NULL,
- square_nvertices, get_position, &ctx) == RES_BAD_ARG);
- ctx.back_media = medium1;
-
/* Invalid vertex ID */
CHK(senc2d_scene_add_geometry(scn, square_nsegments, get_indices, get_media, NULL,
square_nvertices - 1, get_position, &ctx) == RES_BAD_ARG);
diff --git a/src/test_senc2d_square_behind_square.c b/src/test_senc2d_square_behind_square.c
@@ -33,7 +33,7 @@ main(int argc, char** argv)
(NULL, &allocator, 1/*SENC2D_NTHREADS_DEFAULT*/, 1, &dev) == RES_OK);
/* Create the scene */
- CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
ctx.positions = square_vertices;
ctx.indices = square_indices;
diff --git a/src/test_senc2d_square_in_square.c b/src/test_senc2d_square_in_square.c
@@ -33,7 +33,7 @@ main(int argc, char** argv)
(NULL, &allocator, 2/*SENC2D_NTHREADS_DEFAULT*/, 1, &dev) == RES_OK);
/* Create the scene */
- CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
ctx.positions = square_vertices;
ctx.indices = square_indices;
diff --git a/src/test_senc2d_square_on_square.c b/src/test_senc2d_square_on_square.c
@@ -57,7 +57,7 @@ main(int argc, char** argv)
(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev) == RES_OK);
/* Create the scene */
- CHK(senc2d_scene_create(dev, 3, &scn) == RES_OK);
+ CHK(senc2d_scene_create(dev, &scn) == RES_OK);
ctx.positions = square_vertices;
ctx.indices = square_indices;
diff --git a/src/test_senc2d_utils.h b/src/test_senc2d_utils.h
@@ -67,7 +67,6 @@ static const unsigned medium0[4] = { 0, 0, 0, 0 };
static const unsigned medium1[4] = { 1, 1, 1, 1 };
static const unsigned medium2[4] = { 2, 2, 2, 2 };
static const unsigned medium1_3[4] = { 1, 1, 3, 1 };
-static const unsigned medium1_12[4] = { 1, 12, 1, 1 };
static const unsigned medium1_back0[4] = { 1, 1, 1, 0 };
static const unsigned medium1_front0[4] = { 1, 0, 1, 1 };