diff options
author | omnisci3nce <omniscient.oce@gmail.com> | 2024-07-13 16:34:48 +1000 |
---|---|---|
committer | omnisci3nce <omniscient.oce@gmail.com> | 2024-07-13 16:34:48 +1000 |
commit | 8d6b838d0a5919620ca8562ac6be1da5c0c3237e (patch) | |
tree | 0cffbe159b23464e64cde1165e9e58031d0623b8 /src/resources/obj.c | |
parent | f74cf52946f4e569a26bc81105537b40be95c2c7 (diff) |
add empty shell scripts
Diffstat (limited to 'src/resources/obj.c')
-rw-r--r-- | src/resources/obj.c | 366 |
1 files changed, 183 insertions, 183 deletions
diff --git a/src/resources/obj.c b/src/resources/obj.c index bf2f353..87d3ed6 100644 --- a/src/resources/obj.c +++ b/src/resources/obj.c @@ -36,14 +36,14 @@ KITC_DECL_TYPED_ARRAY(Vec2) KITC_DECL_TYPED_ARRAY(face) // Forward declarations -void create_submesh(mesh_darray *meshes, Vec3_darray *tmp_positions, Vec3_darray *tmp_normals, - Vec2_darray *tmp_uvs, face_darray *tmp_faces, material_darray *materials, - bool material_loaded, char current_material_name[256]); -bool load_material_lib(const char *path, str8 relative_path, material_darray *materials); -bool model_load_obj_str(const char *file_string, str8 relative_path, Model *out_model, - bool invert_textures_y); - -model_handle model_load_obj(Core *core, const char *path, bool invert_textures_y) { +// void create_submesh(mesh_darray *meshes, Vec3_darray *tmp_positions, Vec3_darray *tmp_normals, +// Vec2_darray *tmp_uvs, face_darray *tmp_faces, material_darray *materials, +// bool material_loaded, char current_material_name[256]); +// bool load_material_lib(const char *path, str8 relative_path, material_darray *materials); +// bool model_load_obj_str(const char *file_string, str8 relative_path, Model *out_model, +// bool invert_textures_y); + +ModelHandle model_load_obj(Core *core, const char *path, bool invert_textures_y) { size_t arena_size = 1024; arena scratch = arena_create(malloc(arena_size), arena_size); @@ -54,24 +54,24 @@ model_handle model_load_obj(Core *core, const char *path, bool invert_textures_y } const char *file_string = string_from_file(path); - model_handle handle; - model *model = model_pool_alloc(&g_core.models, &handle); - model->name = str8_cstr_view(path); - model->meshes = mesh_darray_new(1); + ModelHandle handle; + // model *model = model_pool_alloc(&g_core.models, &handle); + // model->name = str8_cstr_view(path); + // model->meshes = mesh_darray_new(1); - bool success = model_load_obj_str(file_string, relative_path.path, &model, invert_textures_y); + // bool success = model_load_obj_str(file_string, relative_path.path, &model, invert_textures_y); - if (!success) { - FATAL("Couldnt load OBJ file at path %s", path); - ERROR_EXIT("Load fails are considered crash-worthy right now. This will change later.\n"); - } + // if (!success) { + // FATAL("Couldnt load OBJ file at path %s", path); + // ERROR_EXIT("Load fails are considered crash-worthy right now. This will change later.\n"); + // } - arena_free_all(&scratch); - arena_free_storage(&scratch); + // arena_free_all(&scratch); + // arena_free_storage(&scratch); return handle; } -bool model_load_obj_str(const char *file_string, str8 relative_path, model *out_model, +bool model_load_obj_str(const char *file_string, Str8 relative_path, Model *out_model, bool invert_textures_y) { TRACE("Load OBJ from string"); @@ -232,166 +232,166 @@ bool model_load_obj_str(const char *file_string, str8 relative_path, model *out_ return true; } -/** - * @brief Takes the current positions, normals, uvs arrays and constructs the vertex array - * from those indices. - */ -void create_submesh(mesh_darray *meshes, vec3_darray *tmp_positions, vec3_darray *tmp_normals, - vec2_darray *tmp_uvs, face_darray *tmp_faces, material_darray *materials, - bool material_loaded, char current_material_name[256]) { - // size_t num_verts = face_darray_len(tmp_faces) * 3; - // vertex_darray *out_vertices = vertex_darray_new(num_verts); - - // face_darray_iter face_iter = face_darray_iter_new(tmp_faces); - // struct face *f; - - // while ((f = face_darray_iter_next(&face_iter))) { - // for (int j = 0; j < 3; j++) { - // vertex vert = { 0 }; - // vert.position = tmp_positions->data[f->vertex_indices[j] - 1]; - // if (vec3_darray_len(tmp_normals) == 0) { - // vert.normal = vec3_create(0.0, 0.0, 0.0); - // } else { - // vert.normal = tmp_normals->data[f->normal_indices[j] - 1]; - // } - // vert.uv = tmp_uvs->data[f->uv_indices[j] - 1]; - // vertex_darray_push(out_vertices, vert); - // } - // } - - // DEBUG("Loaded submesh\n vertices: %zu\n uvs: %zu\n normals: %zu\n faces: %zu", - // vec3_darray_len(tmp_positions), vec2_darray_len(tmp_uvs), vec3_darray_len(tmp_normals), - // face_darray_len(tmp_faces)); - - // // Clear current object faces - // face_darray_clear(tmp_faces); - - // mesh m = { .vertices = out_vertices }; - // if (material_loaded) { - // // linear scan to find material - // bool found = false; - // DEBUG("Num of materials : %ld", material_darray_len(materials)); - // material_darray_iter mat_iter = material_darray_iter_new(materials); - // blinn_phong_material *cur_material; - // while ((cur_material = material_darray_iter_next(&mat_iter))) { - // if (strcmp(cur_material->name, current_material_name) == 0) { - // DEBUG("Found match"); - // m.material_index = mat_iter.current_idx - 1; - // found = true; - // break; - // } - // } - - // if (!found) { - // // TODO: default material - // m.material_index = 0; - // DEBUG("Set default material"); - // } - // } - // mesh_darray_push(meshes, m); -} - -bool load_material_lib(const char *path, str8 relative_path, material_darray *materials) { - TRACE("BEGIN load material lib at %s", path); - - // const char *file_string = string_from_file(path); - // if (file_string == NULL) { - // ERROR("couldnt load %s", path); - // return false; - // } - - // char *pch; - // char *saveptr; - // pch = strtok_r((char *)file_string, "\n", &saveptr); - - // material current_material = DEFAULT_MATERIAL; - - // bool material_set = false; - - // while (pch != NULL) { - // char line_header[128]; - // int offset = 0; - // // read the first word of the line - // int res = sscanf(pch, "%s %n", line_header, &offset); - // if (res != 1) { - // break; - // } - - // // When we see "newmtl", start a new material, or flush the previous one - // if (strcmp(line_header, "newmtl") == 0) { - // if (material_set) { - // // a material was being parsed, so flush that one and start a new one - // material_darray_push(materials, current_material); - // DEBUG("pushed material with name %s", current_material.name); - // WARN("Reset current material"); - // current_material = DEFAULT_MATERIAL; - // } else { - // material_set = true; - // } - // // scan the new material name - // char material_name[64]; - // sscanf(pch + offset, "%s", current_material.name); - // DEBUG("material name %s\n", current_material.name); - // // current_material.name = material_name; - // } else if (strcmp(line_header, "Ka") == 0) { - // // ambient - // sscanf(pch + offset, "%f %f %f", ¤t_material.ambient_colour.x, - // ¤t_material.ambient_colour.y, ¤t_material.ambient_colour.z); - // } else if (strcmp(line_header, "Kd") == 0) { - // // diffuse - // sscanf(pch + offset, "%f %f %f", ¤t_material.diffuse.x, ¤t_material.diffuse.y, - // ¤t_material.diffuse.z); - // } else if (strcmp(line_header, "Ks") == 0) { - // // specular - // sscanf(pch + offset, "%f %f %f", ¤t_material.specular.x, - // ¤t_material.specular.y, - // ¤t_material.specular.z); - // } else if (strcmp(line_header, "Ns") == 0) { - // // specular exponent - // sscanf(pch + offset, "%f", ¤t_material.spec_exponent); - // } else if (strcmp(line_header, "map_Kd") == 0) { - // char diffuse_map_filename[1024]; - // sscanf(pch + offset, "%s", diffuse_map_filename); - // char diffuse_map_path[1024]; - // snprintf(diffuse_map_path, sizeof(diffuse_map_path), "%s/%s", relative_path.buf, - // diffuse_map_filename); - // printf("load from %s\n", diffuse_map_path); - - // // -------------- - // texture diffuse_texture = texture_data_load(diffuse_map_path, true); - // current_material.diffuse_texture = diffuse_texture; - // strcpy(current_material.diffuse_tex_path, diffuse_map_path); - // texture_data_upload(¤t_material.diffuse_texture); - // // -------------- - // } else if (strcmp(line_header, "map_Ks") == 0) { - // // char specular_map_path[1024] = "assets/"; - // // sscanf(pch + offset, "%s", specular_map_path + 7); - // char specular_map_filename[1024]; - // sscanf(pch + offset, "%s", specular_map_filename); - // char specular_map_path[1024]; - // snprintf(specular_map_path, sizeof(specular_map_path), "%s/%s", relative_path.buf, - // specular_map_filename); - // printf("load from %s\n", specular_map_path); - // // -------------- - // texture specular_texture = texture_data_load(specular_map_path, true); - // current_material.specular_texture = specular_texture; - // strcpy(current_material.specular_tex_path, specular_map_path); - // texture_data_upload(¤t_material.specular_texture); - // // -------------- - // } else if (strcmp(line_header, "map_Bump") == 0) { - // // TODO - // } - - // pch = strtok_r(NULL, "\n", &saveptr); - // } - - // TRACE("end load material lib"); - - // // last mesh or if one wasnt created with 'o' directive - // // TRACE("Last leftover material"); - // material_darray_push(materials, current_material); - - // INFO("Loaded %ld materials", material_darray_len(materials)); - TRACE("END load material lib"); - return true; -} +// /** +// * @brief Takes the current positions, normals, uvs arrays and constructs the vertex array +// * from those indices. +// */ +// void create_submesh(mesh_darray *meshes, vec3_darray *tmp_positions, vec3_darray *tmp_normals, +// vec2_darray *tmp_uvs, face_darray *tmp_faces, material_darray *materials, +// bool material_loaded, char current_material_name[256]) { +// // size_t num_verts = face_darray_len(tmp_faces) * 3; +// // vertex_darray *out_vertices = vertex_darray_new(num_verts); + +// // face_darray_iter face_iter = face_darray_iter_new(tmp_faces); +// // struct face *f; + +// // while ((f = face_darray_iter_next(&face_iter))) { +// // for (int j = 0; j < 3; j++) { +// // vertex vert = { 0 }; +// // vert.position = tmp_positions->data[f->vertex_indices[j] - 1]; +// // if (vec3_darray_len(tmp_normals) == 0) { +// // vert.normal = vec3_create(0.0, 0.0, 0.0); +// // } else { +// // vert.normal = tmp_normals->data[f->normal_indices[j] - 1]; +// // } +// // vert.uv = tmp_uvs->data[f->uv_indices[j] - 1]; +// // vertex_darray_push(out_vertices, vert); +// // } +// // } + +// // DEBUG("Loaded submesh\n vertices: %zu\n uvs: %zu\n normals: %zu\n faces: %zu", +// // vec3_darray_len(tmp_positions), vec2_darray_len(tmp_uvs), vec3_darray_len(tmp_normals), +// // face_darray_len(tmp_faces)); + +// // // Clear current object faces +// // face_darray_clear(tmp_faces); + +// // mesh m = { .vertices = out_vertices }; +// // if (material_loaded) { +// // // linear scan to find material +// // bool found = false; +// // DEBUG("Num of materials : %ld", material_darray_len(materials)); +// // material_darray_iter mat_iter = material_darray_iter_new(materials); +// // blinn_phong_material *cur_material; +// // while ((cur_material = material_darray_iter_next(&mat_iter))) { +// // if (strcmp(cur_material->name, current_material_name) == 0) { +// // DEBUG("Found match"); +// // m.material_index = mat_iter.current_idx - 1; +// // found = true; +// // break; +// // } +// // } + +// // if (!found) { +// // // TODO: default material +// // m.material_index = 0; +// // DEBUG("Set default material"); +// // } +// // } +// // mesh_darray_push(meshes, m); +// } + +// bool load_material_lib(const char *path, str8 relative_path, material_darray *materials) { +// TRACE("BEGIN load material lib at %s", path); + +// // const char *file_string = string_from_file(path); +// // if (file_string == NULL) { +// // ERROR("couldnt load %s", path); +// // return false; +// // } + +// // char *pch; +// // char *saveptr; +// // pch = strtok_r((char *)file_string, "\n", &saveptr); + +// // material current_material = DEFAULT_MATERIAL; + +// // bool material_set = false; + +// // while (pch != NULL) { +// // char line_header[128]; +// // int offset = 0; +// // // read the first word of the line +// // int res = sscanf(pch, "%s %n", line_header, &offset); +// // if (res != 1) { +// // break; +// // } + +// // // When we see "newmtl", start a new material, or flush the previous one +// // if (strcmp(line_header, "newmtl") == 0) { +// // if (material_set) { +// // // a material was being parsed, so flush that one and start a new one +// // material_darray_push(materials, current_material); +// // DEBUG("pushed material with name %s", current_material.name); +// // WARN("Reset current material"); +// // current_material = DEFAULT_MATERIAL; +// // } else { +// // material_set = true; +// // } +// // // scan the new material name +// // char material_name[64]; +// // sscanf(pch + offset, "%s", current_material.name); +// // DEBUG("material name %s\n", current_material.name); +// // // current_material.name = material_name; +// // } else if (strcmp(line_header, "Ka") == 0) { +// // // ambient +// // sscanf(pch + offset, "%f %f %f", ¤t_material.ambient_colour.x, +// // ¤t_material.ambient_colour.y, ¤t_material.ambient_colour.z); +// // } else if (strcmp(line_header, "Kd") == 0) { +// // // diffuse +// // sscanf(pch + offset, "%f %f %f", ¤t_material.diffuse.x, ¤t_material.diffuse.y, +// // ¤t_material.diffuse.z); +// // } else if (strcmp(line_header, "Ks") == 0) { +// // // specular +// // sscanf(pch + offset, "%f %f %f", ¤t_material.specular.x, +// // ¤t_material.specular.y, +// // ¤t_material.specular.z); +// // } else if (strcmp(line_header, "Ns") == 0) { +// // // specular exponent +// // sscanf(pch + offset, "%f", ¤t_material.spec_exponent); +// // } else if (strcmp(line_header, "map_Kd") == 0) { +// // char diffuse_map_filename[1024]; +// // sscanf(pch + offset, "%s", diffuse_map_filename); +// // char diffuse_map_path[1024]; +// // snprintf(diffuse_map_path, sizeof(diffuse_map_path), "%s/%s", relative_path.buf, +// // diffuse_map_filename); +// // printf("load from %s\n", diffuse_map_path); + +// // // -------------- +// // texture diffuse_texture = texture_data_load(diffuse_map_path, true); +// // current_material.diffuse_texture = diffuse_texture; +// // strcpy(current_material.diffuse_tex_path, diffuse_map_path); +// // texture_data_upload(¤t_material.diffuse_texture); +// // // -------------- +// // } else if (strcmp(line_header, "map_Ks") == 0) { +// // // char specular_map_path[1024] = "assets/"; +// // // sscanf(pch + offset, "%s", specular_map_path + 7); +// // char specular_map_filename[1024]; +// // sscanf(pch + offset, "%s", specular_map_filename); +// // char specular_map_path[1024]; +// // snprintf(specular_map_path, sizeof(specular_map_path), "%s/%s", relative_path.buf, +// // specular_map_filename); +// // printf("load from %s\n", specular_map_path); +// // // -------------- +// // texture specular_texture = texture_data_load(specular_map_path, true); +// // current_material.specular_texture = specular_texture; +// // strcpy(current_material.specular_tex_path, specular_map_path); +// // texture_data_upload(¤t_material.specular_texture); +// // // -------------- +// // } else if (strcmp(line_header, "map_Bump") == 0) { +// // // TODO +// // } + +// // pch = strtok_r(NULL, "\n", &saveptr); +// // } + +// // TRACE("end load material lib"); + +// // // last mesh or if one wasnt created with 'o' directive +// // // TRACE("Last leftover material"); +// // material_darray_push(materials, current_material); + +// // INFO("Loaded %ld materials", material_darray_len(materials)); +// TRACE("END load material lib"); +// return true; +// } |