MCPcopy Create free account
hub / github.com/crownengine/crown / write

Function write

src/resource/mesh.cpp:474–529  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

472 }
473
474 s32 write(Mesh &m, CompileOptions &opts)
475 {
476 TempAllocator4096 ta;
477 bool calculate_tangents = true;
478 DynamicString importer_settings(ta);
479 importer_settings.set(opts.source_path(), u32(strrchr(opts.source_path(), '.') - opts.source_path()));
480 importer_settings += ".importer_settings";
481 Buffer settings_buf = opts.read_optional(importer_settings.c_str());
482 JsonObject settings(ta);
483 RETURN_IF_ERROR(sjson::parse(settings, settings_buf));
484
485 if (json_object::has(settings, "tangents")) {
486 DynamicString tangents(ta);
487 RETURN_IF_ERROR(sjson::parse_string(tangents, settings["tangents"]));
488 calculate_tangents = tangents == "calculate";
489 }
490
491 opts.write(RESOURCE_HEADER(RESOURCE_VERSION_MESH));
492 opts.write(hash_map::size(m._geometries));
493
494 auto cur = hash_map::begin(m._geometries);
495 auto end = hash_map::end(m._geometries);
496 for (; cur != end; ++cur) {
497 HASH_MAP_SKIP_HOLE(m._geometries, cur);
498
499 Vector<DynamicString> geo_names(default_allocator());
500 geometry_names(geo_names, m, cur->first);
501 u32 num_geo_names = vector::size(geo_names);
502
503 opts.write(num_geo_names);
504 for (u32 i = 0; i < num_geo_names; ++i)
505 opts.write(geo_names[i].to_string_id()._id);
506
507 Geometry *geo = (Geometry *)&cur->second;
508 if (calculate_tangents)
509 generate_tangent_space(*geo);
510 ENSURE_OR_RETURN(MESH, mesh::generate_vertex_and_index_buffers(*geo, opts) == 0, opts);
511
512 bgfx::VertexLayout layout = mesh::vertex_layout(*geo);
513 u32 stride = mesh::vertex_stride(*geo);
514
515 BgfxWriter writer(opts._binary_writer);
516 bgfx::write(&writer, layout);
517 opts.write(mesh::obb(*geo));
518 opts.write(mesh::sphere(*geo));
519
520 opts.write(array::size(geo->_vertex_buffer) / stride);
521 opts.write(stride);
522 opts.write(array::size(geo->_index_buffer));
523
524 opts.write(geo->_vertex_buffer);
525 opts.write(array::begin(geo->_index_buffer), array::size(geo->_index_buffer) * sizeof(u16));
526 }
527
528 return 0;
529 }
530
531 static s32 parse_internal(Mesh &m, Buffer &buf, CompileOptions &opts)

Callers 11

compileFunction · 0.70
compileFunction · 0.70
mover_moveMethod · 0.50
updateMethod · 0.50
tick_callbackMethod · 0.50
evaluateFunction · 0.50
merged_render_settingsFunction · 0.50
runMethod · 0.50

Calls 15

geometry_namesFunction · 0.85
generate_tangent_spaceFunction · 0.85
vertex_layoutFunction · 0.85
vertex_strideFunction · 0.85
obbFunction · 0.85
sphereFunction · 0.85
source_pathMethod · 0.80
read_optionalMethod · 0.80
parseFunction · 0.70
hasFunction · 0.50
parse_stringFunction · 0.50

Tested by

no test coverage detected