Skip to content

Commit

Permalink
BatchedMesh: cleanup, add maxGeometryCount member (mrdoob#27231)
Browse files Browse the repository at this point in the history
* Linting, add maxGeometryCount to BatchedMesh, remove undocumented functions

* BatchedMesh: Update documentation
  • Loading branch information
gkjohnson authored and AdaRoseCannon committed Jan 15, 2024
1 parent b863828 commit b23757c
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 43 deletions.
27 changes: 26 additions & 1 deletion docs/api/en/objects/BatchedMesh.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,29 @@ <h1>[name]</h1>
<br/>
<br/>

Requires platform support for the [link:https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_multi_draw WEBGL_multi_draw extension].
If the [link:https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_multi_draw WEBGL_multi_draw extension] is
not supported then a less performant callback is used.
</p>

<h2>Code Example</h2>

<code>
const box = new THREE.BoxGeometry( 1, 1, 1 );
const sphere = new THREE.BoxGeometry( 1, 1, 1 );
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );

// initialize and add geometries into the batched mesh
const batchedMesh = new BatchedMesh( 10, 5000, 10000, material );
const boxId = batchedMesh.addGeometry( box );
const sphereId = batchedMesh.addGeometry( sphere );

// position the geometries
batchedMesh.setMatrixAt( boxId, boxMatrix );
batchedMesh.setMatrixAt( sphereId, sphereMatrix );

scene.add( batchedMesh );
</code>

<h2>Examples</h2>
<p>
[example:webgl_mesh_batch WebGL / mesh / batch]<br />
Expand Down Expand Up @@ -71,6 +91,11 @@ <h3>[property:Boolean sortObjects]</h3>
rendered front to back. Default is `true`.
</p>

<h3>[property:Integer maxGeometryCount]</h3>
<p>
The maximum number of individual geometries that can be stored in the [name]. Read only.
</p>

<h3>[property:Boolean isBatchedMesh]</h3>
<p>Read-only flag to check if a given object is of type [name].</p>

Expand Down
6 changes: 3 additions & 3 deletions examples/webgl_mesh_batch.html
Original file line number Diff line number Diff line change
Expand Up @@ -287,17 +287,17 @@
// initialize options
this._options = this._options || {
get: el => el.z,
aux: new Array( this._maxGeometryCount )
aux: new Array( this.maxGeometryCount )
};

const options = this._options;
options.reversed = this.material.transparent;

// convert depth to unsigned 32 bit range
const factor = ( 2**32 - 1 ) / camera.far; // UINT32_MAX / max_depth
const factor = ( 2 ** 32 - 1 ) / camera.far; // UINT32_MAX / max_depth
for ( let i = 0, l = list.length; i < l; i ++ ) {

list[i].z *= factor;
list[ i ].z *= factor;

}

Expand Down
45 changes: 6 additions & 39 deletions src/objects/BatchedMesh.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,12 @@ function copyAttributeData( src, target, targetOffset = 0 ) {

class BatchedMesh extends Mesh {

get maxGeometryCount() {

return this._maxGeometryCount;

}

constructor( maxGeometryCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {

super( new BufferGeometry(), material );
Expand Down Expand Up @@ -262,45 +268,6 @@ class BatchedMesh extends Mesh {

}

getGeometryCount() {

return this._geometryCount;

}

getVertexCount() {

const reservedRanges = this._reservedRanges;
if ( reservedRanges.length === 0 ) {

return 0;

} else {

const finalRange = reservedRanges[ reservedRanges.length - 1 ];
return finalRange.vertexStart + finalRange.vertexCount;

}

}

getIndexCount() {

const reservedRanges = this._reservedRanges;
const geometry = this.geometry;
if ( geometry.getIndex() === null || reservedRanges.length === 0 ) {

return 0;

} else {

const finalRange = reservedRanges[ reservedRanges.length - 1 ];
return finalRange.indexStart + finalRange.indexCount;

}

}

setCustomSort( func ) {

this.customSort = func;
Expand Down

0 comments on commit b23757c

Please sign in to comment.