Use RenderTarget properties to reduce manual render state tracking (#80)

This commit is contained in:
Noeri Huisman
2025-07-01 07:26:17 +02:00
committed by GitHub
parent f95eb494f0
commit fe3430000d
2 changed files with 14 additions and 29 deletions
+8 -15
View File
@@ -357,6 +357,7 @@ export class PackedSplats {
this.target.texture.format = THREE.RGBAIntegerFormat;
this.target.texture.type = THREE.UnsignedIntType;
this.target.texture.internalFormat = "RGBA32UI";
this.target.scissorTest = true;
return true;
}
@@ -503,27 +504,21 @@ export class PackedSplats {
private saveRenderState(renderer: THREE.WebGLRenderer) {
return {
xrPresenting: renderer.xr.isPresenting,
xrEnabled: renderer.xr.enabled,
autoClear: renderer.autoClear,
scissorTest: renderer.getScissorTest(),
pixelRatio: renderer.getPixelRatio(),
};
}
private resetRenderState(
renderer: THREE.WebGLRenderer,
state: {
xrPresenting: boolean;
xrEnabled: boolean;
autoClear: boolean;
scissorTest: boolean;
pixelRatio: number;
},
) {
renderer.setRenderTarget(null);
renderer.setPixelRatio(state.pixelRatio);
renderer.xr.isPresenting = state.xrPresenting;
renderer.xr.enabled = state.xrEnabled;
renderer.autoClear = state.autoClear;
renderer.setScissorTest(state.scissorTest);
}
// Executes a dyno program specified by generator which is any DynoBlock that
@@ -575,17 +570,15 @@ export class PackedSplats {
);
// Render the desired portion of the layer
renderer.setPixelRatio(1);
renderer.setRenderTarget(this.target, layer);
renderer.xr.isPresenting = false;
renderer.autoClear = false;
renderer.setScissorTest(true);
renderer.setScissor(
this.target.scissor.set(
0,
layerYStart,
SPLAT_TEX_WIDTH,
layerYEnd - layerYStart,
);
renderer.setRenderTarget(this.target, layer);
renderer.xr.enabled = false;
renderer.autoClear = false;
renderer.render(PackedSplats.scene, PackedSplats.camera);
base += SPLAT_TEX_WIDTH * (layerYEnd - layerYStart);