refactor!: refactor to support multiple Views/Render Targets

This commit is contained in:
Nick Fisher
2024-09-27 23:16:01 +08:00
parent a6d2f2ecf9
commit 7f11250b79
25 changed files with 1137 additions and 1304 deletions

View File

@@ -79,10 +79,11 @@ class TestHelper {
outDir.createSync();
}
Future capture(ThermionViewer viewer, String outputFilename) async {
Future capture(ThermionViewer viewer, String outputFilename, { SwapChain? swapChain, RenderTarget? renderTarget}) async {
await Future.delayed(Duration(milliseconds: 10));
var outPath = p.join(outDir.path, "$outputFilename.bmp");
var pixelBuffer = await viewer.capture(swapChain); //, renderTarget: renderTarget);
var pixelBuffer =
await viewer.capture(swapChain ?? this.swapChain, renderTarget: renderTarget);
await savePixelBufferToBmp(
pixelBuffer,
viewer.viewportDimensions.$1.toInt(),
@@ -91,17 +92,21 @@ class TestHelper {
return pixelBuffer;
}
Future<int> createTexture(int width, int height) async {
final packageUri = findPackageRoot('thermion_dart');
final lib = ThermionDartTexture1(DynamicLibrary.open(
'${packageUri.toFilePath()}/native/lib/macos/swift/libthermion_swift.dylib'));
final object = ThermionDartTexture.new1(lib);
object.initWithWidth_height_(width, height);
return object.metalTextureAddress;
}
Future<ThermionViewer> createViewer(
{img.Color? bg,
Vector3? cameraPosition,
viewportDimensions = (width: 500, height: 500)}) async {
final packageUri = findPackageRoot('thermion_dart');
final lib = ThermionDartTexture1(DynamicLibrary.open(
'${packageUri.toFilePath()}/native/lib/macos/swift/libthermion_swift.dylib'));
final object = ThermionDartTexture.new1(lib);
object.initWithWidth_height_(
viewportDimensions.width, viewportDimensions.height);
final texture =
await createTexture(viewportDimensions.width, viewportDimensions.height);
final resourceLoader = calloc<ResourceLoaderWrapper>(1);
var loadToOut = NativeCallable<
@@ -118,11 +123,10 @@ class TestHelper {
await viewer.initialized;
swapChain = await viewer.createSwapChain(
viewportDimensions.width, viewportDimensions.height);
renderTarget = await viewer.createRenderTarget(
viewportDimensions.width,
viewportDimensions.height,
object.metalTextureAddress);
await viewer.setRenderTarget(renderTarget as FFIRenderTarget);
renderTarget = await viewer.createRenderTarget(viewportDimensions.width,
viewportDimensions.height, texture);
// await viewer.setRenderTarget(renderTarget as FFIRenderTarget);
await viewer.updateViewportAndCameraProjection(
viewportDimensions.width.toDouble(),
viewportDimensions.height.toDouble());

View File

@@ -0,0 +1,21 @@
import 'package:test/test.dart';
import 'helpers.dart';
void main() async {
final testHelper = TestHelper("view");
group('view tests', () {
test('create view', () async {
var viewer = await testHelper.createViewer();
final renderTarget = await viewer.createRenderTarget(
200, 400, await testHelper.createTexture(200, 400));
final view = await viewer.createView();
await view.updateViewport(200, 400);
await view.setRenderTarget(renderTarget);
await viewer.setBackgroundColor(1.0, 0.0, 0.0, 1.0);
await testHelper.capture(viewer, "create_view_with_render_target", renderTarget: renderTarget);
await viewer.dispose();
});
});
}