commit caf09eacf828b7737354d072c266ce914d04b9ba
parent c5cbf1eb480e6361f2c21d5c4f3959acffbcc493
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Thu, 21 Feb 2019 14:11:40 +0100
Add shader/data accessors to the interface and medium API
Diffstat:
5 files changed, 114 insertions(+), 4 deletions(-)
diff --git a/src/sdis.h b/src/sdis.h
@@ -430,6 +430,11 @@ sdis_fluid_create
struct sdis_medium** fluid);
SDIS_API res_T
+sdis_fluid_get_shader
+ (const struct sdis_medium* fluid,
+ struct sdis_fluid_shader* shader);
+
+SDIS_API res_T
sdis_solid_create
(struct sdis_device* dev,
const struct sdis_solid_shader* shader,
@@ -437,6 +442,11 @@ sdis_solid_create
struct sdis_medium** solid);
SDIS_API res_T
+sdis_solid_get_shader
+ (const struct sdis_medium* solid,
+ struct sdis_solid_shader* shader);
+
+SDIS_API res_T
sdis_medium_ref_get
(struct sdis_medium* medium);
@@ -472,6 +482,15 @@ SDIS_API res_T
sdis_interface_ref_put
(struct sdis_interface* interf);
+SDIS_API res_T
+sdis_interface_get_shader
+ (const struct sdis_interface* interface,
+ struct sdis_interface_shader* shader);
+
+SDIS_API struct sdis_data*
+sdis_interface_get_data
+ (struct sdis_interface* interface);
+
/*******************************************************************************
* A scene is a collection of primitives. Each primitive is the geometric
* support of the interface between 2 media.
@@ -610,7 +629,7 @@ sdis_estimator_get_type
SDIS_API res_T
sdis_estimator_get_realisation_count
(const struct sdis_estimator* estimator,
- size_t* nrealisations); /* Succesfull ones */
+ size_t* nrealisations); /* Successful ones */
SDIS_API res_T
sdis_estimator_get_failure_count
diff --git a/src/sdis_interface.c b/src/sdis_interface.c
@@ -184,6 +184,23 @@ sdis_interface_ref_put(struct sdis_interface* interf)
return RES_OK;
}
+SDIS_API res_T
+sdis_interface_get_shader
+ (const struct sdis_interface* interf,
+ struct sdis_interface_shader* shader)
+{
+ if(!interf || !shader) return RES_BAD_ARG;
+ *shader = interf->shader;
+ return RES_OK;
+}
+
+struct sdis_data*
+sdis_interface_get_data(struct sdis_interface* interf)
+{
+ ASSERT(interf);
+ return interf->data;
+}
+
/*******************************************************************************
* Local function
******************************************************************************/
diff --git a/src/sdis_medium.c b/src/sdis_medium.c
@@ -142,6 +142,15 @@ error:
}
res_T
+sdis_fluid_get_shader
+ (const struct sdis_medium* mdm, struct sdis_fluid_shader* shader)
+{
+ if(!mdm || mdm->type != SDIS_FLUID || !shader) return RES_BAD_ARG;
+ *shader = mdm->shader.fluid;
+ return RES_OK;
+}
+
+res_T
sdis_solid_create
(struct sdis_device* dev,
const struct sdis_solid_shader* shader,
@@ -187,6 +196,15 @@ error:
}
res_T
+sdis_solid_get_shader
+ (const struct sdis_medium* mdm, struct sdis_solid_shader* shader)
+{
+ if(!mdm || mdm->type != SDIS_SOLID || !shader) return RES_BAD_ARG;
+ *shader = mdm->shader.solid;
+ return RES_OK;
+}
+
+res_T
sdis_medium_ref_get(struct sdis_medium* medium)
{
if(!medium) return RES_BAD_ARG;
diff --git a/src/test_sdis_interface.c b/src/test_sdis_interface.c
@@ -20,6 +20,7 @@ int
main(int argc, char** argv)
{
struct mem_allocator allocator;
+ struct sdis_data* data = NULL;
struct sdis_device* dev = NULL;
struct sdis_medium* fluid = NULL;
struct sdis_medium* solid = NULL;
@@ -27,6 +28,7 @@ main(int argc, char** argv)
struct sdis_fluid_shader fluid_shader = DUMMY_FLUID_SHADER;
struct sdis_solid_shader solid_shader = DUMMY_SOLID_SHADER;
struct sdis_interface_shader shader = DUMMY_INTERFACE_SHADER;
+ struct sdis_interface_shader shader2 = SDIS_INTERFACE_SHADER_NULL;
(void)argc, (void)argv;
OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator));
@@ -107,6 +109,29 @@ main(int argc, char** argv)
OK(sdis_interface_ref_put(interf));
BA(CREATE(dev, solid, fluid, &shader, NULL, &interf));
shader.convection_coef_upper_bound = 0;
+
+ OK(sdis_data_create(dev, 4, 16, NULL, &data));
+ OK(CREATE(dev, solid, fluid, &shader, data, &interf));
+ CHK(sdis_interface_get_data(interf) == data);
+
+ BA(sdis_interface_get_shader(NULL, &shader2));
+ BA(sdis_interface_get_shader(interf, NULL));
+ OK(sdis_interface_get_shader(interf, &shader2));
+
+ CHK(shader.convection_coef == shader2.convection_coef);
+ CHK(shader.convection_coef_upper_bound == shader2.convection_coef_upper_bound);
+ CHK(shader.front.temperature == shader2.front.temperature);
+ CHK(shader.front.flux == shader2.front.flux);
+ CHK(shader.front.emissivity == shader2.front.emissivity);
+ CHK(shader.front.specular_fraction == shader2.front.specular_fraction);
+ CHK(shader.back.temperature == shader2.back.temperature);
+ CHK(shader.back.flux == shader2.back.flux);
+ CHK(shader.back.emissivity == shader2.back.emissivity);
+ CHK(shader.back.specular_fraction == shader2.back.specular_fraction);
+
+ OK(sdis_interface_ref_put(interf));
+ OK(sdis_data_ref_put(data));
+
#undef CREATE
OK(sdis_device_ref_put(dev));
diff --git a/src/test_sdis_medium.c b/src/test_sdis_medium.c
@@ -28,6 +28,8 @@ main(int argc, char** argv)
struct sdis_medium* solid = NULL;
struct sdis_fluid_shader fluid_shader = DUMMY_FLUID_SHADER;
struct sdis_solid_shader solid_shader = DUMMY_SOLID_SHADER;
+ struct sdis_fluid_shader fluid_shader2 = SDIS_FLUID_SHADER_NULL;
+ struct sdis_solid_shader solid_shader2 = SDIS_SOLID_SHADER_NULL;
(void)argc, (void)argv;
OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator));
@@ -64,9 +66,9 @@ main(int argc, char** argv)
fluid_shader.temperature = DUMMY_FLUID_SHADER.temperature;
fluid_shader.t0 = -1;
- BA(sdis_fluid_create(dev, &fluid_shader, NULL, &solid));
+ BA(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid));
fluid_shader.t0 = INF;
- BA(sdis_fluid_create(dev, &fluid_shader, NULL, &solid));
+ BA(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid));
fluid_shader.t0 = DUMMY_FLUID_SHADER.t0;
BA(sdis_fluid_create(dev, &SDIS_FLUID_SHADER_NULL, NULL, &fluid));
@@ -82,7 +84,8 @@ main(int argc, char** argv)
OK(sdis_solid_create(dev, &solid_shader, data, &solid));
CHK(sdis_medium_get_type(solid) == SDIS_SOLID);
CHK(sdis_medium_get_data(solid) == data);
- OK(sdis_medium_ref_put(solid));
+
+ OK(sdis_medium_ref_put(solid));
OK(sdis_data_ref_put(data));
solid_shader.calorific_capacity = NULL;
@@ -111,6 +114,34 @@ main(int argc, char** argv)
BA(sdis_solid_create(dev, &solid_shader, NULL, &solid));
solid_shader.t0 = DUMMY_SOLID_SHADER.t0;
+ OK(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid));
+ OK(sdis_solid_create(dev, &solid_shader, NULL, &solid));
+
+ BA(sdis_fluid_get_shader(NULL, &fluid_shader2));
+ BA(sdis_fluid_get_shader(fluid, NULL));
+ BA(sdis_fluid_get_shader(solid, &fluid_shader2));
+ OK(sdis_fluid_get_shader(fluid, &fluid_shader2));
+
+ CHK(fluid_shader.calorific_capacity == fluid_shader2.calorific_capacity);
+ CHK(fluid_shader.volumic_mass == fluid_shader2.volumic_mass);
+ CHK(fluid_shader.temperature == fluid_shader2.temperature);
+ CHK(fluid_shader.t0 == fluid_shader2.t0);
+
+ BA(sdis_solid_get_shader(NULL, &solid_shader2));
+ BA(sdis_solid_get_shader(solid, NULL));
+ BA(sdis_solid_get_shader(fluid, &solid_shader2));
+ OK(sdis_solid_get_shader(solid, &solid_shader2));
+
+ CHK(solid_shader.calorific_capacity == solid_shader2.calorific_capacity);
+ CHK(solid_shader.thermal_conductivity == solid_shader2.thermal_conductivity);
+ CHK(solid_shader.volumic_mass == solid_shader2.volumic_mass);
+ CHK(solid_shader.delta_solid == solid_shader2.delta_solid);
+ CHK(solid_shader.volumic_power == solid_shader2.volumic_power);
+ CHK(solid_shader.temperature == solid_shader2.temperature);
+ CHK(solid_shader.t0 == solid_shader2.t0);
+
+ OK(sdis_medium_ref_put(solid));
+ OK(sdis_medium_ref_put(fluid));
OK(sdis_device_ref_put(dev));
check_memory_allocator(&allocator);