提交 ddbbcae1 编写于 作者: O OpenShift guest

fix the hack __webglInit for geometry that needs buffer updates.

上级 3a3c3e5c
......@@ -47,7 +47,7 @@ Menubar.Edit = function ( editor ) {
if ( confirm( 'Convert ' + object.name + ' to BufferGeometry?' ) === false ) return;
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring) This is not yet fixed for buffergeometry
object.geometry = new THREE.BufferGeometry().fromGeometry( object.geometry );
......@@ -65,17 +65,19 @@ Menubar.Edit = function ( editor ) {
if ( confirm( 'Flatten ' + object.name + '?' ) === false ) return;
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
var geometry = object.geometry.clone();
geometry.applyMatrix( object.matrix );
object.geometry = geometry;
object.position.set( 0, 0, 0 );
object.rotation.set( 0, 0, 0 );
object.scale.set( 1, 1, 1 );
object.geometry.buffersNeedUpdate = true;
editor.signals.objectChanged.dispatch( object );
}
......
......@@ -68,7 +68,7 @@ Sidebar.Geometry.BoxGeometry = function ( signals, object ) {
function update() {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
object.geometry.dispose();
......@@ -81,6 +81,7 @@ Sidebar.Geometry.BoxGeometry = function ( signals, object ) {
depthSegments.getValue()
);
object.geometry.buffersNeedUpdate = true;
object.geometry.computeBoundingSphere();
signals.objectChanged.dispatch( object );
......
......@@ -28,7 +28,7 @@ Sidebar.Geometry.CircleGeometry = function ( signals, object ) {
function update() {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
object.geometry.dispose();
......@@ -36,7 +36,7 @@ Sidebar.Geometry.CircleGeometry = function ( signals, object ) {
radius.getValue(),
segments.getValue()
);
object.geometry.buffersNeedUpdate = true;
object.geometry.computeBoundingSphere();
signals.objectChanged.dispatch( object );
......
......@@ -68,7 +68,7 @@ Sidebar.Geometry.CylinderGeometry = function ( signals, object ) {
function update() {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
object.geometry.dispose();
......@@ -81,6 +81,7 @@ Sidebar.Geometry.CylinderGeometry = function ( signals, object ) {
openEnded.getValue()
);
object.geometry.buffersNeedUpdate = true;
object.geometry.computeBoundingSphere();
signals.objectChanged.dispatch( object );
......
......@@ -29,7 +29,7 @@ Sidebar.Geometry.IcosahedronGeometry = function ( signals, object ) {
function update() {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
object.geometry.dispose();
......@@ -38,6 +38,7 @@ Sidebar.Geometry.IcosahedronGeometry = function ( signals, object ) {
detail.getValue()
);
object.geometry.buffersNeedUpdate = true;
object.geometry.computeBoundingSphere();
signals.objectChanged.dispatch( object );
......
......@@ -49,7 +49,7 @@ Sidebar.Geometry.PlaneGeometry = function ( signals, object ) {
function update() {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
object.geometry.dispose();
......@@ -60,6 +60,7 @@ Sidebar.Geometry.PlaneGeometry = function ( signals, object ) {
heightSegments.getValue()
);
object.geometry.buffersNeedUpdate = true;
object.geometry.computeBoundingSphere();
signals.objectChanged.dispatch( object );
......
......@@ -79,7 +79,7 @@ Sidebar.Geometry.SphereGeometry = function ( signals, object ) {
function update() {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
object.geometry.dispose();
......@@ -93,6 +93,7 @@ Sidebar.Geometry.SphereGeometry = function ( signals, object ) {
thetaLength.getValue()
);
object.geometry.buffersNeedUpdate = true;
object.geometry.computeBoundingSphere();
signals.objectChanged.dispatch( object );
......
......@@ -59,7 +59,7 @@ Sidebar.Geometry.TorusGeometry = function ( signals, object ) {
function update() {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
object.geometry.dispose();
......@@ -71,6 +71,7 @@ Sidebar.Geometry.TorusGeometry = function ( signals, object ) {
arc.getValue()
);
object.geometry.buffersNeedUpdate = true;
object.geometry.computeBoundingSphere();
signals.objectChanged.dispatch( object );
......
......@@ -79,7 +79,7 @@ Sidebar.Geometry.TorusKnotGeometry = function ( signals, object ) {
function update() {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
//delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
object.geometry.dispose();
......@@ -93,6 +93,7 @@ Sidebar.Geometry.TorusKnotGeometry = function ( signals, object ) {
heightScale.getValue()
);
object.geometry.buffersNeedUpdate = true;
object.geometry.computeBoundingSphere();
signals.objectChanged.dispatch( object );
......
......@@ -3680,7 +3680,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
updateObject( object );
updateObject(scene, object );
}
......@@ -3690,7 +3690,7 @@ THREE.WebGLRenderer = function ( parameters ) {
function addObject( object, scene ) {
var g, geometry, material, geometryGroup;
var g, geometry, geometryGroup;
if ( object.__webglInit === undefined ) {
......@@ -3715,39 +3715,14 @@ THREE.WebGLRenderer = function ( parameters ) {
initDirectBuffers( geometry );
} else if ( object instanceof THREE.Mesh ) {
if ( object.__webglActive !== undefined ) {
material = object.material;
if ( geometry.geometryGroups === undefined ) {
geometry.makeGroups( material instanceof THREE.MeshFaceMaterial, _glExtensionElementIndexUint ? 4294967296 : 65535 );
}
// create separate VBOs per geometry chunk
for ( g in geometry.geometryGroups ) {
geometryGroup = geometry.geometryGroups[ g ];
// initialise VBO on the first access
if ( ! geometryGroup.__webglVertexBuffer ) {
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;
}
removeObject( object, scene );
}
initGeometryGroups(scene, object, geometry);
} else if ( object instanceof THREE.Line ) {
......@@ -3790,16 +3765,6 @@ THREE.WebGLRenderer = function ( parameters ) {
addBuffer( scene.__webglObjects, geometry, object );
} else if ( geometry instanceof THREE.Geometry ) {
for ( g in geometry.geometryGroups ) {
geometryGroup = geometry.geometryGroups[ g ];
addBuffer( scene.__webglObjects, geometryGroup, object );
}
}
} else if ( object instanceof THREE.Line ||
......@@ -3827,6 +3792,54 @@ THREE.WebGLRenderer = function ( parameters ) {
}
};
function initGeometryGroups(scene,object,geometry) {
var g, geometryGroup, material,addBuffers = false;
material = object.material;
if ( geometry.geometryGroups === undefined ) {
geometry.makeGroups( material instanceof THREE.MeshFaceMaterial, _glExtensionElementIndexUint ? 4294967296 : 65535 );
}
// create separate VBOs per geometry chunk
for ( g in geometry.geometryGroups ) {
geometryGroup = geometry.geometryGroups[ g ];
// initialise VBO on the first access
if ( ! geometryGroup.__webglVertexBuffer ) {
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;
addBuffers = true;
} else {
addBuffers = false;
}
if ( addBuffers || object.__webglActive === undefined ) {
addBuffer( scene.__webglObjects, geometryGroup, object );
}
}
object.__webglActive = true;
}
function addBuffer( objlist, buffer, object ) {
......@@ -3859,7 +3872,7 @@ THREE.WebGLRenderer = function ( parameters ) {
// Objects updates
function updateObject( object ) {
function updateObject(scene, object ) {
var geometry = object.geometry,
geometryGroup, customAttributesDirty, material;
......@@ -3871,6 +3884,9 @@ THREE.WebGLRenderer = function ( parameters ) {
} else if ( object instanceof THREE.Mesh ) {
// check all geometry groups
if ( geometry.buffersNeedUpdate ) {
initGeometryGroups(scene, object,geometry);
}
for ( var i = 0, il = geometry.geometryGroupsList.length; i < il; i ++ ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册