mirror of
https://github.com/storytold/spark.git
synced 2026-10-18 07:40:38 +00:00
Use RenderTarget properties to reduce manual render state tracking (#80)
This commit is contained in:
+8
-15
@@ -357,6 +357,7 @@ export class PackedSplats {
|
|||||||
this.target.texture.format = THREE.RGBAIntegerFormat;
|
this.target.texture.format = THREE.RGBAIntegerFormat;
|
||||||
this.target.texture.type = THREE.UnsignedIntType;
|
this.target.texture.type = THREE.UnsignedIntType;
|
||||||
this.target.texture.internalFormat = "RGBA32UI";
|
this.target.texture.internalFormat = "RGBA32UI";
|
||||||
|
this.target.scissorTest = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -503,27 +504,21 @@ export class PackedSplats {
|
|||||||
|
|
||||||
private saveRenderState(renderer: THREE.WebGLRenderer) {
|
private saveRenderState(renderer: THREE.WebGLRenderer) {
|
||||||
return {
|
return {
|
||||||
xrPresenting: renderer.xr.isPresenting,
|
xrEnabled: renderer.xr.enabled,
|
||||||
autoClear: renderer.autoClear,
|
autoClear: renderer.autoClear,
|
||||||
scissorTest: renderer.getScissorTest(),
|
|
||||||
pixelRatio: renderer.getPixelRatio(),
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private resetRenderState(
|
private resetRenderState(
|
||||||
renderer: THREE.WebGLRenderer,
|
renderer: THREE.WebGLRenderer,
|
||||||
state: {
|
state: {
|
||||||
xrPresenting: boolean;
|
xrEnabled: boolean;
|
||||||
autoClear: boolean;
|
autoClear: boolean;
|
||||||
scissorTest: boolean;
|
|
||||||
pixelRatio: number;
|
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
renderer.setRenderTarget(null);
|
renderer.setRenderTarget(null);
|
||||||
renderer.setPixelRatio(state.pixelRatio);
|
renderer.xr.enabled = state.xrEnabled;
|
||||||
renderer.xr.isPresenting = state.xrPresenting;
|
|
||||||
renderer.autoClear = state.autoClear;
|
renderer.autoClear = state.autoClear;
|
||||||
renderer.setScissorTest(state.scissorTest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Executes a dyno program specified by generator which is any DynoBlock that
|
// 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
|
// Render the desired portion of the layer
|
||||||
renderer.setPixelRatio(1);
|
this.target.scissor.set(
|
||||||
renderer.setRenderTarget(this.target, layer);
|
|
||||||
renderer.xr.isPresenting = false;
|
|
||||||
renderer.autoClear = false;
|
|
||||||
renderer.setScissorTest(true);
|
|
||||||
renderer.setScissor(
|
|
||||||
0,
|
0,
|
||||||
layerYStart,
|
layerYStart,
|
||||||
SPLAT_TEX_WIDTH,
|
SPLAT_TEX_WIDTH,
|
||||||
layerYEnd - layerYStart,
|
layerYEnd - layerYStart,
|
||||||
);
|
);
|
||||||
|
renderer.setRenderTarget(this.target, layer);
|
||||||
|
renderer.xr.enabled = false;
|
||||||
|
renderer.autoClear = false;
|
||||||
renderer.render(PackedSplats.scene, PackedSplats.camera);
|
renderer.render(PackedSplats.scene, PackedSplats.camera);
|
||||||
|
|
||||||
base += SPLAT_TEX_WIDTH * (layerYEnd - layerYStart);
|
base += SPLAT_TEX_WIDTH * (layerYEnd - layerYStart);
|
||||||
|
|||||||
+6
-14
@@ -84,6 +84,7 @@ export class Readback {
|
|||||||
this.target.texture.format = THREE.RGBAFormat;
|
this.target.texture.format = THREE.RGBAFormat;
|
||||||
this.target.texture.type = THREE.UnsignedByteType;
|
this.target.texture.type = THREE.UnsignedByteType;
|
||||||
this.target.texture.internalFormat = "RGBA8";
|
this.target.texture.internalFormat = "RGBA8";
|
||||||
|
this.target.scissorTest = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,27 +130,21 @@ export class Readback {
|
|||||||
|
|
||||||
private saveRenderState(renderer: THREE.WebGLRenderer) {
|
private saveRenderState(renderer: THREE.WebGLRenderer) {
|
||||||
return {
|
return {
|
||||||
xrPresenting: renderer.xr.isPresenting,
|
xrEnabled: renderer.xr.enabled,
|
||||||
autoClear: renderer.autoClear,
|
autoClear: renderer.autoClear,
|
||||||
scissorTest: renderer.getScissorTest(),
|
|
||||||
pixelRatio: renderer.getPixelRatio(),
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private resetRenderState(
|
private resetRenderState(
|
||||||
renderer: THREE.WebGLRenderer,
|
renderer: THREE.WebGLRenderer,
|
||||||
state: {
|
state: {
|
||||||
xrPresenting: boolean;
|
xrEnabled: boolean;
|
||||||
autoClear: boolean;
|
autoClear: boolean;
|
||||||
scissorTest: boolean;
|
|
||||||
pixelRatio: number;
|
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
renderer.setRenderTarget(null);
|
renderer.setRenderTarget(null);
|
||||||
renderer.setPixelRatio(state.pixelRatio);
|
renderer.xr.enabled = state.xrEnabled;
|
||||||
renderer.xr.isPresenting = state.xrPresenting;
|
|
||||||
renderer.autoClear = state.autoClear;
|
renderer.autoClear = state.autoClear;
|
||||||
renderer.setScissorTest(state.scissorTest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private process({
|
private process({
|
||||||
@@ -182,12 +177,10 @@ export class Readback {
|
|||||||
material.uniforms.targetLayer.value = layer;
|
material.uniforms.targetLayer.value = layer;
|
||||||
|
|
||||||
// Render the desired portion of the layer
|
// Render the desired portion of the layer
|
||||||
renderer.setPixelRatio(1);
|
this.target.scissor.set(0, 0, SPLAT_TEX_WIDTH, layerYEnd);
|
||||||
renderer.setRenderTarget(this.target, layer);
|
renderer.setRenderTarget(this.target, layer);
|
||||||
renderer.xr.isPresenting = false;
|
renderer.xr.enabled = false;
|
||||||
renderer.autoClear = false;
|
renderer.autoClear = false;
|
||||||
renderer.setScissorTest(true);
|
|
||||||
renderer.setScissor(0, 0, SPLAT_TEX_WIDTH, layerYEnd);
|
|
||||||
renderer.render(Readback.scene, Readback.camera);
|
renderer.render(Readback.scene, Readback.camera);
|
||||||
|
|
||||||
baseIndex += SPLAT_TEX_WIDTH * layerYEnd;
|
baseIndex += SPLAT_TEX_WIDTH * layerYEnd;
|
||||||
@@ -234,7 +227,6 @@ export class Readback {
|
|||||||
Math.ceil((this.count - layerBase) / SPLAT_TEX_WIDTH),
|
Math.ceil((this.count - layerBase) / SPLAT_TEX_WIDTH),
|
||||||
);
|
);
|
||||||
|
|
||||||
renderer.setPixelRatio(1);
|
|
||||||
renderer.setRenderTarget(this.target, layer);
|
renderer.setRenderTarget(this.target, layer);
|
||||||
|
|
||||||
// Compute the subarray that this layer of readback corresponds to
|
// Compute the subarray that this layer of readback corresponds to
|
||||||
|
|||||||
Reference in New Issue
Block a user