void Rendering::Mesh::updatePositions(FEMMesh* inputMesh)
{
	const TVecCoord& in = inputMesh->positions;
	TVecCoord& out = m_vertices;
	if (d_map_f.size() != out.size() || d_map_i.size() != out.size()) return;

	DEVICE_METHOD(TetraMapper3f_apply)( out.size(), d_map_i.deviceRead(), d_map_f.deviceRead(), out.deviceWrite(), in.deviceRead() );
	const GLvoid * pointer = NULL;

	pointer = this->m_vertices.hostRead();

	glBindBuffer(GL_ARRAY_BUFFER, d_VBO);
	glBufferData(GL_ARRAY_BUFFER, this->m_vertices.size() * sizeof(TCoord), NULL, GL_STREAM_DRAW); // Buffer orphaning, a common way to improve streaming perf. See above link for details.
	glBufferSubData(GL_ARRAY_BUFFER, 0, this->m_vertices.size() * sizeof(TCoord), pointer );


	/*for (unsigned int i=0;i<out.size();++i)
	{
	out[i] = 
	in[map_i[i][0]] * map_f[i][0] +
	in[map_i[i][1]] * map_f[i][1] +
	in[map_i[i][2]] * map_f[i][2] +
	in[map_i[i][3]] * map_f[i][3];
	}*/
}
Example #2
0
void SurfaceMesh::updatePositions(FEMMesh* inputMesh)
{
    const TVecCoord& in = inputMesh->positions;
    TVecCoord& out = positions;
    if (map_f.size() != out.size() || map_i.size() != out.size()) return;

    DEVICE_METHOD(TetraMapper3f_apply)( out.size(), map_i.deviceRead(), map_f.deviceRead(), out.deviceWrite(), in.deviceRead() );

    /*for (unsigned int i=0;i<out.size();++i)
    {
        out[i] = 
            in[map_i[i][0]] * map_f[i][0] +
            in[map_i[i][1]] * map_f[i][1] +
            in[map_i[i][2]] * map_f[i][2] +
            in[map_i[i][3]] * map_f[i][3];
    }*/
}