commit 4041e5f38fcfe93c503a98e3f58d3cca8774ff84
parent 79d7856ba1e70a3ff506e5f4afbf248a5edbf77d
Author: vaplv <vaplv@free.fr>
Date: Tue, 6 Jan 2015 21:50:11 +0100
Change the aw_map and aw_material API
Diffstat:
4 files changed, 191 insertions(+), 284 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -42,7 +42,7 @@ add_library(aw SHARED ${AW_FILES_SRC} ${AW_FILES_INC})
target_link_libraries(aw RSys)
set(VERSION_MAJOR 0)
-set(VERSION_MINOR 0)
+set(VERSION_MINOR 1)
set(VERSION_PATCH 0)
set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
set_target_properties(aw PROPERTIES
diff --git a/src/aw.h b/src/aw.h
@@ -17,6 +17,7 @@
#define AW_H
#include <rsys/rsys.h>
+#include <rsys/str.h>
#ifdef AW_SHARED_BUILD
#define AW_API extern EXPORT_SYM
@@ -101,7 +102,7 @@ struct aw_color {
};
struct aw_map {
- char* filename; /* NULL <=> Not defined */
+ struct str filename; /* str_len == 0 <=> Not defined */
int options_mask;
float image_bias; /* Scalar to add to the image pixels */
float image_scale; /* Scalar to multiply to the image pixels */
@@ -114,7 +115,7 @@ struct aw_map {
};
struct aw_material {
- char* name;
+ struct str name;
struct aw_color ambient;
struct aw_color diffuse;
struct aw_color specular;
@@ -127,9 +128,6 @@ struct aw_material {
struct aw_map specular_map;
struct aw_map specular_exponent_map; /* Scalar texture */
struct aw_map bump_map; /* Scalar texture with valid bump multiplier */
-
- /* Internal data */
- struct mem_allocator* allocator__;
};
struct aw_obj;
@@ -254,19 +252,49 @@ aw_mtl_material_get
const size_t imaterial,
struct aw_material* material);
+/*******************************************************************************
+ * Map functions
+ ******************************************************************************/
+AW_API res_T
+aw_map_init
+ (struct mem_allocator* allocator,
+ struct aw_map* map);
+
+AW_API res_T
+aw_map_release
+ (struct aw_map* map);
+
+AW_API res_T
+aw_map_copy
+ (struct aw_map* dst,
+ const struct aw_map* src);
+
+AW_API res_T
+aw_map_copy_and_release
+ (struct aw_map* dst,
+ struct aw_map* src);
+
+/*******************************************************************************
+ * Material functions
+ ******************************************************************************/
AW_API res_T
aw_material_init
(struct mem_allocator* allocator,
struct aw_material* material);
AW_API res_T
+aw_material_release
+ (struct aw_material* material);
+
+AW_API res_T
aw_material_copy
(struct aw_material* dst,
const struct aw_material* src);
AW_API res_T
-aw_material_release
- (struct aw_material* material);
+aw_material_copy_and_release
+ (struct aw_material* dst,
+ struct aw_material* src);
END_DECLS
diff --git a/src/aw_mtl.c b/src/aw_mtl.c
@@ -27,215 +27,26 @@
#include <float.h>
-/*******************************************************************************
- * Map helper data structure
- ******************************************************************************/
-struct map {
- struct str filename;
- int options_mask;
- float image_bias; /* Scalar to add to the image pixels */
- float image_scale; /* Scalar to multiply to the image pixels */
- float texcoord_bias[3];
- float texcoord_scale[3];
- float texcoord_turbulence[3];
- size_t resolution; /* image size = resolution x resolution */
- enum aw_map_channel scalar; /* Channel used to create a scalar texture */
- float bump_multiplier; /* Only available on bump maps */
-};
-
enum map_type {
MAP_COMMON = BIT(0),
MAP_SCALAR = BIT(1),
MAP_BUMP = MAP_SCALAR | BIT(2)
};
-static FINLINE void
-map_init(struct mem_allocator* allocator, struct map* map)
-{
- (void)allocator;
- ASSERT(map);
- str_init(allocator, &map->filename);
- map->options_mask = 0;
- map->image_bias = 0.f;
- map->image_scale = 1.f;
- f3_splat(map->texcoord_bias, 0.f);
- f3_splat(map->texcoord_scale, 1.f);
- f3_splat(map->texcoord_turbulence, 0.f);
- map->resolution = 0;
- map->scalar = AW_MAP_CHANNEL_LUMINANCE;
- map->bump_multiplier = 1.0f;
-}
-
-static FINLINE void
-map_release(struct map* map)
-{
- ASSERT(map);
- str_release(&map->filename);
-}
-
-static FINLINE void
-map_copy_pod__(struct map* dst, const struct map* src)
-{
- ASSERT(dst && src);
- dst->options_mask = src->options_mask;
- dst->image_bias = src->image_bias;
- dst->image_scale = src->image_scale;
- f3_set(dst->texcoord_bias, src->texcoord_bias);
- f3_set(dst->texcoord_scale, src->texcoord_scale);
- f3_set(dst->texcoord_turbulence, src->texcoord_turbulence);
- dst->resolution = src->resolution;
- dst->scalar = src->scalar;
- dst->bump_multiplier = src->bump_multiplier;
-}
-
-static FINLINE res_T
-map_copy(struct map* dst, const struct map* src)
-{
- ASSERT(dst && src);
- if(dst == src) return RES_OK;
- map_copy_pod__(dst, src);
- return str_copy(&dst->filename, &src->filename);
-}
-
-static FINLINE res_T
-map_copy_and_release(struct map* dst, struct map* src)
-{
- ASSERT(dst && src);
- if(dst == src) return RES_OK;
- map_copy_pod__(dst, src);
- return str_copy_and_release(&dst->filename, &src->filename);
-}
-
-static FINLINE res_T
-map_to_aw_map
- (struct mem_allocator* allocator, struct aw_map* dst, const struct map* src)
-{
- ASSERT(allocator && dst && src);
- if(!str_len(&src->filename)) {
- dst->filename = NULL;
- } else {
- dst->filename = MEM_ALLOC(allocator, str_len(&src->filename) + 1);
- if(!dst->filename) return RES_MEM_ERR;
- strcpy(dst->filename, str_cget(&src->filename));
- }
- dst->options_mask = src->options_mask;
- dst->image_bias = src->image_bias;
- dst->image_scale = src->image_scale;
- f3_set(dst->texcoord_bias, src->texcoord_bias);
- f3_set(dst->texcoord_scale, src->texcoord_scale);
- f3_set(dst->texcoord_turbulence, src->texcoord_turbulence);
- dst->resolution = src->resolution;
- dst->scalar = src->scalar;
- dst->bump_multiplier = src->bump_multiplier;
- return RES_OK;
-}
-
-/*******************************************************************************
- * Material helper functions
- ******************************************************************************/
-struct material {
- struct str name;
- struct aw_color ambient;
- struct aw_color diffuse;
- struct aw_color specular;
- struct aw_color transmission;
- float specular_exponent;
- float refraction_index;
- size_t illumination_model; /* In [0, 10] */
- struct map ambient_map;
- struct map diffuse_map;
- struct map specular_map;
- struct map specular_exponent_map; /* Scalar texture */
- struct map bump_map; /* Scalar texture with valid bump multiplier */
-};
-
-static FINLINE void
-material_init(struct mem_allocator* allocator, struct material* mtl)
-{
- ASSERT(mtl);
- memset(mtl, 0, sizeof(struct material));
- str_init(allocator, &mtl->name);
- map_init(allocator, &mtl->ambient_map);
- map_init(allocator, &mtl->diffuse_map);
- map_init(allocator, &mtl->specular_map);
- map_init(allocator, &mtl->specular_exponent_map);
- map_init(allocator, &mtl->bump_map);
-}
-
-static FINLINE void
-material_release(struct material* mtl)
-{
- ASSERT(mtl);
- str_release(&mtl->name);
- map_release(&mtl->ambient_map);
- map_release(&mtl->diffuse_map);
- map_release(&mtl->specular_map);
- map_release(&mtl->specular_exponent_map);
- map_release(&mtl->bump_map);
-}
-
-static FINLINE void
-material_copy_pod__(struct material* dst, const struct material* src)
-{
- ASSERT(dst && src);
- dst->ambient = src->ambient;
- dst->diffuse = src->diffuse;
- dst->specular = src->specular;
- dst->transmission = src->transmission;
- dst->specular_exponent = src->specular_exponent;
- dst->refraction_index = src->refraction_index;
- dst->illumination_model = src->illumination_model;
-}
-
-static FINLINE res_T
-material_copy(struct material* dst, const struct material* src)
-{
- res_T res;
- if(dst == src) return RES_OK;
- material_copy_pod__(dst, src);
- #define CALL(Func) if(RES_OK != (res = Func)) return res
- CALL(str_copy(&dst->name, &src->name));
- CALL(map_copy(&dst->ambient_map, &src->ambient_map));
- CALL(map_copy(&dst->diffuse_map, &src->diffuse_map));
- CALL(map_copy(&dst->specular_map, &src->specular_map));
- CALL(map_copy(&dst->specular_exponent_map, &src->specular_exponent_map));
- CALL(map_copy(&dst->bump_map, &src->bump_map));
- #undef CALL
- return RES_OK;
-}
-
-static FINLINE res_T
-material_copy_and_release(struct material* dst, struct material* src)
-{
- res_T res;
- if(dst == src) return RES_OK;
- material_copy_pod__(dst, src);
- #define CALL(Func) if(RES_OK != (res = Func)) return res
- CALL(str_copy_and_release(&dst->name, &src->name));
- CALL(map_copy_and_release(&dst->ambient_map, &src->ambient_map));
- CALL(map_copy_and_release(&dst->diffuse_map, &src->diffuse_map));
- CALL(map_copy_and_release(&dst->specular_map, &src->specular_map));
- CALL(map_copy_and_release
- (&dst->specular_exponent_map, &src->specular_exponent_map));
- CALL(map_copy_and_release(&dst->bump_map, &src->bump_map));
- #undef CALL
- return RES_OK;
-}
-
/*******************************************************************************
* Definition of the aw_mtl opaque data structure
******************************************************************************/
/* Generate the darray_mtl data structure */
#define DARRAY_NAME material
-#define DARRAY_DATA struct material
-#define DARRAY_FUNCTOR_INIT material_init
-#define DARRAY_FUNCTOR_RELEASE material_release
-#define DARRAY_FUNCTOR_COPY material_copy
+#define DARRAY_DATA struct aw_material
+#define DARRAY_FUNCTOR_INIT aw_material_init
+#define DARRAY_FUNCTOR_RELEASE aw_material_release
+#define DARRAY_FUNCTOR_COPY aw_material_copy
#include <rsys/dynamic_array.h>
struct aw_mtl {
struct darray_material materials;
- struct material* newmtl; /* Pointer toward the current material */
+ struct aw_material* newmtl; /* Pointer toward the current material */
const char* filename; /* Currently parsed file. Use in error messages */
size_t iline; /* Currently parsed line index. Use in error messages */
@@ -400,7 +211,7 @@ parse_imfchan_option(enum aw_map_channel* channel, char** tk_ctxt)
static res_T
parse_map
- (struct map* map,
+ (struct aw_map* map,
const enum map_type type,
char** tk_ctxt)
{
@@ -527,6 +338,34 @@ mtl_clear(struct aw_mtl* mtl)
mtl->newmtl = NULL;
}
+static FINLINE void
+map_copy_pod__(struct aw_map* dst, const struct aw_map* src)
+{
+ ASSERT(dst && src);
+ dst->options_mask = src->options_mask;
+ dst->image_bias = src->image_bias;
+ dst->image_scale = src->image_scale;
+ f3_set(dst->texcoord_bias, src->texcoord_bias);
+ f3_set(dst->texcoord_scale, src->texcoord_scale);
+ f3_set(dst->texcoord_turbulence, src->texcoord_turbulence);
+ dst->resolution = src->resolution;
+ dst->scalar = src->scalar;
+ dst->bump_multiplier = src->bump_multiplier;
+}
+
+static FINLINE void
+material_copy_pod__(struct aw_material* dst, const struct aw_material* src)
+{
+ ASSERT(dst && src);
+ dst->ambient = src->ambient;
+ dst->diffuse = src->diffuse;
+ dst->specular = src->specular;
+ dst->transmission = src->transmission;
+ dst->specular_exponent = src->specular_exponent;
+ dst->refraction_index = src->refraction_index;
+ dst->illumination_model = src->illumination_model;
+}
+
static void
mtl_release(ref_T* ref)
{
@@ -692,75 +531,117 @@ aw_mtl_material_get
const size_t imaterial,
struct aw_material* material)
{
- const struct material* mtr;
- res_T res = RES_OK;
-
+ const struct aw_material* mtr;
if(!mtl || !material || imaterial>=darray_material_size_get(&mtl->materials))
return RES_BAD_ARG;
-
mtr = darray_material_cdata_get(&mtl->materials) + imaterial;
- material->name = MEM_ALLOC(material->allocator__, str_len(&mtr->name) + 1);
- if(!material->name) {
- res = RES_MEM_ERR;
- goto error;
- }
- strcpy(material->name, str_cget(&mtr->name));
- material->ambient = mtr->ambient;
- material->diffuse = mtr->diffuse;
- material->specular = mtr->specular;
- material->transmission = mtr->transmission;
- material->specular_exponent = mtr->specular_exponent;
- material->refraction_index = mtr->refraction_index;
- material->illumination_model = mtr->illumination_model;
-
- #define CALL(Func) if(RES_OK != (res = Func)) goto error
- CALL(map_to_aw_map
- (material->allocator__, &material->ambient_map, &mtr->ambient_map));
- CALL(map_to_aw_map
- (material->allocator__, &material->diffuse_map, &mtr->diffuse_map));
- CALL(map_to_aw_map
- (material->allocator__, &material->specular_map, &mtr->specular_map));
- CALL(map_to_aw_map
- (material->allocator__,
- &material->specular_exponent_map,
- &mtr->specular_exponent_map));
- CALL(map_to_aw_map
- (material->allocator__, &material->bump_map, &mtr->bump_map));
- #undef CALL
+ return aw_material_copy(material, mtr);
+}
-exit:
- return res;
-error:
- if(material)
- AW(material_release(material));
- goto exit;
+res_T
+aw_map_init(struct mem_allocator* allocator, struct aw_map* map)
+{
+ if(!map) return RES_BAD_ARG;
+ str_init(allocator, &map->filename);
+ map->options_mask = 0;
+ map->image_bias = 0.f;
+ map->image_scale = 1.f;
+ f3_splat(map->texcoord_bias, 0.f);
+ f3_splat(map->texcoord_scale, 1.f);
+ f3_splat(map->texcoord_turbulence, 0.f);
+ map->resolution = 0;
+ map->scalar = AW_MAP_CHANNEL_LUMINANCE;
+ map->bump_multiplier = 1.0f;
+ return RES_OK;
+}
+
+res_T
+aw_map_release(struct aw_map* map)
+{
+ if(!map) return RES_BAD_ARG;
+ str_release(&map->filename);
+ return RES_OK;
+}
+
+res_T
+aw_map_copy(struct aw_map* dst, const struct aw_map* src)
+{
+ if(!dst || !src) return RES_BAD_ARG;
+ if(dst == src) return RES_OK;
+ map_copy_pod__(dst, src);
+ return str_copy(&dst->filename, &src->filename);
+}
+
+res_T
+aw_map_copy_and_release(struct aw_map* dst, struct aw_map* src)
+{
+ if(!dst || !src) return RES_BAD_ARG;
+ if(dst == src) return RES_OK;
+ map_copy_pod__(dst, src);
+ return str_copy_and_release(&dst->filename, &src->filename);
}
res_T
-aw_material_init(struct mem_allocator* allocator, struct aw_material* m)
+aw_material_init(struct mem_allocator* allocator, struct aw_material* mtl)
{
- if(!m) return RES_BAD_ARG;
- memset(m, 0, sizeof(struct aw_material));
- m->allocator__ = allocator ? allocator : &mem_default_allocator;
+ if(!mtl) return RES_BAD_ARG;
+ memset(mtl, 0, sizeof(struct aw_material));
+ str_init(allocator, &mtl->name);
+ AW(map_init(allocator, &mtl->ambient_map));
+ AW(map_init(allocator, &mtl->diffuse_map));
+ AW(map_init(allocator, &mtl->specular_map));
+ AW(map_init(allocator, &mtl->specular_exponent_map));
+ AW(map_init(allocator, &mtl->bump_map));
+ return RES_OK;
+}
+
+res_T
+aw_material_release(struct aw_material* mtl)
+{
+ if(!mtl) return RES_BAD_ARG;
+ str_release(&mtl->name);
+ AW(map_release(&mtl->ambient_map));
+ AW(map_release(&mtl->diffuse_map));
+ AW(map_release(&mtl->specular_map));
+ AW(map_release(&mtl->specular_exponent_map));
+ AW(map_release(&mtl->bump_map));
return RES_OK;
}
res_T
-aw_material_release(struct aw_material* m)
+aw_material_copy(struct aw_material* dst, const struct aw_material* src)
{
- if(!m) return RES_BAD_ARG;
- if(m->name)
- MEM_FREE(m->allocator__, m->name);
- if(m->ambient_map.filename)
- MEM_FREE(m->allocator__, m->ambient_map.filename);
- if(m->diffuse_map.filename)
- MEM_FREE(m->allocator__, m->diffuse_map.filename);
- if(m->specular_map.filename)
- MEM_FREE(m->allocator__, m->specular_map.filename);
- if(m->specular_exponent_map.filename)
- MEM_FREE(m->allocator__, m->specular_exponent_map.filename);
- if(m->bump_map.filename)
- MEM_FREE(m->allocator__, m->bump_map.filename);
+ res_T res;
+ if(!dst || !src) return RES_BAD_ARG;
+ if(dst == src) return RES_OK;
+ material_copy_pod__(dst, src);
+ #define CALL(Func) if(RES_OK != (res = Func)) return res
+ CALL(str_copy(&dst->name, &src->name));
+ CALL(aw_map_copy(&dst->ambient_map, &src->ambient_map));
+ CALL(aw_map_copy(&dst->diffuse_map, &src->diffuse_map));
+ CALL(aw_map_copy(&dst->specular_map, &src->specular_map));
+ CALL(aw_map_copy(&dst->specular_exponent_map, &src->specular_exponent_map));
+ CALL(aw_map_copy(&dst->bump_map, &src->bump_map));
+ #undef CALL
+ return RES_OK;
+}
+
+res_T
+aw_material_copy_and_release(struct aw_material* dst, struct aw_material* src)
+{
+ res_T res;
+ if(!dst || !src) return RES_BAD_ARG;
+ if(dst == src) return RES_OK;
+ material_copy_pod__(dst, src);
+ #define CALL(Func) if(RES_OK != (res = Func)) return res
+ CALL(str_copy_and_release(&dst->name, &src->name));
+ CALL(aw_map_copy_and_release(&dst->ambient_map, &src->ambient_map));
+ CALL(aw_map_copy_and_release(&dst->diffuse_map, &src->diffuse_map));
+ CALL(aw_map_copy_and_release(&dst->specular_map, &src->specular_map));
+ CALL(aw_map_copy_and_release
+ (&dst->specular_exponent_map, &src->specular_exponent_map));
+ CALL(aw_map_copy_and_release(&dst->bump_map, &src->bump_map));
+ #undef CALL
return RES_OK;
}
diff --git a/src/test_aw_mtl.c b/src/test_aw_mtl.c
@@ -91,7 +91,7 @@ test_common(struct aw_mtl* mtl)
CHECK(aw_mtl_material_get(NULL, 0, &mtr), RES_BAD_ARG);
CHECK(aw_mtl_material_get(mtl, 0, &mtr), RES_OK);
- CHECK(strcmp(mtr.name, "my_mtl"), 0);
+ CHECK(strcmp(str_cget(&mtr.name), "my_mtl"), 0);
CHECK(mtr.ambient.color_space, AW_COLOR_RGB);
f3(tmp, 0.0435f, 0.0436f, 0.0437f);
CHECK(f3_eq(mtr.ambient.value, tmp), 1);
@@ -112,7 +112,7 @@ test_common(struct aw_mtl* mtl)
CHECK(mtr.refraction_index, (float)1.19713f);
CHECK(mtr.illumination_model, 6);
- CHECK(strcmp(mtr.ambient_map.filename, "chrome.mpc"), 0);
+ CHECK(strcmp(str_cget(&mtr.ambient_map.filename), "chrome.mpc"), 0);
CHECK(mtr.ambient_map.options_mask, 0);
CHECK(mtr.ambient_map.image_bias, 0.f);
CHECK(mtr.ambient_map.image_scale, 1.f);
@@ -120,7 +120,7 @@ test_common(struct aw_mtl* mtl)
CHECK(f3_eq(mtr.ambient_map.texcoord_scale, f3_splat(tmp, 1.f)), 1);
CHECK(f3_eq(mtr.ambient_map.texcoord_turbulence, f3_splat(tmp, 0.f)), 1);
- CHECK(strcmp(mtr.diffuse_map.filename, "chrome.mpc"), 0);
+ CHECK(strcmp(str_cget(&mtr.diffuse_map.filename), "chrome.mpc"), 0);
CHECK(mtr.diffuse_map.options_mask, 0);
CHECK(mtr.diffuse_map.image_bias, 0.f);
CHECK(mtr.diffuse_map.image_scale, 1.f);
@@ -128,7 +128,7 @@ test_common(struct aw_mtl* mtl)
CHECK(f3_eq(mtr.diffuse_map.texcoord_scale, f3_splat(tmp, 1.f)), 1);
CHECK(f3_eq(mtr.diffuse_map.texcoord_turbulence, f3_splat(tmp, 0.f)), 1);
- CHECK(strcmp(mtr.specular_map.filename, "chrome.mpc"), 0);
+ CHECK(strcmp(str_cget(&mtr.specular_map.filename), "chrome.mpc"), 0);
CHECK(mtr.specular_map.options_mask, 0);
CHECK(mtr.specular_map.image_bias, 0.f);
CHECK(mtr.specular_map.image_scale, 1.f);
@@ -136,7 +136,7 @@ test_common(struct aw_mtl* mtl)
CHECK(f3_eq(mtr.specular_map.texcoord_scale, f3_splat(tmp, 1.f)), 1);
CHECK(f3_eq(mtr.specular_map.texcoord_turbulence, f3_splat(tmp, 0.f)), 1);
- CHECK(strcmp(mtr.specular_exponent_map.filename, "wisp.mps"), 0);
+ CHECK(strcmp(str_cget(&mtr.specular_exponent_map.filename), "wisp.mps"), 0);
CHECK(mtr.specular_exponent_map.options_mask, 0);
CHECK(mtr.specular_exponent_map.image_bias, 0.f);
CHECK(mtr.specular_exponent_map.image_scale, 1.f);
@@ -145,7 +145,7 @@ test_common(struct aw_mtl* mtl)
CHECK(f3_eq(mtr.specular_exponent_map.texcoord_turbulence, tmp), 1);
CHECK(mtr.specular_exponent_map.scalar, AW_MAP_CHANNEL_LUMINANCE);
- CHECK(strcmp(mtr.bump_map.filename, "sand.mpb"), 0);
+ CHECK(strcmp(str_cget(&mtr.bump_map.filename), "sand.mpb"), 0);
CHECK(mtr.bump_map.options_mask, 0);
CHECK(mtr.bump_map.image_bias, 0.f);
CHECK(mtr.bump_map.image_scale, 1.f);
@@ -219,7 +219,7 @@ test_multiple_materials(struct aw_mtl* mtl)
CHECK(aw_material_init(NULL, &mtr), RES_OK);
CHECK(aw_mtl_material_get(mtl, 0, &mtr), RES_OK);
- CHECK(strcmp(mtr.name, "material_0"), 0);
+ CHECK(strcmp(str_cget(&mtr.name), "material_0"), 0);
CHECK(mtr.specular_exponent, 8.f);
CHECK(mtr.refraction_index, 1.5f);
CHECK(mtr.transmission.color_space, AW_COLOR_RGB);
@@ -232,7 +232,7 @@ test_multiple_materials(struct aw_mtl* mtl)
CHECK(mtr.specular.color_space, AW_COLOR_RGB);
CHECK(f3_eq(mtr.specular.value, f3_splat(tmp, 0.f)), 1);
CHECK(strcmp
- (mtr.ambient_map.filename,
+ (str_cget(&mtr.ambient_map.filename),
"my_long_and_verbose_filename_of_a_RED_GREEN_BLUE_1024x64_image.png"), 0);
CHECK(mtr.ambient_map.options_mask, 0);
CHECK(mtr.ambient_map.image_bias, 0.f);
@@ -241,14 +241,13 @@ test_multiple_materials(struct aw_mtl* mtl)
CHECK(f3_eq(mtr.ambient_map.texcoord_scale, f3_splat(tmp, 1.f)), 1);
CHECK(f3_eq(mtr.ambient_map.texcoord_turbulence, f3_splat(tmp, 0.f)), 1);
CHECK(mtr.ambient_map.resolution, 0);
- CHECK(strcmp(mtr.diffuse_map.filename, "tp.png"), 0);
- CHECK(mtr.specular_map.filename, NULL);
- CHECK(mtr.specular_exponent_map.filename, NULL);
- CHECK(mtr.bump_map.filename, NULL);
- CHECK(aw_material_release(&mtr), RES_OK);
+ CHECK(strcmp(str_cget(&mtr.diffuse_map.filename), "tp.png"), 0);
+ CHECK(str_len(&mtr.specular_map.filename), 0);
+ CHECK(str_len(&mtr.specular_exponent_map.filename), 0);
+ CHECK(str_len(&mtr.bump_map.filename), 0);
CHECK(aw_mtl_material_get(mtl, 1, &mtr), RES_OK);
- CHECK(strcmp(mtr.name, "textured_material"), 0);
+ CHECK(strcmp(str_cget(&mtr.name), "textured_material"), 0);
CHECK(mtr.specular_exponent, 6.f);
CHECK(mtr.refraction_index, (float)1.7f);
CHECK(mtr.transmission.color_space, AW_COLOR_RGB);
@@ -260,16 +259,15 @@ test_multiple_materials(struct aw_mtl* mtl)
CHECK(f3_eq(mtr.diffuse.value, f3(tmp, 0.734118f, 0.709412f, 0.674118f)), 1);
CHECK(mtr.specular.color_space, AW_COLOR_RGB);
CHECK(f3_eq(mtr.specular.value, f3_splat(tmp, 0.f)), 1);
- CHECK(strcmp(mtr.ambient_map.filename, "tex6x6.png"), 0);
- CHECK(strcmp(mtr.diffuse_map.filename, "tex6x6.png"), 0);
- CHECK(strcmp(mtr.bump_map.filename, "tex6x6-bump.png"), 0);
+ CHECK(strcmp(str_cget(&mtr.ambient_map.filename), "tex6x6.png"), 0);
+ CHECK(strcmp(str_cget(&mtr.diffuse_map.filename), "tex6x6.png"), 0);
+ CHECK(strcmp(str_cget(&mtr.bump_map.filename), "tex6x6-bump.png"), 0);
CHECK(mtr.bump_map.scalar, AW_MAP_CHANNEL_RED);
CHECK(mtr.bump_map.bump_multiplier, (float)0.2f);
- CHECK(mtr.specular_exponent_map.filename, NULL);
- CHECK(aw_material_release(&mtr), RES_OK);
+ CHECK(str_len(&mtr.specular_exponent_map.filename), 0);
CHECK(aw_mtl_material_get(mtl, 2, &mtr), RES_OK);
- CHECK(strcmp(mtr.name, "hello_world"), 0);
+ CHECK(strcmp(str_cget(&mtr.name), "hello_world"), 0);
CHECK(mtr.specular_exponent, 8.f);
CHECK(mtr.refraction_index, 1.5f);
CHECK(mtr.transmission.color_space, AW_COLOR_RGB);
@@ -281,12 +279,12 @@ test_multiple_materials(struct aw_mtl* mtl)
CHECK(f3_eq(mtr.diffuse.value, f3(tmp, 0.546274f, 0.219608f, 0.183922f)), 1);
CHECK(mtr.specular.color_space, AW_COLOR_RGB);
CHECK(f3_eq(mtr.specular.value, f3_splat(tmp, 2.f)), 1);
- CHECK(mtr.ambient_map.filename, NULL);
- CHECK(mtr.diffuse_map.filename, NULL);
- CHECK(mtr.bump_map.filename, NULL);
- CHECK(mtr.specular_exponent_map.filename, NULL);
- CHECK(aw_material_release(&mtr), RES_OK);
+ CHECK(str_len(&mtr.ambient_map.filename), 0);
+ CHECK(str_len(&mtr.diffuse_map.filename), 0);
+ CHECK(str_len(&mtr.bump_map.filename), 0);
+ CHECK(str_len(&mtr.specular_exponent_map.filename), 0);
+ CHECK(aw_material_release(&mtr), RES_OK);
fclose(file);
}