|
@@ -2376,45 +2376,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
- // used by renderBufferDirect for THREE.Line
|
|
|
- function setupLinesVertexAttributes( material, programAttributes, geometryAttributes, startIndex ) {
|
|
|
-
|
|
|
- var attributeItem, attributeName, attributePointer, attributeSize;
|
|
|
-
|
|
|
- for ( attributeName in programAttributes ) {
|
|
|
-
|
|
|
- attributePointer = programAttributes[ attributeName ];
|
|
|
- attributeItem = geometryAttributes[ attributeName ];
|
|
|
-
|
|
|
- if ( attributePointer >= 0 ) {
|
|
|
-
|
|
|
- if ( attributeItem ) {
|
|
|
-
|
|
|
- attributeSize = attributeItem.itemSize;
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, attributeItem.buffer );
|
|
|
- enableAttribute( attributePointer );
|
|
|
- _gl.vertexAttribPointer( attributePointer, attributeSize, _gl.FLOAT, false, 0, startIndex * attributeSize * 4 ); // 4 bytes per Float32
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues ) {
|
|
|
-
|
|
|
- if ( material.defaultAttributeValues[ attributeName ].length === 2 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib2fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues[ attributeName ].length === 3 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib3fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
function setDirectBuffers( geometry, hint ) {
|
|
|
|
|
|
var attributes = geometry.attributes;
|
|
@@ -2542,6 +2503,43 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
+ function setupVertexAttributes( material, programAttributes, geometryAttributes, startIndex ) {
|
|
|
+
|
|
|
+ for ( var attributeName in programAttributes ) {
|
|
|
+
|
|
|
+ var attributePointer = programAttributes[ attributeName ];
|
|
|
+ var attributeItem = geometryAttributes[ attributeName ];
|
|
|
+
|
|
|
+ if ( attributePointer >= 0 ) {
|
|
|
+
|
|
|
+ if ( attributeItem ) {
|
|
|
+
|
|
|
+ var attributeSize = attributeItem.itemSize;
|
|
|
+
|
|
|
+ _gl.bindBuffer( _gl.ARRAY_BUFFER, attributeItem.buffer );
|
|
|
+ enableAttribute( attributePointer );
|
|
|
+ _gl.vertexAttribPointer( attributePointer, attributeSize, _gl.FLOAT, false, 0, startIndex * attributeSize * 4 ); // 4 bytes per Float32
|
|
|
+
|
|
|
+ } else if ( material.defaultAttributeValues ) {
|
|
|
+
|
|
|
+ if ( material.defaultAttributeValues[ attributeName ].length === 2 ) {
|
|
|
+
|
|
|
+ _gl.vertexAttrib2fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
+
|
|
|
+ } else if ( material.defaultAttributeValues[ attributeName ].length === 3 ) {
|
|
|
+
|
|
|
+ _gl.vertexAttrib3fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
this.renderBufferDirect = function ( camera, lights, fog, material, geometry, object ) {
|
|
|
|
|
|
if ( material.visible === false ) return;
|
|
@@ -2599,35 +2597,10 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( offsets.length === 0 ) {
|
|
|
|
|
|
- for ( attributeName in programAttributes ) {
|
|
|
-
|
|
|
- attributePointer = programAttributes[ attributeName ];
|
|
|
- attributeItem = geometryAttributes[ attributeName ];
|
|
|
-
|
|
|
- if ( attributePointer >= 0 ) {
|
|
|
-
|
|
|
- if ( attributeItem ) {
|
|
|
-
|
|
|
- attributeSize = attributeItem.itemSize;
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, attributeItem.buffer );
|
|
|
- enableAttribute( attributePointer );
|
|
|
- _gl.vertexAttribPointer( attributePointer, attributeSize, _gl.FLOAT, false, 0, 0 );
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues ) {
|
|
|
-
|
|
|
- if ( material.defaultAttributeValues[ attributeName ].length === 2 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib2fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues[ attributeName ].length === 3 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib3fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ if ( updateBuffers ) {
|
|
|
|
|
|
- }
|
|
|
+ setupVertexAttributes( material, programAttributes, geometryAttributes, 0 );
|
|
|
+ _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, index.buffer );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -2651,40 +2624,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( updateBuffers ) {
|
|
|
|
|
|
- for ( attributeName in programAttributes ) {
|
|
|
-
|
|
|
- attributePointer = programAttributes[ attributeName ];
|
|
|
- attributeItem = geometryAttributes[ attributeName ];
|
|
|
-
|
|
|
- if ( attributePointer >= 0 ) {
|
|
|
-
|
|
|
- if ( attributeItem ) {
|
|
|
-
|
|
|
- attributeSize = attributeItem.itemSize;
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, attributeItem.buffer );
|
|
|
- enableAttribute( attributePointer );
|
|
|
- _gl.vertexAttribPointer( attributePointer, attributeSize, _gl.FLOAT, false, 0, startIndex * attributeSize * 4 ); // 4 bytes per Float32
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues ) {
|
|
|
-
|
|
|
- if ( material.defaultAttributeValues[ attributeName ].length === 2 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib2fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues[ attributeName ].length === 3 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib3fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // indices
|
|
|
-
|
|
|
+ setupVertexAttributes( material, programAttributes, geometryAttributes, startIndex );
|
|
|
_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, index.buffer );
|
|
|
|
|
|
}
|
|
@@ -2707,39 +2647,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( updateBuffers ) {
|
|
|
|
|
|
- for ( attributeName in programAttributes ) {
|
|
|
-
|
|
|
- if ( attributeName === 'index') continue;
|
|
|
-
|
|
|
- attributePointer = programAttributes[ attributeName ];
|
|
|
- attributeItem = geometryAttributes[ attributeName ];
|
|
|
-
|
|
|
- if ( attributePointer >= 0 ) {
|
|
|
-
|
|
|
- if ( attributeItem ) {
|
|
|
-
|
|
|
- attributeSize = attributeItem.itemSize;
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, attributeItem.buffer );
|
|
|
- enableAttribute( attributePointer );
|
|
|
- _gl.vertexAttribPointer( attributePointer, attributeSize, _gl.FLOAT, false, 0, 0 );
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues && material.defaultAttributeValues[ attributeName ] ) {
|
|
|
-
|
|
|
- if ( material.defaultAttributeValues[ attributeName ].length === 2 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib2fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues[ attributeName ].length === 3 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib3fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ setupVertexAttributes( material, programAttributes, geometryAttributes, 0 );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -2761,37 +2669,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( updateBuffers ) {
|
|
|
|
|
|
- for ( attributeName in programAttributes ) {
|
|
|
-
|
|
|
- attributePointer = programAttributes[ attributeName ];
|
|
|
- attributeItem = geometryAttributes[ attributeName ];
|
|
|
-
|
|
|
- if ( attributePointer >= 0 ) {
|
|
|
-
|
|
|
- if ( attributeItem ) {
|
|
|
-
|
|
|
- attributeSize = attributeItem.itemSize;
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, attributeItem.buffer );
|
|
|
- enableAttribute( attributePointer );
|
|
|
- _gl.vertexAttribPointer( attributePointer, attributeSize, _gl.FLOAT, false, 0, 0 );
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues && material.defaultAttributeValues[ attributeName ] ) {
|
|
|
-
|
|
|
- if ( material.defaultAttributeValues[ attributeName ].length === 2 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib2fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- } else if ( material.defaultAttributeValues[ attributeName ].length === 3 ) {
|
|
|
-
|
|
|
- _gl.vertexAttrib3fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ setupVertexAttributes( material, programAttributes, geometryAttributes, 0 );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -2836,9 +2714,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( updateBuffers ) {
|
|
|
|
|
|
- setupLinesVertexAttributes( material, programAttributes, geometryAttributes, 0 );
|
|
|
-
|
|
|
- // indices
|
|
|
+ setupVertexAttributes( material, programAttributes, geometryAttributes, 0 );
|
|
|
_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, index.buffer );
|
|
|
|
|
|
}
|
|
@@ -2862,9 +2738,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( updateBuffers ) {
|
|
|
|
|
|
- setupLinesVertexAttributes(material, programAttributes, geometryAttributes, startIndex);
|
|
|
-
|
|
|
- // indices
|
|
|
+ setupVertexAttributes( material, programAttributes, geometryAttributes, startIndex );
|
|
|
_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, index.buffer );
|
|
|
|
|
|
}
|
|
@@ -2886,7 +2760,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( updateBuffers ) {
|
|
|
|
|
|
- setupLinesVertexAttributes( material, programAttributes, geometryAttributes, 0 );
|
|
|
+ setupVertexAttributes( material, programAttributes, geometryAttributes, 0 );
|
|
|
|
|
|
}
|
|
|
|