MCPcopy
hub / github.com/processing/p5.js / _packField

Method _packField

src/webgpu/p5.RendererWebGPU.js:2077–2115  ·  view source on GitHub ↗
(field, value, floatView, dataView, baseOffset)

Source from the content-addressed store, hash-verified

2075 //
2076 // value: number or number[] - the data to write
2077 _packField(field, value, floatView, dataView, baseOffset) {
2078 if (value === undefined) return;
2079
2080 // Duck typing instead of instanceof to avoid importing a separate
2081 // copy of the Color/Vector classes
2082 if (value?.isVector) {
2083 value = value.values.length !== value.dimensions ? value.values.slice(0, value.dimensions) : value.values;
2084 } else if (value?.isColor) {
2085 value = value._getRGBA([1, 1, 1, 1]);
2086 }
2087 const byteOffset = baseOffset + field.offset;
2088 if (field.baseType === 'u32') {
2089 if (field.size === 4) {
2090 dataView.setUint32(byteOffset, value, true);
2091 } else {
2092 for (let i = 0; i < value.length; i++) {
2093 dataView.setUint32(byteOffset + i * 4, value[i], true);
2094 }
2095 }
2096 } else if (field.baseType === 'i32') {
2097 if (field.size === 4) {
2098 dataView.setInt32(byteOffset, value, true);
2099 } else {
2100 for (let i = 0; i < value.length; i++) {
2101 dataView.setInt32(byteOffset + i * 4, value[i], true);
2102 }
2103 }
2104 } else if (field.packInPlace) {
2105 // In-place packing for mat3: write directly to buffer with padding
2106 const base = byteOffset / 4;
2107 floatView[base + 0] = value[0]; floatView[base + 1] = value[1]; floatView[base + 2] = value[2];
2108 floatView[base + 4] = value[3]; floatView[base + 5] = value[4]; floatView[base + 6] = value[5];
2109 floatView[base + 8] = value[6]; floatView[base + 9] = value[7]; floatView[base + 10] = value[8];
2110 } else if (field.size === 4) {
2111 floatView.set([value], byteOffset / 4);
2112 } else {
2113 floatView.set(value, byteOffset / 4);
2114 }
2115 }
2116
2117 _packUniformGroup(shader, groupUniforms, bufferInfo) {
2118 // Pack a single group's uniforms into a buffer

Callers 2

_packUniformGroupMethod · 0.95
_packStructArrayMethod · 0.95

Calls 3

sliceMethod · 0.80
_getRGBAMethod · 0.80
setMethod · 0.45

Tested by

no test coverage detected