commit fb1f3fe52b7d9f0711bc83d0e312b96fabbf4de1
parent 04a0d990f6d2dff63680fb9e9b3c5fb52e180c2f
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Tue, 11 Oct 2016 15:27:42 +0200
Replace the ssol_instance_dont_sample function by ssol_instance_sample
Diffstat:
12 files changed, 32 insertions(+), 27 deletions(-)
diff --git a/src/ssol.h b/src/ssol.h
@@ -223,6 +223,8 @@ struct ssol_receiver_data {
float normal[3];
double weight;
float uv[2];
+
+ /* TODO Add the geometry and primitive identifier */
};
/* result for MC simulations */
@@ -490,10 +492,12 @@ ssol_instance_set_receiver
(struct ssol_instance* instance,
const int mask); /* Combination of ssol_face_flags */
+/* Define whether or not the instance is sampled or not. By default an instance
+ * is sampled. */
SSOL_API res_T
-ssol_instance_dont_sample
+ssol_instance_sample
(struct ssol_instance* instance,
- const int dont_sample);
+ const int sample);
/* Retrieve the id of the shape */
SSOL_API res_T
diff --git a/src/ssol_instance.c b/src/ssol_instance.c
@@ -77,6 +77,7 @@ ssol_object_instantiate
SSOL(object_ref_get(object));
instance->dev = dev;
instance->object = object;
+ instance->sample = 1;
d33_set_identity(instance->transform);
d3_splat(instance->transform + 9, 0);
@@ -159,12 +160,12 @@ ssol_instance_set_receiver(struct ssol_instance* instance, const int mask)
}
res_T
-ssol_instance_dont_sample
+ssol_instance_sample
(struct ssol_instance* instance,
- const int dont_sample)
+ const int sample)
{
if(!instance) return RES_BAD_ARG;
- instance->dont_sample = dont_sample;
+ instance->sample = sample;
return RES_OK;
}
diff --git a/src/ssol_instance_c.h b/src/ssol_instance_c.h
@@ -26,7 +26,7 @@ struct ssol_instance {
struct s3d_shape* shape_samp; /* Instantiated Star-3D shape to sample */
double transform[12]; /* Column major 4x3 affine transformation */
int receiver_mask; /* Combination of ssol_face_flag */
- int dont_sample;
+ int sample; /* Define whether or not the instance is sampled or not */
struct fid id; /* Unique identifier */
diff --git a/src/ssol_scene.c b/src/ssol_scene.c
@@ -295,7 +295,7 @@ scene_setup_s3d_sampling_scene
hr = 1;
}
- if(inst->dont_sample) continue;
+ if(!inst->sample) continue;
/* FIXME: should not sample virtual (material) instance
as material is used to compute output dir */
hs = 1;
diff --git a/src/test_ssol_instance.c b/src/test_ssol_instance.c
@@ -75,9 +75,9 @@ main(int argc, char** argv)
CHECK(ssol_instance_set_receiver(NULL, 0), RES_BAD_ARG);
CHECK(ssol_instance_set_receiver(instance, 0), RES_OK);
#undef SET_RECEIVER
- CHECK(ssol_instance_dont_sample(NULL, 1), RES_BAD_ARG);
- CHECK(ssol_instance_dont_sample(instance, 1), RES_OK);
- CHECK(ssol_instance_dont_sample(instance, 0), RES_OK);
+ CHECK(ssol_instance_sample(NULL, 0), RES_BAD_ARG);
+ CHECK(ssol_instance_sample(instance, 0), RES_OK);
+ CHECK(ssol_instance_sample(instance, 1), RES_OK);
CHECK(ssol_instance_ref_put(instance), RES_OK);
diff --git a/src/test_ssol_solver1.c b/src/test_ssol_solver1.c
@@ -147,13 +147,13 @@ main(int argc, char** argv)
CHECK(ssol_solve(scene, rng, 1, stdout, estimator), RES_OK); /* ready to solve! */
- CHECK(ssol_instance_dont_sample(target, 1), RES_OK);
- CHECK(ssol_instance_dont_sample(secondary, 1), RES_OK);
- CHECK(ssol_instance_dont_sample(heliostat, 1), RES_OK);
+ CHECK(ssol_instance_sample(target, 0), RES_OK);
+ CHECK(ssol_instance_sample(secondary, 0), RES_OK);
+ CHECK(ssol_instance_sample(heliostat, 0), RES_OK);
CHECK(ssol_solve(scene, rng, 10, stdout, estimator), RES_BAD_ARG); /* no geometry to sample */
- CHECK(ssol_instance_dont_sample(target, 0), RES_OK);
- CHECK(ssol_instance_dont_sample(secondary, 0), RES_OK);
- CHECK(ssol_instance_dont_sample(heliostat, 0), RES_OK);
+ CHECK(ssol_instance_sample(target, 1), RES_OK);
+ CHECK(ssol_instance_sample(secondary, 1), RES_OK);
+ CHECK(ssol_instance_sample(heliostat, 1), RES_OK);
CHECK(ssol_scene_detach_sun(scene, sun), RES_OK);
CHECK(ssol_solve(scene, rng, 10, stdout, estimator), RES_BAD_ARG); /* no attached sun */
@@ -224,8 +224,8 @@ main(int argc, char** argv)
CHECK(status.Nf, fcount);
/* sample primary mirror only; variance is low */
- CHECK(ssol_instance_dont_sample(target, 1), RES_OK);
- CHECK(ssol_instance_dont_sample(secondary, 1), RES_OK);
+ CHECK(ssol_instance_sample(target, 0), RES_OK);
+ CHECK(ssol_instance_sample(secondary, 0), RES_OK);
NCHECK(tmp = tmpfile(), 0);
CHECK(ssol_estimator_clear(estimator), RES_OK);
diff --git a/src/test_ssol_solver2.c b/src/test_ssol_solver2.c
@@ -169,7 +169,7 @@ main(int argc, char** argv)
CHECK(ssol_object_instantiate(s_object, &secondary), RES_OK);
CHECK(ssol_instance_set_receiver(secondary, SSOL_FRONT), RES_OK);
CHECK(ssol_instance_set_transform(secondary, transform1), RES_OK);
- CHECK(ssol_instance_dont_sample(secondary, 1), RES_OK);
+ CHECK(ssol_instance_sample(secondary, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, secondary), RES_OK);
CHECK(ssol_object_create(dev, &t_object), RES_OK);
@@ -177,7 +177,7 @@ main(int argc, char** argv)
CHECK(ssol_object_instantiate(t_object, &target), RES_OK);
CHECK(ssol_instance_set_transform(target, transform2), RES_OK);
CHECK(ssol_instance_set_receiver(target, SSOL_FRONT), RES_OK);
- CHECK(ssol_instance_dont_sample(target, 1), RES_OK);
+ CHECK(ssol_instance_sample(target, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, target), RES_OK);
NCHECK(tmp = tmpfile(), 0);
diff --git a/src/test_ssol_solver2b.c b/src/test_ssol_solver2b.c
@@ -174,7 +174,7 @@ main(int argc, char** argv)
CHECK(ssol_object_instantiate(s_object, &secondary), RES_OK);
CHECK(ssol_instance_set_receiver(secondary, SSOL_FRONT), RES_OK);
CHECK(ssol_instance_set_transform(secondary, transform1), RES_OK);
- CHECK(ssol_instance_dont_sample(secondary, 1), RES_OK);
+ CHECK(ssol_instance_sample(secondary, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, secondary), RES_OK);
CHECK(ssol_object_create(dev, &t_object), RES_OK);
@@ -182,7 +182,7 @@ main(int argc, char** argv)
CHECK(ssol_object_instantiate(t_object, &target), RES_OK);
CHECK(ssol_instance_set_transform(target, transform2), RES_OK);
CHECK(ssol_instance_set_receiver(target, SSOL_FRONT), RES_OK);
- CHECK(ssol_instance_dont_sample(target, 1), RES_OK);
+ CHECK(ssol_instance_sample(target, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, target), RES_OK);
NCHECK(tmp = tmpfile(), 0);
diff --git a/src/test_ssol_solver3.c b/src/test_ssol_solver3.c
@@ -136,7 +136,7 @@ main(int argc, char** argv)
CHECK(ssol_object_instantiate(t_object, &target), RES_OK);
CHECK(ssol_instance_set_transform(target, transform), RES_OK);
CHECK(ssol_instance_set_receiver(target, SSOL_FRONT), RES_OK);
- CHECK(ssol_instance_dont_sample(target, 1), RES_OK);
+ CHECK(ssol_instance_sample(target, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, target), RES_OK);
NCHECK(tmp = tmpfile(), 0);
diff --git a/src/test_ssol_solver3N.c b/src/test_ssol_solver3N.c
@@ -201,7 +201,7 @@ main(int argc, char** argv)
CHECK(ssol_object_instantiate(t_object, &target), RES_OK);
CHECK(ssol_instance_set_transform(target, transform), RES_OK);
CHECK(ssol_instance_set_receiver(target, SSOL_FRONT), RES_OK);
- CHECK(ssol_instance_dont_sample(target, 1), RES_OK);
+ CHECK(ssol_instance_sample(target, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, target), RES_OK);
NCHECK(tmp = tmpfile(), 0);
diff --git a/src/test_ssol_solver4.c b/src/test_ssol_solver4.c
@@ -137,12 +137,12 @@ main(int argc, char** argv)
CHECK(ssol_object_instantiate(t_object, &target1), RES_OK);
CHECK(ssol_instance_set_transform(target1, transform), RES_OK);
CHECK(ssol_instance_set_receiver(target1, SSOL_FRONT), RES_OK);
- CHECK(ssol_instance_dont_sample(target1, 1), RES_OK);
+ CHECK(ssol_instance_sample(target1, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, target1), RES_OK);
CHECK(ssol_object_instantiate(t_object, &target2), RES_OK);
CHECK(ssol_instance_set_transform(target2, transform), RES_OK);
CHECK(ssol_instance_set_receiver(target2, SSOL_FRONT), RES_OK);
- CHECK(ssol_instance_dont_sample(target2, 1), RES_OK);
+ CHECK(ssol_instance_sample(target2, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, target2), RES_OK);
NCHECK(tmp = tmpfile(), 0);
diff --git a/src/test_ssol_solver5.c b/src/test_ssol_solver5.c
@@ -136,7 +136,7 @@ main(int argc, char** argv)
CHECK(ssol_object_instantiate(t_object, &target), RES_OK);
CHECK(ssol_instance_set_transform(target, transform), RES_OK);
CHECK(ssol_instance_set_receiver(target, SSOL_FRONT), RES_OK);
- CHECK(ssol_instance_dont_sample(target, 1), RES_OK);
+ CHECK(ssol_instance_sample(target, 0), RES_OK);
CHECK(ssol_scene_attach_instance(scene, target), RES_OK);
NCHECK(tmp = tmpfile(), 0);