UNPKG

@spearwolf/twopoint5d

Version:

Create 2.5D realtime graphics and pixelart with WebGL and three.js

37 lines 1.99 kB
import { BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute } from 'three/webgpu'; import { createIndicesArray } from './createIndicesArray.js'; import { toDrawUsage } from './toDrawUsage.js'; export function initializeAttributes(geometry, pool, buffers, bufferSerials) { const { descriptor, capacity } = pool; if (descriptor.hasIndices) { const { indices } = descriptor; const bufAttr = new BufferAttribute(createIndicesArray(indices, capacity), 1); geometry.setIndex(bufAttr); } for (const buffer of pool.buffer.buffers.values()) { const attributes = pool.buffer.bufferNameAttributes.get(buffer.bufferName); if (attributes.length > 1) { const interleavedBuffer = new InterleavedBuffer(buffer.typedArray, buffer.itemSize); interleavedBuffer.setUsage(toDrawUsage(buffer.usageType)); buffers.set(buffer.bufferName, interleavedBuffer); bufferSerials.set(buffer.bufferName, buffer.serial); for (const bufAttr of attributes) { const attrDesc = descriptor.attributes.get(bufAttr.attributeName); const attr = new InterleavedBufferAttribute(interleavedBuffer, attrDesc.size, bufAttr.offset, attrDesc.normalizedData); attr.name = bufAttr.attributeName; geometry.setAttribute(attrDesc.name, attr); } } else { const bufAttr = attributes[0]; const attrDesc = descriptor.attributes.get(bufAttr.attributeName); const attr = new BufferAttribute(buffer.typedArray, buffer.itemSize, attrDesc.normalizedData); attr.setUsage(toDrawUsage(buffer.usageType)); attr.name = bufAttr.attributeName; buffers.set(buffer.bufferName, attr); bufferSerials.set(buffer.bufferName, buffer.serial); geometry.setAttribute(attrDesc.name, attr); } } } //# sourceMappingURL=initializeAttributes.js.map