|
@@ -3680,80 +3680,85 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
object._modelViewMatrix = new THREE.Matrix4();
|
|
|
object._normalMatrix = new THREE.Matrix3();
|
|
|
|
|
|
- if ( object.geometry !== undefined && object.geometry.__webglInit === undefined ) {
|
|
|
+ geometry = object.geometry;
|
|
|
+
|
|
|
+ if ( geometry === undefined ) {
|
|
|
|
|
|
- object.geometry.__webglInit = true;
|
|
|
- object.geometry.addEventListener( 'dispose', onGeometryDispose );
|
|
|
+ // TODO: Hacky...
|
|
|
+
|
|
|
+ object.__webglActive = true;
|
|
|
+ return;
|
|
|
|
|
|
}
|
|
|
|
|
|
- geometry = object.geometry;
|
|
|
+ if ( geometry.__webglInit === undefined ) {
|
|
|
|
|
|
- if ( geometry === undefined ) {
|
|
|
+ geometry.__webglInit = true;
|
|
|
+ geometry.addEventListener( 'dispose', onGeometryDispose );
|
|
|
|
|
|
- // fail silently for now
|
|
|
+ if ( geometry instanceof THREE.BufferGeometry ) {
|
|
|
|
|
|
- } else if ( geometry instanceof THREE.BufferGeometry ) {
|
|
|
+ initDirectBuffers( geometry );
|
|
|
|
|
|
- initDirectBuffers( geometry );
|
|
|
+ } else if ( object instanceof THREE.Mesh ) {
|
|
|
|
|
|
- } else if ( object instanceof THREE.Mesh ) {
|
|
|
+ material = object.material;
|
|
|
|
|
|
- material = object.material;
|
|
|
+ if ( geometry.geometryGroups === undefined ) {
|
|
|
|
|
|
- if ( geometry.geometryGroups === undefined ) {
|
|
|
+ geometry.makeGroups( material instanceof THREE.MeshFaceMaterial, _glExtensionElementIndexUint ? 4294967296 : 65535 );
|
|
|
|
|
|
- geometry.makeGroups( material instanceof THREE.MeshFaceMaterial, _glExtensionElementIndexUint ? 4294967296 : 65535 );
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
+ // create separate VBOs per geometry chunk
|
|
|
|
|
|
- // create separate VBOs per geometry chunk
|
|
|
+ for ( g in geometry.geometryGroups ) {
|
|
|
|
|
|
- for ( g in geometry.geometryGroups ) {
|
|
|
+ geometryGroup = geometry.geometryGroups[ g ];
|
|
|
|
|
|
- geometryGroup = geometry.geometryGroups[ g ];
|
|
|
+ // initialise VBO on the first access
|
|
|
|
|
|
- // initialise VBO on the first access
|
|
|
+ if ( ! geometryGroup.__webglVertexBuffer ) {
|
|
|
|
|
|
- if ( ! geometryGroup.__webglVertexBuffer ) {
|
|
|
+ createMeshBuffers( geometryGroup );
|
|
|
+ initMeshBuffers( geometryGroup, object );
|
|
|
|
|
|
- createMeshBuffers( geometryGroup );
|
|
|
- initMeshBuffers( geometryGroup, object );
|
|
|
+ geometry.verticesNeedUpdate = true;
|
|
|
+ geometry.morphTargetsNeedUpdate = true;
|
|
|
+ geometry.elementsNeedUpdate = true;
|
|
|
+ geometry.uvsNeedUpdate = true;
|
|
|
+ geometry.normalsNeedUpdate = true;
|
|
|
+ geometry.tangentsNeedUpdate = true;
|
|
|
+ geometry.colorsNeedUpdate = true;
|
|
|
|
|
|
- geometry.verticesNeedUpdate = true;
|
|
|
- geometry.morphTargetsNeedUpdate = true;
|
|
|
- geometry.elementsNeedUpdate = true;
|
|
|
- geometry.uvsNeedUpdate = true;
|
|
|
- geometry.normalsNeedUpdate = true;
|
|
|
- geometry.tangentsNeedUpdate = true;
|
|
|
- geometry.colorsNeedUpdate = true;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
+ } else if ( object instanceof THREE.Line ) {
|
|
|
|
|
|
- } else if ( object instanceof THREE.Line ) {
|
|
|
+ if ( ! geometry.__webglVertexBuffer ) {
|
|
|
|
|
|
- if ( ! geometry.__webglVertexBuffer ) {
|
|
|
+ createLineBuffers( geometry );
|
|
|
+ initLineBuffers( geometry, object );
|
|
|
|
|
|
- createLineBuffers( geometry );
|
|
|
- initLineBuffers( geometry, object );
|
|
|
+ geometry.verticesNeedUpdate = true;
|
|
|
+ geometry.colorsNeedUpdate = true;
|
|
|
+ geometry.lineDistancesNeedUpdate = true;
|
|
|
|
|
|
- geometry.verticesNeedUpdate = true;
|
|
|
- geometry.colorsNeedUpdate = true;
|
|
|
- geometry.lineDistancesNeedUpdate = true;
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
+ } else if ( object instanceof THREE.ParticleSystem ) {
|
|
|
|
|
|
- } else if ( object instanceof THREE.ParticleSystem ) {
|
|
|
+ if ( ! geometry.__webglVertexBuffer ) {
|
|
|
|
|
|
- if ( ! geometry.__webglVertexBuffer ) {
|
|
|
+ createParticleBuffers( geometry );
|
|
|
+ initParticleBuffers( geometry, object );
|
|
|
|
|
|
- createParticleBuffers( geometry );
|
|
|
- initParticleBuffers( geometry, object );
|
|
|
+ geometry.verticesNeedUpdate = true;
|
|
|
+ geometry.colorsNeedUpdate = true;
|
|
|
|
|
|
- geometry.verticesNeedUpdate = true;
|
|
|
- geometry.colorsNeedUpdate = true;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|