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

Method create_instances

src/world/render_world.cpp:2050–2097  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2048}
2049
2050void RenderWorld::MeshManager::create_instances(const void *components_data
2051 , u32 num
2052 , const UnitId *unit_lookup
2053 , const u32 *unit_index
2054 )
2055{
2056 const MeshRendererDesc *meshes = (MeshRendererDesc *)components_data;
2057
2058 for (u32 i = 0; i < num; ++i) {
2059 UnitId unit = unit_lookup[unit_index[i]];
2060 CE_ASSERT(!hash_map::has(_map, unit), "Unit already has a mesh component");
2061
2062 TransformId ti = _render_world->_scene_graph->instance(unit);
2063 CE_ASSERT(is_valid(ti), "Mesh Component requires a Transform Component");
2064
2065 if (_data.size == _data.capacity)
2066 grow();
2067
2068 const MeshResource *mr = (MeshResource *)_render_world->_resource_manager->get(RESOURCE_TYPE_MESH, meshes[i].mesh_resource);
2069 const MeshGeometry *mg = mr->geometry(meshes[i].geometry_name);
2070 const MaterialResource *mat_res = (MaterialResource *)_render_world->_resource_manager->get(RESOURCE_TYPE_MATERIAL, meshes[i].material_resource);
2071
2072 _render_world->_material_manager->create_material(mat_res);
2073
2074 const u32 last = _data.size;
2075
2076 _data.unit[last] = unit;
2077 _data.resource[last] = mr;
2078 _data.geometry[last] = mg;
2079 _data.mesh[last].vbh = mg->vertex_buffer;
2080 _data.mesh[last].ibh = mg->index_buffer;
2081 _data.material[last] = _render_world->_material_manager->get(mat_res);
2082 _data.world[last] = _render_world->_scene_graph->world_pose(ti);
2083 _data.obb[last] = mg->obb;
2084 _data.sphere[last] = mg->sphere;
2085 _data.skeleton[last] = NULL;
2086 _data.flags[last] = meshes[i].flags | RenderableFlags::DIRTY;
2087 _data.prev_flags[last] = 0;
2088#if CROWN_CAN_RELOAD
2089 _data.material_resource[last] = mat_res;
2090 _data.geometry_name[last] = meshes[i].geometry_name;
2091#endif
2092 _dirty = true;
2093
2094 hash_map::set(_map, unit, alloc_id(last));
2095 ++_data.size;
2096 }
2097}
2098
2099void RenderWorld::MeshManager::destroy(MeshId mesh)
2100{

Callers 4

mesh_createMethod · 0.45
sprite_createMethod · 0.45
lod_group_createMethod · 0.45
light_createMethod · 0.45

Calls 12

setClass · 0.85
normalizeFunction · 0.85
geometryMethod · 0.80
create_materialMethod · 0.80
world_poseMethod · 0.80
mesh_instanceMethod · 0.80
hasFunction · 0.70
removeFunction · 0.70
addFunction · 0.70
instanceMethod · 0.45
getMethod · 0.45
indexMethod · 0.45

Tested by

no test coverage detected