Closed Sharlock93 closed 2 years ago
Reading car.obj
with viewer
https://github.com/syoyo/tinyobjloader-c/tree/master/examples/viewer does not go into infinite loop.
Please post reproducible code and procedure.
Please post reproducible code and procedure.
this is my main and nothing else:
int main() {
tinyobj_attrib_t car_mesh = {0};
tinyobj_shape_t *car_shapes = NULL;
u64 car_shape_count;
tinyobj_material_t *car_materials = NULL;
u64 car_material_count;
tinyobj_parse_obj(&car_mesh, &car_shapes, &car_shape_count, &car_materials, &car_material_count, "../assets/cw1/car.obj", get_file_data, NULL, TINYOBJ_FLAG_TRIANGULATE);
return 0;
}
get_file_data
is the same as in viewer.c, I'm on using Windows and Visual Studio if that makes any different.
Reading
car.obj
withviewer
https://github.com/syoyo/tinyobjloader-c/tree/master/examples/viewer does not go into infinite loop.
the problem happened with the material, although pedantic to ask but could you check and see if the material file has been read? I don't have access to a linux machine to test viewer.c
immediately.
You can use WSL2. And viewer
works well without issue on my WSL2 environment.
Anyway, hashtable code is provided by a contributor, not me. So I don't know how reliable it is. You can contribute more reliable and robust hashtable implementation!
BTW you should use size_t
as requested by the function signature
, not (your own?) u64
.
u64 car_shape_count;
The
hash_table_insert_value
hits an infinite loop if thecapacity
is 10 and thestart_index
is 9, the(i*i)
addition doesn't produce every possible index and in my case unfortunately it so happens that every index it produces were filled, here is a simple log:here are the files to reproduce this: car.zip
changing
i*i
to a simplei
fixes this.No clue if it has been reported before.