|
@@ -669,18 +669,18 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
state.initAttributes();
|
|
|
|
|
|
- var objectProperties = properties.get( object );
|
|
|
+ var buffers = properties.get( object );
|
|
|
|
|
|
- if ( object.hasPositions && ! objectProperties.__webglVertexBuffer ) objectProperties.__webglVertexBuffer = _gl.createBuffer();
|
|
|
- if ( object.hasNormals && ! objectProperties.__webglNormalBuffer ) objectProperties.__webglNormalBuffer = _gl.createBuffer();
|
|
|
- if ( object.hasUvs && ! objectProperties.__webglUvBuffer ) objectProperties.__webglUvBuffer = _gl.createBuffer();
|
|
|
- if ( object.hasColors && ! objectProperties.__webglColorBuffer ) objectProperties.__webglColorBuffer = _gl.createBuffer();
|
|
|
+ if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();
|
|
|
+ if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();
|
|
|
+ if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();
|
|
|
+ if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();
|
|
|
|
|
|
var attributes = program.getAttributes();
|
|
|
|
|
|
if ( object.hasPositions ) {
|
|
|
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, objectProperties.__webglVertexBuffer );
|
|
|
+ _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );
|
|
|
_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );
|
|
|
|
|
|
state.enableAttribute( attributes.position );
|
|
@@ -690,7 +690,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( object.hasNormals ) {
|
|
|
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, objectProperties.__webglNormalBuffer );
|
|
|
+ _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );
|
|
|
|
|
|
if ( material instanceof THREE.MeshPhongMaterial === false && material.shading === THREE.FlatShading ) {
|
|
|
|
|
@@ -745,7 +745,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( object.hasUvs && material.map ) {
|
|
|
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, objectProperties.__webglUvBuffer );
|
|
|
+ _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );
|
|
|
_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );
|
|
|
|
|
|
state.enableAttribute( attributes.uv );
|
|
@@ -756,7 +756,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( object.hasColors && material.vertexColors !== THREE.NoColors ) {
|
|
|
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, objectProperties.__webglColorBuffer );
|
|
|
+ _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );
|
|
|
_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );
|
|
|
|
|
|
state.enableAttribute( attributes.color );
|
|
@@ -1597,13 +1597,13 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
state.setBlending( THREE.NoBlending );
|
|
|
|
|
|
- renderObjects( opaqueObjects, camera, lights, fog, null );
|
|
|
- renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog, null );
|
|
|
+ renderObjects( opaqueObjects, camera, lights, fog );
|
|
|
+ renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog );
|
|
|
|
|
|
// transparent pass (back-to-front order)
|
|
|
|
|
|
- renderObjects( transparentObjects, camera, lights, fog, null );
|
|
|
- renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog, null );
|
|
|
+ renderObjects( transparentObjects, camera, lights, fog );
|
|
|
+ renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1739,7 +1739,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
setupMatrices( object, camera );
|
|
|
|
|
|
- if ( overrideMaterial === null ) material = object.material;
|
|
|
+ if ( overrideMaterial === undefined ) material = object.material;
|
|
|
|
|
|
_this.renderBufferDirect( camera, lights, fog, material, object );
|
|
|
|
|
@@ -1757,33 +1757,23 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
setupMatrices( object, camera );
|
|
|
|
|
|
- if ( object.visible === true ) {
|
|
|
+ if ( overrideMaterial === undefined ) material = object.material;
|
|
|
|
|
|
- if ( overrideMaterial === null ) material = object.material;
|
|
|
+ setMaterial( material );
|
|
|
|
|
|
- _this.renderImmediateObject( camera, lights, fog, material, object );
|
|
|
+ var program = setProgram( camera, lights, fog, material, object );
|
|
|
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- this.renderImmediateObject = function ( camera, lights, fog, material, object ) {
|
|
|
-
|
|
|
- setMaterial( material );
|
|
|
-
|
|
|
- var program = setProgram( camera, lights, fog, material, object );
|
|
|
+ _currentGeometryProgram = '';
|
|
|
|
|
|
- _currentGeometryProgram = '';
|
|
|
+ object.render( function ( object ) {
|
|
|
|
|
|
- object.render( function ( object ) {
|
|
|
+ _this.renderBufferImmediate( object, program, material );
|
|
|
|
|
|
- _this.renderBufferImmediate( object, program, material );
|
|
|
+ } );
|
|
|
|
|
|
- } );
|
|
|
+ }
|
|
|
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
// Materials
|
|
|
|