Beispiel #1
0
//--------------------------------------------------------------------------------------------------
/// Set the render mode (immediate, vertex array or VBO) to use when rendering the geometry
//--------------------------------------------------------------------------------------------------
void DrawableGeo::setRenderMode(RenderMode renderMode)
{
    if (m_renderMode != renderMode)
    {
        m_renderMode = renderMode;
        releaseBufferObjectsGPU();
    }
}
Beispiel #2
0
//--------------------------------------------------------------------------------------------------
/// Weld vertices based on vertex distance
///
/// \warning Calling this function will delete all vertex related data except the vertex positions
//--------------------------------------------------------------------------------------------------
void DrawableGeo::weldVertices(double weldDistance)
{
    size_t numVertices = m_vertexBundle->vertexCount();
    size_t numPrimSets = m_primitiveSets.size();
    if (numVertices == 0 || numPrimSets == 0)
    {
        return;
    }

    cref<Vec3fArray> sourceVertexArray = m_vertexBundle->vertexArray();
    CVF_ASSERT(sourceVertexArray.notNull());

    // Try and use bounding box to guess cell size
    // Probably needs more experimenting here
    double cellSize = m_boundingBox.radius()/100;

    VertexWelder welder;
    welder.initialize(weldDistance, cellSize, static_cast<uint>(numVertices));
    welder.reserveVertices(static_cast<uint>(numVertices));

    Collection<PrimitiveSet> newPrimSets;

    size_t ip;
    for (ip = 0; ip < numPrimSets; ip++)
    {
        const PrimitiveSet* srcPrimSet = m_primitiveSets.at(ip);
        PrimitiveType primType = srcPrimSet->primitiveType();
        size_t numIndices = srcPrimSet->indexCount();
        
        ref<UIntArray> newIndices = new UIntArray;
        newIndices->reserve(numIndices);

        size_t i;
        for (i = 0; i < numIndices; i++)
        {
            uint idx = srcPrimSet->index(i);
            Vec3f v = sourceVertexArray->get(idx);
            uint newIndexOfVertex = welder.weldVertex(v, NULL);
            newIndices->add(newIndexOfVertex);
        }

        ref<PrimitiveSetIndexedUInt> primSet = new PrimitiveSetIndexedUInt(primType);
        primSet->setIndices(newIndices.p());

        newPrimSets.push_back(primSet.p());
    }

    releaseBufferObjectsGPU();

    m_vertexBundle->clear();
    m_vertexBundle->setVertexArray(welder.createVertexArray().p());
    m_primitiveSets = newPrimSets;

    recomputeBoundingBox();
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void DrawableVectors::setGlyph(UShortArray* triangles, Vec3fArray* vertices)
{
    m_vectorGlyph = new DrawableGeo;
    m_vectorGlyphPrimSet = new PrimitiveSetIndexedUShort(PT_TRIANGLES);

    m_vectorGlyphPrimSet->setIndices(triangles);
    m_vectorGlyph->setVertexArray(vertices);
    m_vectorGlyph->addPrimitiveSet(m_vectorGlyphPrimSet.p());
    m_vectorGlyph->computeNormals();

    if (m_renderWithVBO)
    {
        m_vectorGlyph->setRenderMode(DrawableGeo::BUFFER_OBJECT);
    }

    releaseBufferObjectsGPU();
}
Beispiel #4
0
//--------------------------------------------------------------------------------------------------
/// Deletes OpenGL resources created by this primitive set
//--------------------------------------------------------------------------------------------------
PrimitiveSetIndexedUInt::~PrimitiveSetIndexedUInt()
{
    releaseBufferObjectsGPU();
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
DrawableVectors::~DrawableVectors()
{
    releaseBufferObjectsGPU();
}
Beispiel #6
0
//--------------------------------------------------------------------------------------------------
/// Deletes all OpenGL resources created by this drawable geo
//--------------------------------------------------------------------------------------------------
DrawableGeo::~DrawableGeo()
{
    releaseBufferObjectsGPU();
}
//--------------------------------------------------------------------------------------------------
/// Deletes OpenGL resources created by this primitive set
//--------------------------------------------------------------------------------------------------
PrimitiveSetIndexedUShortScoped::~PrimitiveSetIndexedUShortScoped()
{
    releaseBufferObjectsGPU();
}