commit 2ac46dd72d68fd77a94b8ceed89d9eac6c28df4a
parent 295a156fb02ba102cca4c9d466ef0cd961df363e
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Thu, 25 Aug 2016 14:14:21 +0200
Remove circular carvings
Carvings are now only polygons
Diffstat:
3 files changed, 9 insertions(+), 63 deletions(-)
diff --git a/src/ssol.h b/src/ssol.h
@@ -136,34 +136,19 @@ struct ssol_quadric {
} data;
};
-struct ssol_carving_circle {
- double center[2];
- double radius;
-};
-
-struct ssol_carving_polygon {
+struct ssol_carving {
void (*get) /* Retrieve the 2D coordinates of the vertex `ivert' */
(const size_t ivert, double position[2], void* ctx);
size_t nb_vertices; /* #vertices */
void* context; /* User defined data */
};
-struct ssol_carving {
- enum ssol_carving_type type;
- union {
- struct ssol_carving_circle circle;
- struct ssol_carving_polygon polygon;
- } data;
- char internal; /* TODO comment/rename (?) this */
-};
-
struct ssol_punched_surface {
struct ssol_quadric* quadric;
struct ssol_carving* carvings;
size_t nb_carvings;
};
-
typedef void
(*ssol_shader_getter_T)
(struct ssol_device* dev,
diff --git a/src/ssol_shape.c b/src/ssol_shape.c
@@ -81,15 +81,7 @@ quadric_ok(const struct ssol_quadric* quadric)
}
static INLINE res_T
-check_circle_ok(const struct ssol_carving_circle* circle)
-{
- if (!circle || circle->radius <= 0)
- return RES_BAD_ARG;
- return RES_OK;
-}
-
-static INLINE res_T
-check_polygon_ok(const struct ssol_carving_polygon* polygon)
+check_carving_ok(const struct ssol_carving* polygon)
{
if(!polygon
|| !polygon->get
@@ -101,21 +93,6 @@ check_polygon_ok(const struct ssol_carving_polygon* polygon)
}
static INLINE res_T
-check_carving_ok(const struct ssol_carving* carving)
-{
- if (!carving)
- return RES_BAD_ARG;
-
- switch (carving->type) {
- case SSOL_CARVING_CIRCLE:
- return check_circle_ok(&carving->data.circle);
- case SSOL_CARVING_POLYGON:
- return check_polygon_ok(&carving->data.polygon);
- default: return RES_BAD_ARG;
- }
-}
-
-static INLINE res_T
punched_surface_ok(const struct ssol_punched_surface* punched_surface)
{
size_t i;
diff --git a/src/test_ssol_shape.c b/src/test_ssol_shape.c
@@ -90,11 +90,9 @@ main(int argc, char** argv)
CHECK(ssol_shape_ref_put(NULL), RES_BAD_ARG);
CHECK(ssol_shape_ref_put(shape), RES_OK);
- carving.type = SSOL_CARVING_CIRCLE;
- carving.internal = 0;
- carving.data.circle.center[0] = 0;
- carving.data.circle.center[1] = 0;
- carving.data.circle.radius = 1;
+ carving.get = get_polygon_vertices;
+ carving.nb_vertices = 1;
+ carving.context = NULL;
quadric.type = SSOL_QUADRIC_PLANE;
punched_surface.nb_carvings = 1;
punched_surface.quadric = &quadric;
@@ -117,27 +115,13 @@ main(int argc, char** argv)
CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG);
quadric.type = SSOL_QUADRIC_PLANE;
- carving.type = (enum ssol_carving_type)999;
+ carving.nb_vertices = 0;
CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG);
- carving.type = SSOL_CARVING_CIRCLE;
+ carving.nb_vertices = 1;
- carving.data.circle.radius = 0;
+ carving.get = NULL;
CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG);
- carving.data.circle.radius = 1;
-
- carving.type = SSOL_CARVING_POLYGON;
- carving.data.polygon.get = get_polygon_vertices;
- carving.data.polygon.nb_vertices = 1;
- carving.data.polygon.context = NULL;
- CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_OK);
-
- carving.data.polygon.nb_vertices = 0;
- CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG);
- carving.data.polygon.nb_vertices = 1;
-
- carving.data.polygon.get = NULL;
- CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG);
- carving.data.polygon.get = get_polygon_vertices;
+ carving.get = get_polygon_vertices;
quadric.type = SSOL_QUADRIC_PARABOL;
quadric.data.parabol.focal = 1;