|
@@ -12,6 +12,7 @@ import { WebGLShadowMap } from './webgl/WebGLShadowMap';
|
|
import { WebGLAttributes } from './webgl/WebGLAttributes';
|
|
import { WebGLAttributes } from './webgl/WebGLAttributes';
|
|
import { WebGLBackground } from './webgl/WebGLBackground';
|
|
import { WebGLBackground } from './webgl/WebGLBackground';
|
|
import { WebGLRenderLists } from './webgl/WebGLRenderLists';
|
|
import { WebGLRenderLists } from './webgl/WebGLRenderLists';
|
|
|
|
+import { WebGLMorphtargets } from './webgl/WebGLMorphtargets';
|
|
import { WebGLIndexedBufferRenderer } from './webgl/WebGLIndexedBufferRenderer';
|
|
import { WebGLIndexedBufferRenderer } from './webgl/WebGLIndexedBufferRenderer';
|
|
import { WebGLBufferRenderer } from './webgl/WebGLBufferRenderer';
|
|
import { WebGLBufferRenderer } from './webgl/WebGLBufferRenderer';
|
|
import { WebGLGeometries } from './webgl/WebGLGeometries';
|
|
import { WebGLGeometries } from './webgl/WebGLGeometries';
|
|
@@ -60,8 +61,6 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
var currentRenderList = null;
|
|
var currentRenderList = null;
|
|
|
|
|
|
- var morphInfluences = new Float32Array( 8 );
|
|
|
|
-
|
|
|
|
var spritesArray = [];
|
|
var spritesArray = [];
|
|
var flaresArray = [];
|
|
var flaresArray = [];
|
|
|
|
|
|
@@ -245,7 +244,7 @@ function WebGLRenderer( parameters ) {
|
|
var properties, textures, attributes, geometries, objects, lights;
|
|
var properties, textures, attributes, geometries, objects, lights;
|
|
var programCache, renderLists;
|
|
var programCache, renderLists;
|
|
|
|
|
|
- var background, bufferRenderer, indexedBufferRenderer;
|
|
|
|
|
|
+ var background, morphtargets, bufferRenderer, indexedBufferRenderer;
|
|
var flareRenderer, spriteRenderer;
|
|
var flareRenderer, spriteRenderer;
|
|
|
|
|
|
function initGLContext() {
|
|
function initGLContext() {
|
|
@@ -276,6 +275,7 @@ function WebGLRenderer( parameters ) {
|
|
attributes = new WebGLAttributes( _gl );
|
|
attributes = new WebGLAttributes( _gl );
|
|
geometries = new WebGLGeometries( _gl, attributes, _infoMemory );
|
|
geometries = new WebGLGeometries( _gl, attributes, _infoMemory );
|
|
objects = new WebGLObjects( geometries, _infoRender );
|
|
objects = new WebGLObjects( geometries, _infoRender );
|
|
|
|
+ morphtargets = new WebGLMorphtargets( _gl );
|
|
programCache = new WebGLPrograms( _this, extensions, capabilities );
|
|
programCache = new WebGLPrograms( _this, extensions, capabilities );
|
|
lights = new WebGLLights();
|
|
lights = new WebGLLights();
|
|
renderLists = new WebGLRenderLists();
|
|
renderLists = new WebGLRenderLists();
|
|
@@ -657,14 +657,6 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
- var influencesList = {};
|
|
|
|
-
|
|
|
|
- function absNumericalSort( a, b ) {
|
|
|
|
-
|
|
|
|
- return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {
|
|
this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {
|
|
|
|
|
|
state.setMaterial( material );
|
|
state.setMaterial( material );
|
|
@@ -681,91 +673,9 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- // morph targets
|
|
|
|
-
|
|
|
|
- var objectInfluences = object.morphTargetInfluences;
|
|
|
|
-
|
|
|
|
- if ( objectInfluences !== undefined ) {
|
|
|
|
-
|
|
|
|
- var length = objectInfluences.length;
|
|
|
|
-
|
|
|
|
- var influences = influencesList[ geometry.id ];
|
|
|
|
-
|
|
|
|
- if ( influences === undefined ) {
|
|
|
|
-
|
|
|
|
- // initialise list
|
|
|
|
-
|
|
|
|
- influences = [];
|
|
|
|
-
|
|
|
|
- for ( var i = 0; i < length; i ++ ) {
|
|
|
|
-
|
|
|
|
- influences[ i ] = [ i, 0 ];
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- influencesList[ geometry.id ] = influences;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var morphTargets = material.morphTargets && geometry.morphAttributes.position;
|
|
|
|
- var morphNormals = material.morphNormals && geometry.morphAttributes.normal;
|
|
|
|
-
|
|
|
|
- // Remove current morphAttributes
|
|
|
|
-
|
|
|
|
- for ( var i = 0; i < length; i ++ ) {
|
|
|
|
-
|
|
|
|
- var influence = influences[ i ];
|
|
|
|
-
|
|
|
|
- if ( influence[ 1 ] !== 0 ) {
|
|
|
|
-
|
|
|
|
- if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );
|
|
|
|
- if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Collect influences
|
|
|
|
-
|
|
|
|
- for ( var i = 0; i < length; i ++ ) {
|
|
|
|
-
|
|
|
|
- var influence = influences[ i ];
|
|
|
|
-
|
|
|
|
- influence[ 0 ] = i;
|
|
|
|
- influence[ 1 ] = objectInfluences[ i ];
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- influences.sort( absNumericalSort );
|
|
|
|
-
|
|
|
|
- // Add morphAttributes
|
|
|
|
-
|
|
|
|
- for ( var i = 0; i < 8; i ++ ) {
|
|
|
|
-
|
|
|
|
- var influence = influences[ i ];
|
|
|
|
-
|
|
|
|
- if ( influence ) {
|
|
|
|
-
|
|
|
|
- var index = influence[ 0 ];
|
|
|
|
- var value = influence[ 1 ];
|
|
|
|
-
|
|
|
|
- if ( value ) {
|
|
|
|
-
|
|
|
|
- if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );
|
|
|
|
- if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );
|
|
|
|
-
|
|
|
|
- morphInfluences[ i ] = value;
|
|
|
|
- continue;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- morphInfluences[ i ] = 0;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ if ( object.morphTargetInfluences ) {
|
|
|
|
|
|
- program.getUniforms().setValue( _gl, 'morphTargetInfluences', morphInfluences );
|
|
|
|
|
|
+ morphtargets.update( object, geometry, material, program );
|
|
|
|
|
|
updateBuffers = true;
|
|
updateBuffers = true;
|
|
|
|
|