Initial commit
This commit is contained in:
119
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js
generated
vendored
Normal file
119
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js
generated
vendored
Normal file
@@ -0,0 +1,119 @@
|
||||
class WebGLAttributeUtils {
|
||||
|
||||
constructor( backend ) {
|
||||
|
||||
this.backend = backend;
|
||||
|
||||
}
|
||||
|
||||
createAttribute( attribute, bufferType ) {
|
||||
|
||||
const backend = this.backend;
|
||||
const { gl } = backend;
|
||||
|
||||
const array = attribute.array;
|
||||
const usage = attribute.usage || gl.STATIC_DRAW;
|
||||
|
||||
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
||||
const bufferData = backend.get( bufferAttribute );
|
||||
|
||||
let bufferGPU = bufferData.bufferGPU;
|
||||
|
||||
if ( bufferGPU === undefined ) {
|
||||
|
||||
bufferGPU = gl.createBuffer();
|
||||
|
||||
gl.bindBuffer( bufferType, bufferGPU );
|
||||
gl.bufferData( bufferType, array, usage );
|
||||
gl.bindBuffer( bufferType, null );
|
||||
|
||||
bufferData.bufferGPU = bufferGPU;
|
||||
bufferData.bufferType = bufferType;
|
||||
bufferData.version = bufferAttribute.version;
|
||||
|
||||
}
|
||||
|
||||
//attribute.onUploadCallback();
|
||||
|
||||
let type;
|
||||
let isFloat = false;
|
||||
|
||||
if ( array instanceof Float32Array ) {
|
||||
|
||||
type = gl.FLOAT;
|
||||
isFloat = true;
|
||||
|
||||
} else if ( array instanceof Uint16Array ) {
|
||||
|
||||
if ( attribute.isFloat16BufferAttribute ) {
|
||||
|
||||
type = gl.HALF_FLOAT;
|
||||
isFloat = true;
|
||||
|
||||
} else {
|
||||
|
||||
type = gl.UNSIGNED_SHORT;
|
||||
|
||||
}
|
||||
|
||||
} else if ( array instanceof Int16Array ) {
|
||||
|
||||
type = gl.SHORT;
|
||||
|
||||
} else if ( array instanceof Uint32Array ) {
|
||||
|
||||
type = gl.UNSIGNED_INT;
|
||||
|
||||
} else if ( array instanceof Int32Array ) {
|
||||
|
||||
type = gl.INT;
|
||||
|
||||
} else if ( array instanceof Int8Array ) {
|
||||
|
||||
type = gl.BYTE;
|
||||
|
||||
} else if ( array instanceof Uint8Array ) {
|
||||
|
||||
type = gl.UNSIGNED_BYTE;
|
||||
|
||||
} else if ( array instanceof Uint8ClampedArray ) {
|
||||
|
||||
type = gl.UNSIGNED_BYTE;
|
||||
|
||||
} else {
|
||||
|
||||
throw new Error( 'THREE.WebGLBackend: Unsupported buffer data format: ' + array );
|
||||
|
||||
}
|
||||
|
||||
backend.set( attribute, {
|
||||
bufferGPU,
|
||||
type,
|
||||
bytesPerElement: array.BYTES_PER_ELEMENT,
|
||||
version: attribute.version,
|
||||
isFloat
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
updateAttribute( attribute ) {
|
||||
|
||||
const backend = this.backend;
|
||||
const { gl } = backend;
|
||||
|
||||
const array = attribute.array;
|
||||
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
||||
const bufferData = backend.get( bufferAttribute );
|
||||
const bufferType = bufferData.bufferType;
|
||||
|
||||
gl.bindBuffer( bufferType, bufferData.bufferGPU );
|
||||
gl.bufferSubData( bufferType, 0, array );
|
||||
gl.bindBuffer( bufferType, null );
|
||||
|
||||
bufferData.version = bufferAttribute.version;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default WebGLAttributeUtils;
|
||||
Reference in New Issue
Block a user