Example #1
0
void Pickable::_genColorBlock(bool geomPicking)
{
    // Just in case this function is spammed without _delColorBlock(),
    // free block before create.
    _delColorBlock();

    int vbSize = _rSource->getVBuffer()->getVertexSize();

    // Allocate enough space for the block (four bytes per vertex).
    std::vector<unsigned char> colorblock;
    colorblock.resize(vbSize * 4);

    if(!geomPicking)
    {
        // Create unique block of color indices.
        ColorCoderSingle.genCodeBlock(vbSize, &_colorIndexRange.start, &_colorIndexRange.end, colorblock.data());
    }
    else
    {
        std::vector<unsigned char> block;
        block.resize(4);

        // Create a single unique index for the whole block.
        ColorCoderSingle.genCodeBlock(1, &_colorIndexRange.start, &_colorIndexRange.end, block.data());

        for(int i = 0; i < vbSize; i++)
        {
            colorblock[i * 4 + 0] = block[0];
            colorblock[i * 4 + 1] = block[1];
            colorblock[i * 4 + 2] = block[2];
            colorblock[i * 4 + 3] = block[3];
        }
    }

    // Bind color indices to color buffer.
    _cIndexBuffer->empty();
    _cIndexBuffer->append(colorblock.data(), colorblock.size());
}
Example #2
0
PickablePnts::~PickablePnts()
{
    _delColorBlock();
}