Skip to content

Commit

Permalink
WebGPUReneder: add BundleGroup (#29277)
Browse files Browse the repository at this point in the history
Co-authored-by: aardgoose <angus.sawyer@email.com>
  • Loading branch information
aardgoose and aardgoose authored Aug 30, 2024
1 parent 328c836 commit 701c101
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 9 deletions.
3 changes: 1 addition & 2 deletions examples/webgpu_performance_renderbundle.html
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,7 @@

function initRegularMesh( count ) {

group = new THREE.Group();
group.static = api.renderBundle;
group = api.renderBundle ? new THREE.BundleGroup() : new THREE.Group();

for ( let i = 0; i < count; i ++ ) {

Expand Down
1 change: 1 addition & 0 deletions src/Three.WebGPU.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ export * from './Three.Legacy.js';

export * from './materials/nodes/NodeMaterials.js';
export { default as WebGPURenderer } from './renderers/webgpu/WebGPURenderer.js';
export { default as BundleGroup } from './renderers/common/BundleGroup.js';
export { default as QuadMesh } from './renderers/common/QuadMesh.js';
export { default as PMREMGenerator } from './renderers/common/extras/PMREMGenerator.js';
export { default as PostProcessing } from './renderers/common/PostProcessing.js';
Expand Down
17 changes: 17 additions & 0 deletions src/renderers/common/BundleGroup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Group } from '../../objects/Group.js';

class BundleGroup extends Group {

constructor() {

super();

this.isBundleGroup = true;

this.type = 'BundleGroup';

}

}

export default BundleGroup;
14 changes: 7 additions & 7 deletions src/renderers/common/Renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -407,28 +407,28 @@ class Renderer {

_renderBundle( bundle, sceneRef, lightsNode ) {

const { object, camera, renderList } = bundle;
const { bundleGroup, camera, renderList } = bundle;

const renderContext = this._currentRenderContext;

//

const renderBundle = this._bundles.get( object, camera );
const renderBundle = this._bundles.get( bundleGroup, camera );
const renderBundleData = this.backend.get( renderBundle );

if ( renderBundleData.renderContexts === undefined ) renderBundleData.renderContexts = new Set();

//

const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || object.needsUpdate === true;
const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || bundleGroup.needsUpdate === true;

renderBundleData.renderContexts.add( renderContext );

if ( renderBundleNeedsUpdate ) {

this.backend.beginBundle( renderContext );

if ( renderBundleData.renderObjects === undefined || object.needsUpdate === true ) {
if ( renderBundleData.renderObjects === undefined || bundleGroup.needsUpdate === true ) {

renderBundleData.renderObjects = [];

Expand All @@ -446,7 +446,7 @@ class Renderer {

this.backend.finishBundle( renderContext, renderBundle );

object.needsUpdate = false;
bundleGroup.needsUpdate = false;

} else {

Expand Down Expand Up @@ -1360,7 +1360,7 @@ class Renderer {

}

if ( object.static === true && this.backend.beginBundle !== undefined ) {
if ( object.isBundleGroup === true && this.backend.beginBundle !== undefined ) {

const baseRenderList = renderList;

Expand All @@ -1370,7 +1370,7 @@ class Renderer {
renderList.begin();

baseRenderList.pushBundle( {
object,
bundleGroup: object,
camera,
renderList,
} );
Expand Down

0 comments on commit 701c101

Please sign in to comment.