update TextureProjection

This commit is contained in:
Nick Fisher
2025-03-28 10:01:49 +08:00
parent 289749115b
commit 54a0a0befb
2 changed files with 13 additions and 8 deletions

View File

@@ -42,7 +42,7 @@ class TextureProjection {
await depthWriteView.setFrustumCullingEnabled(false);
await depthWriteView.setPostProcessing(false);
await depthWriteView.setViewport(viewport.width, viewport.height);
await depthWriteView.setBlendMode(BlendMode.opaque);
await depthWriteView.setBlendMode(BlendMode.transparent);
final depthWriteColorTexture = await FilamentApp.instance!
.createTexture(viewport.width, viewport.height,
@@ -81,9 +81,6 @@ class TextureProjection {
await projectionView.setPostProcessing(false);
await projectionView.setViewport(viewport.width, viewport.height);
await FilamentApp.instance!.register(swapChain, depthWriteView);
await FilamentApp.instance!.register(swapChain, projectionView);
return TextureProjection._(
sourceView: sourceView,
swapChain: swapChain,
@@ -104,11 +101,16 @@ class TextureProjection {
}
var _pixelBuffers = <View, Uint8List>{};
Uint8List getColorBuffer() => _pixelBuffers[sourceView]!;
Uint8List getDepthWritePixelBuffer() => _pixelBuffers[depthView]!;
Uint8List getProjectedPixelBuffer() => _pixelBuffers[projectionView]!;
Future project(ThermionAsset target) async {
final originalMi = await target.getMaterialInstanceAt();
await FilamentApp.instance!.register(swapChain, depthView);
await FilamentApp.instance!.register(swapChain, projectionView);
final camera = await sourceView.getCamera();
await depthView.setCamera(camera);
await projectionView.setCamera(camera);
@@ -121,8 +123,6 @@ class TextureProjection {
await depthView.setRenderOrder(1);
await projectionView.setRenderOrder(2);
var originalMi = await target.getMaterialInstanceAt();
var pixelBuffers = await FilamentApp.instance!.capture(swapChain,
beforeRender: (view) async {
if (view == depthView) {
@@ -141,5 +141,10 @@ class TextureProjection {
for (final (view, pixelBuffer) in pixelBuffers) {
_pixelBuffers[view] = pixelBuffer;
}
await FilamentApp.instance!.unregister(swapChain, depthView);
await FilamentApp.instance!.unregister(swapChain, projectionView);
await target.setMaterialInstanceAt(originalMi);
}
}

View File

@@ -8,7 +8,7 @@ void main() async {
group("lights", () {
test('add/clear point light', () async {
await testHelper.withViewer((viewer) async {
await viewer.loadGlb("file://${testHelper.testDir}/assets/cube.glb");
await viewer.loadGltf("file://${testHelper.testDir}/assets/cube.glb");
var light = await viewer.addDirectLight(
DirectLight.point(intensity: 1000000, falloffRadius: 10));