commit f2382dbcf45057d7d7d3be5aa7370a7cabc66611
parent 8d5a26d2b313200478b1fce1cbf5d2bf3963f85b
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Wed, 14 Feb 2018 10:37:28 +0100
Add enclosure dump to obj in tests.
Diffstat:
2 files changed, 46 insertions(+), 3 deletions(-)
diff --git a/src/test_senc_cube_on_cube.c b/src/test_senc_cube_on_cube.c
@@ -22,8 +22,8 @@
Z
^
4 | +-----------------------+
- | | |
-3 | | +-----+ 3
+ | | 3
+3 | | +-----+ |
| m2 | m1 | m0 2 |
| | | | |
2 | | +-----+ |
@@ -36,6 +36,7 @@
|--------------------------> X / Y
0 1 2 3 4
*/
+
int
main(int argc, char** argv)
{
@@ -44,7 +45,7 @@ main(int argc, char** argv)
struct senc_device* dev = NULL;
struct senc_scene* scn = NULL;
struct context ctx;
- unsigned count;
+ unsigned count, i;
(void)argc, (void)argv;
CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK);
@@ -106,6 +107,13 @@ main(int argc, char** argv)
CHK(senc_descriptor_get_global_triangle_count(desc, &count) == RES_OK);
CHK(count == 34);
+ CHK(senc_descriptor_get_enclosure_count(desc, &count) == RES_OK);
+ FOR_EACH(i, 0, count) {
+ char name[128];
+ snprintf(name, sizeof(name), "test_cube_on_cube_%u.obj", i);
+ dump_enclosure(desc, i, name);
+ }
+
CHK(senc_scene_ref_put(scn) == RES_OK);
CHK(senc_device_ref_put(dev) == RES_OK);
if(desc) CHK(senc_descriptor_ref_put(desc) == RES_OK);
diff --git a/src/test_senc_utils.h b/src/test_senc_utils.h
@@ -127,6 +127,41 @@ dump_mesh
}
}
+static void
+dump_enclosure
+ (struct senc_descriptor* desc,
+ const unsigned enc,
+ const char* name)
+{
+ struct senc_enclosure* enclosure;
+ const struct enclosure_header* header;
+ FILE* stream;
+ unsigned count, i;
+
+ ASSERT(desc && name);
+
+ CHK(senc_descriptor_get_enclosure_count(desc, &count) == RES_OK);
+ ASSERT(enc < count);
+ CHK(senc_descriptor_get_enclosure(desc, enc, &enclosure) == RES_OK);
+ CHK(senc_enclosure_get_header(enclosure, &header) == RES_OK);
+
+ stream = fopen(name, "w");
+ CHK(stream);
+ FOR_EACH(i, 0, header->vertices_count) {
+ double tmp[3];
+ CHK(senc_enclosure_get_vertices(enclosure, i, tmp) == RES_OK);
+ fprintf(stream, "v %g %g %g\n", SPLIT3(tmp));
+ }
+ FOR_EACH(i, 0, header->unique_triangle_count) {
+ unsigned indices[3];
+ CHK(senc_enclosure_get_indices(enclosure, i, indices) == RES_OK);
+ fprintf(stream, "f %lu %lu %lu\n",
+ 1+indices[0], 1+indices[1], 1+indices[2]);
+ }
+ CHK(senc_enclosure_ref_put(enclosure) == RES_OK);
+ fclose(stream);
+}
+
static INLINE void
check_memory_allocator(struct mem_allocator* allocator)
{