add view test for multiple views rendering into the same render target
This commit is contained in:
@@ -202,6 +202,64 @@ void main() async {
|
|||||||
isFloat: true);
|
isFloat: true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
test('render two views to same render target', () async {
|
||||||
|
final viewportDimensions = (width: 500, height: 500);
|
||||||
|
final swapChain = await FilamentApp.instance!.createHeadlessSwapChain(
|
||||||
|
viewportDimensions.width, viewportDimensions.height);
|
||||||
|
final views = <FFIView>[];
|
||||||
|
|
||||||
|
await FilamentApp.instance!.setClearOptions(0, 0, 0, 0,
|
||||||
|
clear: false, clearStencil: 0, discard: false);
|
||||||
|
|
||||||
|
final renderTarget = await FilamentApp.instance!.createRenderTarget(
|
||||||
|
viewportDimensions.width, viewportDimensions.height) as FFIRenderTarget;
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
final camera = await FilamentApp.instance!.createCamera() as FFICamera;
|
||||||
|
await camera.setLensProjection();
|
||||||
|
final view = await FilamentApp.instance!.createView() as FFIView;
|
||||||
|
final scene = await FilamentApp.instance!.createScene() as FFIScene;
|
||||||
|
await view.setScene(scene);
|
||||||
|
await view.setRenderable(true);
|
||||||
|
await view.setViewport(
|
||||||
|
viewportDimensions.width, viewportDimensions.height);
|
||||||
|
await view.setFrustumCullingEnabled(false);
|
||||||
|
await view.setPostProcessing(false);
|
||||||
|
|
||||||
|
await view.setRenderTarget(renderTarget);
|
||||||
|
|
||||||
|
await FilamentApp.instance!.register(swapChain, view);
|
||||||
|
await view.setCamera(camera);
|
||||||
|
views.add(view);
|
||||||
|
|
||||||
|
await camera.lookAt(Vector3(0, 4, 12),
|
||||||
|
focus: Vector3(i == 0 ? -2 : 2, 0, 0));
|
||||||
|
|
||||||
|
var cube = await FilamentApp.instance!.createGeometry(
|
||||||
|
GeometryHelper.cube(flipUvs: true), nullptr) as FFIAsset;
|
||||||
|
|
||||||
|
await scene.add(cube);
|
||||||
|
}
|
||||||
|
var result = await FilamentApp.instance!
|
||||||
|
.capture(swapChain, captureRenderTarget: true);
|
||||||
|
|
||||||
|
await savePixelBufferToBmp(
|
||||||
|
result.first.$2,
|
||||||
|
viewportDimensions.width,
|
||||||
|
viewportDimensions.height,
|
||||||
|
p.join(testHelper.outDir.path, "two_views_same_render_target1.bmp"),
|
||||||
|
isFloat: true);
|
||||||
|
await savePixelBufferToBmp(
|
||||||
|
result.last.$2,
|
||||||
|
viewportDimensions.width,
|
||||||
|
viewportDimensions.height,
|
||||||
|
p.join(testHelper.outDir.path, "two_views_same_render_target2.bmp"),
|
||||||
|
isFloat: true);
|
||||||
|
});
|
||||||
|
|
||||||
test('render depth buffer to render target', () async {
|
test('render depth buffer to render target', () async {
|
||||||
final viewportDimensions = (width: 500, height: 500);
|
final viewportDimensions = (width: 500, height: 500);
|
||||||
final swapChain = await FilamentApp.instance!.createHeadlessSwapChain(
|
final swapChain = await FilamentApp.instance!.createHeadlessSwapChain(
|
||||||
@@ -293,10 +351,9 @@ void main() async {
|
|||||||
|
|
||||||
await testHelper.capture(viewer.view, "fog_options_disabled");
|
await testHelper.capture(viewer.view, "fog_options_disabled");
|
||||||
|
|
||||||
await viewer.view.setFogOptions(FogOptions(
|
await viewer.view
|
||||||
enabled: true, distance: 0, density: 0.5));
|
.setFogOptions(FogOptions(enabled: true, distance: 0, density: 0.5));
|
||||||
await testHelper.capture(viewer.view, "fog_options_enabled");
|
await testHelper.capture(viewer.view, "fog_options_enabled");
|
||||||
|
|
||||||
}, addSkybox: true, postProcessing: true);
|
}, addSkybox: true, postProcessing: true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user