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()); }
PickablePnts::~PickablePnts() { _delColorBlock(); }