core: Use interleaved buffer for paint property binders (#4124)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Adrian Cojocaru
2026-03-30 12:58:08 +03:00
committed by GitHub
parent 0aff90b645
commit d4bde4c93e
3 changed files with 120 additions and 61 deletions

View File

@@ -452,14 +452,17 @@ protected:
return;
}
if (const auto& sharedVector = binder->getSharedVertexVector()) {
const auto rawSize = static_cast<uint32_t>(sharedVector->getRawSize());
if (binder->interleavedVertexBuffer) {
const auto& interleavedSharedVector = binder->interleavedVertexBuffer->sharedVertexVector;
const auto rawSize = static_cast<uint32_t>(binder->interleavedVertexBuffer->stride);
const bool isInterpolated = binder->isInterpolated();
const auto dataType = isInterpolated ? InterpType::DataType : Type::DataType;
assert(rawSize == static_cast<uint32_t>(isInterpolated ? sizeof(typename InterpType::Value)
: sizeof(typename Type::Value)));
assert(sharedVector->getRawCount() == binder->getVertexCount());
attrib->setSharedRawData(std::move(sharedVector), 0, 0, rawSize, dataType);
assert(interleavedSharedVector->getRawCount() / binder->interleavedVertexBuffer->stride ==
binder->getVertexCount());
attrib->setSharedRawData(
std::move(interleavedSharedVector), static_cast<uint32_t>(binder->vertexOffset), 0, rawSize, dataType);
} else {
const auto vertexCount = binder->getVertexCount();
for (std::size_t i = 0; i < vertexCount; ++i) {