Ejemplo n.º 1
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void UniformFloat::setArray(const Vec3fArray& values)
{
    size_t numValues = values.size();
    CVF_ASSERT(numValues > 0);

    m_type = FLOAT_VEC3;
    m_data.resize(3*numValues);
    m_data.copyData(values.ptr()->ptr(), 3*numValues, 0);
}
Ejemplo n.º 2
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
TEST(ArrayTest, ptrToIdx)
{
    // Vec3f array
    Vec3fArray vA;
    vA.resize(4);
    ASSERT_EQ(4u, vA.size());

    vA[0] = Vec3f(1,2,3);
    vA[1] = Vec3f(1.1f, 2.2f, 3.3f);
    vA[2] = Vec3f(0,0,0);
    vA[3] = Vec3f(4,5,6);

    Vec3f* p1 = vA.ptr(1);
    ASSERT_FLOAT_EQ(1.1f, p1->x());
    ASSERT_FLOAT_EQ(2.2f, p1->y());
    ASSERT_FLOAT_EQ(3.3f, p1->z());

    Vec3f* p3 = vA.ptr(3);
    ASSERT_FLOAT_EQ(4, p3->x());
    ASSERT_FLOAT_EQ(5, p3->y());
    ASSERT_FLOAT_EQ(6, p3->z());
}
Ejemplo n.º 3
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
TEST(ArrayTest, BasicVec3fArray)
{
    // Vec3f array
    Vec3fArray vA;
    vA.resize(4);
    ASSERT_EQ(4u, vA.size());

    vA[0] = Vec3f(1,2,3);
    vA[1] = Vec3f(1.1f, 2.2f, 3.3f);
    vA[2] = Vec3f(0,0,0);
    vA[3] = Vec3f(4,5,6);

    ASSERT_EQ(true, vA[0] == Vec3f(1, 2, 3));
    ASSERT_EQ(true, vA[1] == Vec3f(1.1f, 2.2f, 3.3f));
    ASSERT_EQ(true, vA[2] == Vec3f(0, 0, 0));
    ASSERT_EQ(true, vA[3] == Vec3f(4, 5, 6));

    const float* pf = vA.ptr()->ptr();

    ASSERT_FLOAT_EQ(1.0f, pf[0]);
    ASSERT_FLOAT_EQ(2.0f, pf[1]);
    ASSERT_FLOAT_EQ(3.0f, pf[2]);
    ASSERT_FLOAT_EQ(1.1f, pf[3]);
    ASSERT_FLOAT_EQ(2.2f, pf[4]);
    ASSERT_FLOAT_EQ(3.3f, pf[5]);
    ASSERT_FLOAT_EQ(0.0f, pf[6]);
    ASSERT_FLOAT_EQ(0.0f, pf[7]);
    ASSERT_FLOAT_EQ(0.0f, pf[8]);
    ASSERT_FLOAT_EQ(4.0f, pf[9]);
    ASSERT_FLOAT_EQ(5.0f, pf[10]);
    ASSERT_FLOAT_EQ(6.0f, pf[11]);

    vA.clear();

    ASSERT_EQ(0u, vA.size());
}
Ejemplo n.º 4
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void DrawableVectors::createUploadBufferObjectsGPU(OpenGLContext* oglContext)
{
    if (!m_renderWithVBO || m_vertexArray->size() == 0 || m_vectorGlyph.isNull() || m_vectorGlyphPrimSet.isNull())
    {
        return;
    }

    if (m_glyphVerticesAndNormalsBO.isNull() || !m_glyphVerticesAndNormalsBO->isUploaded())
    {
        // Build a interleaved VBO for glyphs vertices and normals to get better performance 
        // during the main shader based draw path
        size_t numVertices = m_vectorGlyph->vertexArray()->size();

        Vec3fArray data;
        data.reserve(numVertices*2);
        size_t i;
        for (i = 0; i < numVertices; i++)
        {
            data.add(m_vectorGlyph->vertexArray()->get(i));
            data.add(m_vectorGlyph->normalArray()->get(i));
        }

        GLuint uiSizeInBytes = static_cast<GLuint>(data.size()*3*sizeof(float));
        m_glyphVerticesAndNormalsBO = oglContext->resourceManager()->getOrCreateManagedBufferObject(oglContext, GL_ARRAY_BUFFER, uiSizeInBytes, data.ptr()->ptr());
    }


    if (m_indicesBO.isNull() || !m_indicesBO->isUploaded())
    {
        const UShortArray* indices = m_vectorGlyphPrimSet->indices();
        size_t numIndices = indices->size();
        if (numIndices > 0) 
        {
            GLuint uiSizeInBytes = static_cast<GLuint>(numIndices*sizeof(GLushort));
            m_indicesBO = oglContext->resourceManager()->getOrCreateManagedBufferObject(oglContext, GL_ELEMENT_ARRAY_BUFFER, uiSizeInBytes, indices->ptr());
            CVF_CHECK_OGL(oglContext);
        }
    }
}