135 lines
3.2 KiB
C
135 lines
3.2 KiB
C
#undef UFBXT_TEST_GROUP
|
|
#define UFBXT_TEST_GROUP "api"
|
|
|
|
#if UFBXT_IMPL
|
|
|
|
static void ufbxt_close_memory(void *user, void *data, size_t data_size)
|
|
{
|
|
free(data);
|
|
}
|
|
|
|
static bool ufbxt_open_file_memory_default(void *user, ufbx_stream *stream, const char *path, size_t path_len, const ufbx_open_file_info *info)
|
|
{
|
|
++*(size_t*)user;
|
|
|
|
size_t size;
|
|
void *data = ufbxt_read_file(path, &size);
|
|
if (!data) return false;
|
|
|
|
bool ok = ufbx_open_memory(stream, data, size, NULL, NULL);
|
|
free(data);
|
|
return ok;
|
|
}
|
|
|
|
static bool ufbxt_open_file_memory_temp(void *user, ufbx_stream *stream, const char *path, size_t path_len, const ufbx_open_file_info *info)
|
|
{
|
|
++*(size_t*)user;
|
|
|
|
size_t size;
|
|
void *data = ufbxt_read_file(path, &size);
|
|
if (!data) return false;
|
|
|
|
ufbx_open_memory_opts opts = { 0 };
|
|
opts.allocator.allocator = info->temp_allocator;
|
|
|
|
bool ok = ufbx_open_memory(stream, data, size, &opts, NULL);
|
|
free(data);
|
|
return ok;
|
|
}
|
|
|
|
static bool ufbxt_open_file_memory_ref(void *user, ufbx_stream *stream, const char *path, size_t path_len, const ufbx_open_file_info *info)
|
|
{
|
|
++*(size_t*)user;
|
|
|
|
size_t size;
|
|
void *data = ufbxt_read_file(path, &size);
|
|
if (!data) return false;
|
|
|
|
ufbx_open_memory_opts opts = { 0 };
|
|
opts.no_copy = true;
|
|
opts.close_cb.fn = &ufbxt_close_memory;
|
|
return ufbx_open_memory(stream, data, size, &opts, NULL);
|
|
}
|
|
|
|
#endif
|
|
|
|
#if UFBXT_IMPL
|
|
static void ufbxt_do_open_memory_test(const char *filename, size_t expected_calls_fbx, size_t expected_calls_obj, ufbx_open_file_fn *open_file_fn)
|
|
{
|
|
char path[512];
|
|
ufbxt_file_iterator iter = { filename };
|
|
while (ufbxt_next_file(&iter, path, sizeof(path))) {
|
|
for (size_t i = 0; i < 2; i++) {
|
|
ufbx_load_opts opts = { 0 };
|
|
size_t num_calls = 0;
|
|
|
|
opts.open_file_cb.fn = open_file_fn;
|
|
opts.open_file_cb.user = &num_calls;
|
|
opts.load_external_files = true;
|
|
if (i == 1) {
|
|
opts.read_buffer_size = 1;
|
|
}
|
|
|
|
ufbx_error error;
|
|
ufbx_scene *scene = ufbx_load_file(path, &opts, &error);
|
|
if (!scene) ufbxt_log_error(&error);
|
|
ufbxt_assert(scene);
|
|
|
|
ufbxt_check_scene(scene);
|
|
|
|
if (scene->metadata.file_format == UFBX_FILE_FORMAT_FBX) {
|
|
ufbxt_assert(num_calls == expected_calls_fbx);
|
|
} else if (scene->metadata.file_format == UFBX_FILE_FORMAT_OBJ) {
|
|
ufbxt_assert(num_calls == expected_calls_obj);
|
|
} else {
|
|
ufbxt_assert(false);
|
|
}
|
|
|
|
ufbx_free_scene(scene);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
UFBXT_TEST(open_memory_default)
|
|
#if UFBXT_IMPL
|
|
{
|
|
ufbxt_do_open_memory_test("maya_cache_sine", 5, 0, ufbxt_open_file_memory_default);
|
|
}
|
|
#endif
|
|
|
|
UFBXT_TEST(open_memory_temp)
|
|
#if UFBXT_IMPL
|
|
{
|
|
ufbxt_do_open_memory_test("maya_cache_sine", 5, 0, ufbxt_open_file_memory_temp);
|
|
}
|
|
#endif
|
|
|
|
UFBXT_TEST(open_memory_ref)
|
|
#if UFBXT_IMPL
|
|
{
|
|
ufbxt_do_open_memory_test("maya_cache_sine", 5, 0, ufbxt_open_file_memory_ref);
|
|
}
|
|
#endif
|
|
|
|
UFBXT_TEST(obj_open_memory_default)
|
|
#if UFBXT_IMPL
|
|
{
|
|
ufbxt_do_open_memory_test("blender_279_ball", 1, 2, ufbxt_open_file_memory_default);
|
|
}
|
|
#endif
|
|
|
|
UFBXT_TEST(obj_open_memory_temp)
|
|
#if UFBXT_IMPL
|
|
{
|
|
ufbxt_do_open_memory_test("blender_279_ball", 1, 2, ufbxt_open_file_memory_temp);
|
|
}
|
|
#endif
|
|
|
|
UFBXT_TEST(obj_open_memory_ref)
|
|
#if UFBXT_IMPL
|
|
{
|
|
ufbxt_do_open_memory_test("blender_279_ball", 1, 2, ufbxt_open_file_memory_ref);
|
|
}
|
|
#endif
|