refactor!: refactor to support multiple Views/Render Targets
This commit is contained in:
@@ -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());
|
||||
|
||||
21
thermion_dart/test/view_tests.dart
Normal file
21
thermion_dart/test/view_tests.dart
Normal 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();
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user