commit 677bad93dd788141b13f87c5d10557fff0264dff
parent 2a16edfa7aa9ca88a76cf1e8ec52f12ccc43b35b
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Tue, 28 Jul 2015 17:33:31 +0200
Add the S3D_PRIMITIVE_EQ macro
Define whether 2 primitives are equal or not
Diffstat:
2 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/src/s3d.h b/src/s3d.h
@@ -103,6 +103,12 @@ struct s3d_primitive {
void* inst__;
};
+/* Helper macro that defines whether or not 2 primites are equal */
+#define S3D_PRIMITIVE_EQ(Prim0, Prim1) \
+ ( (Prim0)->prim_id == (Prim1)->prim_id \
+ && (Prim0)->geom_id == (Prim1)->geom_id \
+ && (Prim0)->inst_id == (Prim1)->inst_id)
+
/* Untyped vertex attribute */
struct s3d_attrib {
float value[4];
diff --git a/src/test_s3d_sampler.c b/src/test_s3d_sampler.c
@@ -59,6 +59,7 @@ main(int argc, char** argv)
struct s3d_vertex_data attribs[2];
struct s3d_sampler* sampler;
struct s3d_primitive prim;
+ struct s3d_primitive prim1;
struct s3d_attrib attr0, attr1;
struct cbox_desc desc;
float uv[2];
@@ -127,6 +128,18 @@ main(int argc, char** argv)
CHECK(s3d_sampler_get(sampler, 0.5f, 0.5f, 0.5f, &prim, uv), RES_OK);
CHECK(s3d_primitive_get_attrib(&prim, S3D_POSITION, uv, &attr1), RES_OK);
+ prim = prim1;
+ CHECK(S3D_PRIMITIVE_EQ(&prim, &prim1), 1);
+ prim1.inst_id = S3D_INVALID_ID;
+ CHECK(S3D_PRIMITIVE_EQ(&prim, &prim1), 0);
+ prim1.inst_id = prim.inst_id;;
+ CHECK(S3D_PRIMITIVE_EQ(&prim, &prim1), 1);
+ prim1.prim_id = S3D_INVALID_ID;
+ CHECK(S3D_PRIMITIVE_EQ(&prim, &prim1), 0);
+ prim1.prim_id = prim.prim_id;
+ prim1.geom_id = S3D_INVALID_ID;
+ CHECK(S3D_PRIMITIVE_EQ(&prim, &prim1), 0);
+
CHECK(attr0.type, S3D_FLOAT3);
CHECK(attr1.type, S3D_FLOAT3);
CHECK(f3_eq_eps(attr0.value, attr1.value, 1.e-6f), 1);