|
@@ -910,8 +910,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( geometryAttribute !== undefined ) {
|
|
|
|
|
|
- state.enableAttribute( programAttribute );
|
|
|
-
|
|
|
var size = geometryAttribute.itemSize;
|
|
|
var buffer = objects.getAttributeBuffer( geometryAttribute );
|
|
|
|
|
@@ -921,19 +919,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
var stride = data.stride;
|
|
|
var offset = geometryAttribute.offset;
|
|
|
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );
|
|
|
- _gl.vertexAttribPointer( programAttribute, size, _gl.FLOAT, false, stride * data.array.BYTES_PER_ELEMENT, ( startIndex * stride + offset ) * data.array.BYTES_PER_ELEMENT );
|
|
|
-
|
|
|
if ( data instanceof THREE.InstancedInterleavedBuffer ) {
|
|
|
|
|
|
- if ( extension === null ) {
|
|
|
-
|
|
|
- console.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferAttribute but hardware does not support extension ANGLE_instanced_arrays.' );
|
|
|
- return;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- extension.vertexAttribDivisorANGLE( programAttribute, data.meshPerAttribute );
|
|
|
+ state.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute, extension );
|
|
|
|
|
|
if ( geometry.maxInstancedCount === undefined ) {
|
|
|
|
|
@@ -941,23 +929,20 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
+ } else {
|
|
|
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );
|
|
|
- _gl.vertexAttribPointer( programAttribute, size, _gl.FLOAT, false, 0, startIndex * size * 4 ); // 4 bytes per Float32
|
|
|
+ state.enableAttribute( programAttribute );
|
|
|
|
|
|
- if ( geometryAttribute instanceof THREE.InstancedBufferAttribute ) {
|
|
|
+ }
|
|
|
|
|
|
- if ( extension === null ) {
|
|
|
+ _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );
|
|
|
+ _gl.vertexAttribPointer( programAttribute, size, _gl.FLOAT, false, stride * data.array.BYTES_PER_ELEMENT, ( startIndex * stride + offset ) * data.array.BYTES_PER_ELEMENT );
|
|
|
|
|
|
- console.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferAttribute but hardware does not support extension ANGLE_instanced_arrays.' );
|
|
|
- return;
|
|
|
+ } else {
|
|
|
|
|
|
- }
|
|
|
+ if ( geometryAttribute instanceof THREE.InstancedBufferAttribute ) {
|
|
|
|
|
|
- extension.vertexAttribDivisorANGLE( programAttribute, geometryAttribute.meshPerAttribute );
|
|
|
+ state.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute, extension );
|
|
|
|
|
|
if ( geometry.maxInstancedCount === undefined ) {
|
|
|
|
|
@@ -965,8 +950,15 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ } else {
|
|
|
+
|
|
|
+ state.enableAttribute( programAttribute );
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+ _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );
|
|
|
+ _gl.vertexAttribPointer( programAttribute, size, _gl.FLOAT, false, 0, startIndex * size * 4 ); // 4 bytes per Float32
|
|
|
+
|
|
|
}
|
|
|
|
|
|
} else if ( materialDefaultAttributeValues !== undefined ) {
|