123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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 bufferGPU = gl.createBuffer();
- gl.bindBuffer( bufferType, bufferGPU );
- gl.bufferData( bufferType, array, usage );
- gl.bindBuffer( bufferType, null );
- //attribute.onUploadCallback();
- let type;
- if ( array instanceof Float32Array ) {
- type = gl.FLOAT;
- } else if ( array instanceof Uint16Array ) {
- if ( attribute.isFloat16BufferAttribute ) {
- type = gl.HALF_FLOAT;
- } 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
- } );
- }
- }
- export default WebGLAttributeUtils;
|