Пример #1
0
void Model::create(const bgfx::VertexDecl& def,
				   Material* material,
				   const int* indices_data,
				   int indices_size,
				   const void* attributes_data,
				   int attributes_size)
{
	m_geometry_buffer_object.setAttributesData(
		attributes_data, attributes_size, def);
	m_geometry_buffer_object.setIndicesData(indices_data, indices_size);

	m_meshes.emplace(def,
					 material,
					 0,
					 attributes_size,
					 0,
					 indices_size / sizeof(int),
					 "default",
					 m_allocator);

	Model::LOD lod;
	lod.m_distance = FLT_MAX;
	lod.m_from_mesh = 0;
	lod.m_to_mesh = 0;
	m_lods.push(lod);

	m_indices.resize(indices_size / sizeof(m_indices[0]));
	memcpy(&m_indices[0], indices_data, indices_size);

	m_vertices.resize(attributes_size / def.getStride());
	computeRuntimeData((const uint8_t*)attributes_data);

	onReady();
}
Пример #2
0
void Model::create(const bgfx::VertexDecl& def,
				   Material* material,
				   const int* indices_data,
				   int indices_size,
				   const void* attributes_data,
				   int attributes_size)
{
	ASSERT(!bgfx::isValid(m_vertices_handle));
	m_vertices_handle = bgfx::createVertexBuffer(bgfx::copy(attributes_data, attributes_size), def);
	m_vertices_size = attributes_size;

	ASSERT(!bgfx::isValid(m_indices_handle));
	auto* mem = bgfx::copy(indices_data, indices_size);
	m_indices_handle = bgfx::createIndexBuffer(mem, BGFX_BUFFER_INDEX32);
	m_indices_size = indices_size;

	m_meshes.emplace(def,
					 material,
					 0,
					 attributes_size,
					 0,
					 indices_size / int(sizeof(int)),
					 "default",
					 m_allocator);

	Model::LOD lod;
	lod.m_distance = FLT_MAX;
	lod.m_from_mesh = 0;
	lod.m_to_mesh = 0;
	m_lods.push(lod);

	m_indices.resize(indices_size / sizeof(m_indices[0]));
	copyMemory(&m_indices[0], indices_data, indices_size);

	m_vertices.resize(attributes_size / def.getStride());
	computeRuntimeData((const uint8*)attributes_data);

	onCreated(State::READY);
}
Пример #3
0
bool Model::parseGeometry(FS::IFile& file)
{
	int32_t indices_count = 0;
	file.read(&indices_count, sizeof(indices_count));
	if (indices_count <= 0)
	{
		return false;
	}
	m_indices.resize(indices_count);
	file.read(&m_indices[0], sizeof(m_indices[0]) * indices_count);

	int32_t vertices_size = 0;
	file.read(&vertices_size, sizeof(vertices_size));
	if (vertices_size <= 0)
	{
		return false;
	}

	Array<uint8_t> vertices(m_allocator);
	vertices.resize(vertices_size);
	file.read(&vertices[0], sizeof(vertices[0]) * vertices.size());

	m_geometry_buffer_object.setAttributesData(
		&vertices[0], vertices.size(), m_meshes[0].getVertexDefinition());
	m_geometry_buffer_object.setIndicesData(
		&m_indices[0], m_indices.size() * sizeof(m_indices[0]));

	int vertex_count = 0;
	for (int i = 0; i < m_meshes.size(); ++i)
	{
		vertex_count += m_meshes[i].getAttributeArraySize() /
						m_meshes[i].getVertexDefinition().getStride();
	}
	m_vertices.resize(vertex_count);

	computeRuntimeData(&vertices[0]);

	return true;
}
Пример #4
0
bool Model::parseGeometry(FS::IFile& file)
{
	int32 indices_count = 0;
	file.read(&indices_count, sizeof(indices_count));
	if (indices_count <= 0) return false;

	m_indices.resize(indices_count);
	file.read(&m_indices[0], sizeof(m_indices[0]) * indices_count);

	int32 vertices_size = 0;
	file.read(&vertices_size, sizeof(vertices_size));
	if (vertices_size <= 0) return false;

	ASSERT(!bgfx::isValid(m_vertices_handle));
	const bgfx::Memory* vertices_mem = bgfx::alloc(vertices_size);
	file.read(vertices_mem->data, vertices_size);
	m_vertices_handle = bgfx::createVertexBuffer(vertices_mem, m_meshes[0].getVertexDefinition());
	m_vertices_size = vertices_size;

	ASSERT(!bgfx::isValid(m_indices_handle));
	m_indices_size = sizeof(m_indices[0]) * indices_count;
	const bgfx::Memory* mem = bgfx::copy(&m_indices[0], m_indices_size);
	m_indices_handle = bgfx::createIndexBuffer(mem, BGFX_BUFFER_INDEX32);

	int vertex_count = 0;
	for (int i = 0; i < m_meshes.size(); ++i)
	{
		vertex_count += m_meshes[i].getAttributeArraySize() /
						m_meshes[i].getVertexDefinition().getStride();
	}
	m_vertices.resize(vertex_count);

	computeRuntimeData(vertices_mem->data);

	return true;
}