|
@@ -869,6 +869,96 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
+ this.renderBufferDirect = function ( camera, lights, fog, material, object ) {
|
|
|
+
|
|
|
+ if ( material.visible === false ) return;
|
|
|
+
|
|
|
+ setMaterial( material );
|
|
|
+
|
|
|
+ var geometry = objects.geometries.get( object );
|
|
|
+ var program = setProgram( camera, lights, fog, material, object );
|
|
|
+
|
|
|
+ var updateBuffers = false,
|
|
|
+ wireframeBit = material.wireframe ? 1 : 0,
|
|
|
+ geometryProgram = geometry.id + '_' + program.id + '_' + wireframeBit;
|
|
|
+
|
|
|
+ if ( geometryProgram !== _currentGeometryProgram ) {
|
|
|
+
|
|
|
+ _currentGeometryProgram = geometryProgram;
|
|
|
+ updateBuffers = true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // morph targets
|
|
|
+
|
|
|
+ var morphTargetInfluences = object.morphTargetInfluences;
|
|
|
+
|
|
|
+ if ( morphTargetInfluences !== undefined ) {
|
|
|
+
|
|
|
+ var activeInfluences = [];
|
|
|
+
|
|
|
+ for ( var i = 0, l = morphTargetInfluences.length; i < l; i ++ ) {
|
|
|
+
|
|
|
+ var influence = morphTargetInfluences[ i ];
|
|
|
+ activeInfluences.push( [ influence, i ] );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ activeInfluences.sort( numericalSort );
|
|
|
+
|
|
|
+ if ( activeInfluences.length > 8 ) {
|
|
|
+
|
|
|
+ activeInfluences.length = 8;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ for ( var i = 0, l = activeInfluences.length; i < l; i ++ ) {
|
|
|
+
|
|
|
+ var influence = activeInfluences[ i ];
|
|
|
+ morphInfluences[ i ] = influence[ 0 ];
|
|
|
+
|
|
|
+ if ( influence[ 0 ] !== 0 ) {
|
|
|
+
|
|
|
+ var attribute = geometry.morphAttributes[ influence[ 1 ] ];
|
|
|
+
|
|
|
+ geometry.addAttribute( 'morphTarget' + i, attribute );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ geometry.removeAttribute( 'morphTarget' + i );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ var uniforms = program.getUniforms();
|
|
|
+
|
|
|
+ if ( uniforms.morphTargetInfluences !== null ) {
|
|
|
+
|
|
|
+ _gl.uniform1fv( uniforms.morphTargetInfluences, morphInfluences );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ updateBuffers = true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( object instanceof THREE.Mesh ) {
|
|
|
+
|
|
|
+ renderMesh( material, geometry, object, program, updateBuffers );
|
|
|
+
|
|
|
+ } else if ( object instanceof THREE.Line ) {
|
|
|
+
|
|
|
+ renderLine( material, geometry, object, program, updateBuffers );
|
|
|
+
|
|
|
+ } else if ( object instanceof THREE.PointCloud ) {
|
|
|
+
|
|
|
+ renderPointCloud( material, geometry, object, program, updateBuffers );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
function setupVertexAttributes( material, program, geometry, startIndex ) {
|
|
|
|
|
|
var extension;
|
|
@@ -1000,96 +1090,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- this.renderBufferDirect = function ( camera, lights, fog, material, object ) {
|
|
|
-
|
|
|
- if ( material.visible === false ) return;
|
|
|
-
|
|
|
- setMaterial( material );
|
|
|
-
|
|
|
- var geometry = objects.geometries.get( object );
|
|
|
- var program = setProgram( camera, lights, fog, material, object );
|
|
|
-
|
|
|
- var updateBuffers = false,
|
|
|
- wireframeBit = material.wireframe ? 1 : 0,
|
|
|
- geometryProgram = geometry.id + '_' + program.id + '_' + wireframeBit;
|
|
|
-
|
|
|
- if ( geometryProgram !== _currentGeometryProgram ) {
|
|
|
-
|
|
|
- _currentGeometryProgram = geometryProgram;
|
|
|
- updateBuffers = true;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // morph targets
|
|
|
-
|
|
|
- var morphTargetInfluences = object.morphTargetInfluences;
|
|
|
-
|
|
|
- if ( morphTargetInfluences !== undefined ) {
|
|
|
-
|
|
|
- var activeInfluences = [];
|
|
|
-
|
|
|
- for ( var i = 0, l = morphTargetInfluences.length; i < l; i ++ ) {
|
|
|
-
|
|
|
- var influence = morphTargetInfluences[ i ];
|
|
|
- activeInfluences.push( [ influence, i ] );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- activeInfluences.sort( numericalSort );
|
|
|
-
|
|
|
- if ( activeInfluences.length > 8 ) {
|
|
|
-
|
|
|
- activeInfluences.length = 8;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- for ( var i = 0, l = activeInfluences.length; i < l; i ++ ) {
|
|
|
-
|
|
|
- var influence = activeInfluences[ i ];
|
|
|
- morphInfluences[ i ] = influence[ 0 ];
|
|
|
-
|
|
|
- if ( influence[ 0 ] !== 0 ) {
|
|
|
-
|
|
|
- var attribute = geometry.morphAttributes[ influence[ 1 ] ];
|
|
|
-
|
|
|
- geometry.addAttribute( 'morphTarget' + i, attribute );
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- geometry.removeAttribute( 'morphTarget' + i );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- var uniforms = program.getUniforms();
|
|
|
-
|
|
|
- if ( uniforms.morphTargetInfluences !== null ) {
|
|
|
-
|
|
|
- _gl.uniform1fv( uniforms.morphTargetInfluences, morphInfluences );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- updateBuffers = true;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if ( object instanceof THREE.Mesh ) {
|
|
|
-
|
|
|
- renderMesh( material, geometry, object, program, updateBuffers );
|
|
|
-
|
|
|
- } else if ( object instanceof THREE.Line ) {
|
|
|
-
|
|
|
- renderLine( material, geometry, object, program, updateBuffers );
|
|
|
-
|
|
|
- } else if ( object instanceof THREE.PointCloud ) {
|
|
|
-
|
|
|
- renderPointCloud( material, geometry, object, program, updateBuffers );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
function renderMesh( material, geometry, object, program, updateBuffers ) {
|
|
|
|
|
|
var mode = _gl.TRIANGLES;
|