update TextureProjection
This commit is contained in:
@@ -42,7 +42,7 @@ class TextureProjection {
|
|||||||
await depthWriteView.setFrustumCullingEnabled(false);
|
await depthWriteView.setFrustumCullingEnabled(false);
|
||||||
await depthWriteView.setPostProcessing(false);
|
await depthWriteView.setPostProcessing(false);
|
||||||
await depthWriteView.setViewport(viewport.width, viewport.height);
|
await depthWriteView.setViewport(viewport.width, viewport.height);
|
||||||
await depthWriteView.setBlendMode(BlendMode.opaque);
|
await depthWriteView.setBlendMode(BlendMode.transparent);
|
||||||
|
|
||||||
final depthWriteColorTexture = await FilamentApp.instance!
|
final depthWriteColorTexture = await FilamentApp.instance!
|
||||||
.createTexture(viewport.width, viewport.height,
|
.createTexture(viewport.width, viewport.height,
|
||||||
@@ -81,9 +81,6 @@ class TextureProjection {
|
|||||||
await projectionView.setPostProcessing(false);
|
await projectionView.setPostProcessing(false);
|
||||||
await projectionView.setViewport(viewport.width, viewport.height);
|
await projectionView.setViewport(viewport.width, viewport.height);
|
||||||
|
|
||||||
await FilamentApp.instance!.register(swapChain, depthWriteView);
|
|
||||||
await FilamentApp.instance!.register(swapChain, projectionView);
|
|
||||||
|
|
||||||
return TextureProjection._(
|
return TextureProjection._(
|
||||||
sourceView: sourceView,
|
sourceView: sourceView,
|
||||||
swapChain: swapChain,
|
swapChain: swapChain,
|
||||||
@@ -104,11 +101,16 @@ class TextureProjection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var _pixelBuffers = <View, Uint8List>{};
|
var _pixelBuffers = <View, Uint8List>{};
|
||||||
|
Uint8List getColorBuffer() => _pixelBuffers[sourceView]!;
|
||||||
Uint8List getDepthWritePixelBuffer() => _pixelBuffers[depthView]!;
|
Uint8List getDepthWritePixelBuffer() => _pixelBuffers[depthView]!;
|
||||||
Uint8List getProjectedPixelBuffer() => _pixelBuffers[projectionView]!;
|
Uint8List getProjectedPixelBuffer() => _pixelBuffers[projectionView]!;
|
||||||
|
|
||||||
Future project(ThermionAsset target) async {
|
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();
|
final camera = await sourceView.getCamera();
|
||||||
await depthView.setCamera(camera);
|
await depthView.setCamera(camera);
|
||||||
await projectionView.setCamera(camera);
|
await projectionView.setCamera(camera);
|
||||||
@@ -121,8 +123,6 @@ class TextureProjection {
|
|||||||
await depthView.setRenderOrder(1);
|
await depthView.setRenderOrder(1);
|
||||||
await projectionView.setRenderOrder(2);
|
await projectionView.setRenderOrder(2);
|
||||||
|
|
||||||
var originalMi = await target.getMaterialInstanceAt();
|
|
||||||
|
|
||||||
var pixelBuffers = await FilamentApp.instance!.capture(swapChain,
|
var pixelBuffers = await FilamentApp.instance!.capture(swapChain,
|
||||||
beforeRender: (view) async {
|
beforeRender: (view) async {
|
||||||
if (view == depthView) {
|
if (view == depthView) {
|
||||||
@@ -141,5 +141,10 @@ class TextureProjection {
|
|||||||
for (final (view, pixelBuffer) in pixelBuffers) {
|
for (final (view, pixelBuffer) in pixelBuffers) {
|
||||||
_pixelBuffers[view] = pixelBuffer;
|
_pixelBuffers[view] = pixelBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await FilamentApp.instance!.unregister(swapChain, depthView);
|
||||||
|
await FilamentApp.instance!.unregister(swapChain, projectionView);
|
||||||
|
|
||||||
|
await target.setMaterialInstanceAt(originalMi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ void main() async {
|
|||||||
group("lights", () {
|
group("lights", () {
|
||||||
test('add/clear point light', () async {
|
test('add/clear point light', () async {
|
||||||
await testHelper.withViewer((viewer) 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(
|
var light = await viewer.addDirectLight(
|
||||||
DirectLight.point(intensity: 1000000, falloffRadius: 10));
|
DirectLight.point(intensity: 1000000, falloffRadius: 10));
|
||||||
|
|||||||
Reference in New Issue
Block a user