refactor: continual refactor to support multiple render targets
This commit is contained in:
@@ -67,7 +67,9 @@ void main() async {
|
||||
print(frustum.plane5.normal);
|
||||
print(frustum.plane5.constant);
|
||||
|
||||
await viewer.setCameraLensProjection(
|
||||
var camera = await viewer.getMainCamera();
|
||||
|
||||
await camera.setLensProjection(
|
||||
near: 10.0, far: 1000.0, aspect: 1.0, focalLength: 28.0);
|
||||
frustum = await viewer.getCameraFrustum();
|
||||
print(frustum.plane5.normal);
|
||||
@@ -75,8 +77,8 @@ void main() async {
|
||||
});
|
||||
|
||||
test('set custom projection/culling matrix', () async {
|
||||
var viewer =
|
||||
await testHelper.createViewer(bg: kRed, cameraPosition: Vector3(0, 0, 4));
|
||||
var viewer = await testHelper.createViewer(
|
||||
bg: kRed, cameraPosition: Vector3(0, 0, 4));
|
||||
var camera = await viewer.getMainCamera();
|
||||
final cube = await viewer.createGeometry(GeometryHelper.cube());
|
||||
|
||||
@@ -155,7 +157,7 @@ void main() async {
|
||||
expect(await viewer.getActiveCamera(), newCamera);
|
||||
|
||||
await testHelper.capture(viewer, "create_camera_new_camera");
|
||||
|
||||
|
||||
final mainCamera = await viewer.getMainCamera();
|
||||
await viewer.setActiveCamera(mainCamera);
|
||||
expect(await viewer.getActiveCamera(), mainCamera);
|
||||
|
||||
17
thermion_dart/test/gizmo_tests.dart
Normal file
17
thermion_dart/test/gizmo_tests.dart
Normal file
@@ -0,0 +1,17 @@
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import 'helpers.dart';
|
||||
|
||||
void main() async {
|
||||
final testHelper = TestHelper("gizmo");
|
||||
|
||||
group('gizmo', () {
|
||||
test('add gizmo to scene', () async {
|
||||
var viewer = await testHelper.createViewer();
|
||||
var view = await viewer.getViewAt(0);
|
||||
var gizmo = await viewer.createGizmo(view);
|
||||
await testHelper.capture(viewer, "gizmo_add_to_scene");
|
||||
await viewer.dispose();
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -77,6 +77,8 @@ class TestHelper {
|
||||
outDir = Directory("$testDir/output/${dir}");
|
||||
// outDir.deleteSync(recursive: true);
|
||||
outDir.createSync();
|
||||
DynamicLibrary.open('${testDir}/libThermionTextureSwift.dylib');
|
||||
|
||||
}
|
||||
|
||||
Future capture(ThermionViewer viewer, String outputFilename,
|
||||
@@ -84,33 +86,28 @@ class TestHelper {
|
||||
await Future.delayed(Duration(milliseconds: 10));
|
||||
var outPath = p.join(outDir.path, "$outputFilename.bmp");
|
||||
var pixelBuffer = await viewer.capture(
|
||||
view: view, swapChain ?? this.swapChain, renderTarget: renderTarget);
|
||||
view: view,
|
||||
swapChain: swapChain ?? this.swapChain,
|
||||
renderTarget: renderTarget);
|
||||
view ??= await viewer.getViewAt(0);
|
||||
var vp = await view.getViewport();
|
||||
await savePixelBufferToBmp(
|
||||
pixelBuffer,
|
||||
vp.width,
|
||||
vp.height,
|
||||
outPath);
|
||||
await savePixelBufferToBmp(pixelBuffer, vp.width, vp.height, outPath);
|
||||
return pixelBuffer;
|
||||
}
|
||||
|
||||
Future<int> createTexture(int width, int height) async {
|
||||
Future<ThermionTextureSwift> 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);
|
||||
var testDir = Directory("${packageUri.toFilePath()}/test").path;
|
||||
|
||||
final object = ThermionTextureSwift.new1();
|
||||
object.initWithWidth_height_(width, height);
|
||||
return object.metalTextureAddress;
|
||||
return object;
|
||||
}
|
||||
|
||||
Future<ThermionViewer> createViewer(
|
||||
{img.Color? bg,
|
||||
Vector3? cameraPosition,
|
||||
viewportDimensions = (width: 500, height: 500)}) async {
|
||||
final texture = await createTexture(
|
||||
viewportDimensions.width, viewportDimensions.height);
|
||||
|
||||
final resourceLoader = calloc<ResourceLoaderWrapper>(1);
|
||||
var loadToOut = NativeCallable<
|
||||
Void Function(Pointer<Char>,
|
||||
|
||||
@@ -647,16 +647,6 @@ void main() async {
|
||||
});
|
||||
});
|
||||
|
||||
group("render thread", () {
|
||||
test("request frame on render thread", () async {
|
||||
var viewer = await testHelper.createViewer();
|
||||
viewer.requestFrame();
|
||||
|
||||
await Future.delayed(Duration(milliseconds: 20));
|
||||
await viewer.dispose();
|
||||
});
|
||||
});
|
||||
|
||||
// group("unproject", () {
|
||||
// test("unproject", () async {
|
||||
// final dimensions = (width: 1280, height: 768);
|
||||
|
||||
BIN
thermion_dart/test/libThermionTextureSwift.dylib
Normal file
BIN
thermion_dart/test/libThermionTextureSwift.dylib
Normal file
Binary file not shown.
33
thermion_dart/test/render_thread.dart
Normal file
33
thermion_dart/test/render_thread.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'dart:async';
|
||||
import 'dart:ffi';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import 'helpers.dart';
|
||||
|
||||
void main() async {
|
||||
final testHelper = TestHelper("render_thread");
|
||||
group("render thread/capture", () {
|
||||
test("request frame on render thread", () async {
|
||||
var viewer = await testHelper.createViewer();
|
||||
await viewer.setBackgroundColor(1.0, 0.0, 0.0, 1.0);
|
||||
|
||||
var texture = await testHelper.createTexture(500, 500);
|
||||
var renderTarget = await viewer.createRenderTarget(
|
||||
500, 500, texture.metalTextureAddress);
|
||||
|
||||
final view = await viewer.getViewAt(0);
|
||||
await view.setRenderTarget(renderTarget);
|
||||
|
||||
await viewer.render();
|
||||
|
||||
await Future.delayed(Duration(milliseconds: 1));
|
||||
|
||||
var data = texture.getTextureBytes()!;
|
||||
var pixels = data.bytes.cast<Uint8>().asTypedList(data.length);
|
||||
|
||||
savePixelBufferToBmp(
|
||||
pixels, 500, 500, "${testHelper.testDir}/request_frame.bmp");
|
||||
await viewer.dispose();
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:test/test.dart';
|
||||
import 'package:thermion_dart/thermion_dart.dart';
|
||||
import 'package:vector_math/vector_math_64.dart';
|
||||
@@ -9,11 +7,17 @@ void main() async {
|
||||
final testHelper = TestHelper("view");
|
||||
|
||||
group('view tests', () {
|
||||
test('get camera from view', () async {
|
||||
var viewer = await testHelper.createViewer();
|
||||
var view = await viewer.getViewAt(0);
|
||||
expect(await view.getCamera(), isNotNull);
|
||||
});
|
||||
|
||||
test('one swapchain, render view to render target', () async {
|
||||
var viewer = await testHelper.createViewer();
|
||||
|
||||
final texture = await testHelper.createTexture(500, 500);
|
||||
final renderTarget = await viewer.createRenderTarget(500, 500, texture);
|
||||
final renderTarget = await viewer.createRenderTarget(500, 500, texture.metalTextureAddress);
|
||||
viewer.setRenderTarget(renderTarget);
|
||||
|
||||
await viewer.setBackgroundColor(1.0, 0, 0, 1);
|
||||
@@ -27,9 +31,10 @@ void main() async {
|
||||
"default_swapchain_default_view_render_target");
|
||||
});
|
||||
|
||||
test('create secondary view, same swapchain', () async {
|
||||
test('create secondary view, default swapchain', () async {
|
||||
var viewer = await testHelper.createViewer();
|
||||
await viewer.setBackgroundColor(1.0, 0, 0, 1);
|
||||
|
||||
final cube = await viewer.createGeometry(GeometryHelper.cube());
|
||||
|
||||
var mainCamera = await viewer.getMainCamera();
|
||||
@@ -71,48 +76,28 @@ void main() async {
|
||||
|
||||
var mainCamera = await viewer.getMainCamera();
|
||||
mainCamera.setTransform(Matrix4.translation(Vector3(0, 0, 5)));
|
||||
final swapChain = await viewer.createSwapChain(200, 400);
|
||||
final swapChain = await viewer.createSwapChain(1, 1);
|
||||
await testHelper.capture(
|
||||
viewer, "create_swapchain_default_view_default_swapchain");
|
||||
|
||||
final view = await viewer.createView();
|
||||
|
||||
final texture = await testHelper.createTexture(400, 400);
|
||||
final renderTarget = await viewer.createRenderTarget(400, 400, texture);
|
||||
final texture = await testHelper.createTexture(200, 400);
|
||||
final renderTarget = await viewer.createRenderTarget(200, 400, texture.metalTextureAddress);
|
||||
await view.setRenderTarget(renderTarget);
|
||||
|
||||
await view.updateViewport(400, 400);
|
||||
await view.updateViewport(200, 400);
|
||||
view.setCamera(mainCamera);
|
||||
|
||||
mainCamera.setLensProjection(aspect: 0.5);
|
||||
|
||||
await testHelper.capture(
|
||||
viewer,
|
||||
view: view,
|
||||
swapChain: swapChain,
|
||||
renderTarget: renderTarget,
|
||||
"create_swapchain_new_view_new_swapchain",
|
||||
"create_swapchain_secondary_view_new_swapchain",
|
||||
);
|
||||
|
||||
// var newCamera = await viewer.createCamera();
|
||||
// newCamera.setTransform(Matrix4.translation(Vector3(0.0, 0.0, 10.0)));
|
||||
// newCamera.setLensProjection();
|
||||
// view.setCamera(newCamera);
|
||||
|
||||
// await testHelper.capture(
|
||||
// viewer,
|
||||
// "created_view_with_new_camera",
|
||||
// view: view,
|
||||
// );
|
||||
|
||||
// await testHelper.capture(
|
||||
// viewer,
|
||||
// "default_view_main_camera_no_change",
|
||||
// );
|
||||
|
||||
// // 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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -47,9 +47,9 @@ late String testDir;
|
||||
void main() async {
|
||||
final packageUri = findPackageRoot('thermion_dart');
|
||||
testDir = Directory("${packageUri.toFilePath()}/test").path;
|
||||
final lib = ThermionDartTexture1(DynamicLibrary.open(
|
||||
final lib = ThermionTexture1(DynamicLibrary.open(
|
||||
'${packageUri.toFilePath()}/native/lib/macos/swift/libthermion_swift.dylib'));
|
||||
final object = ThermionDartTexture.new1(lib);
|
||||
final object = ThermionTexture.new1(lib);
|
||||
object.initWithWidth_height_(500, 500);
|
||||
|
||||
final resourceLoader = calloc<ResourceLoaderWrapper>(1);
|
||||
|
||||
@@ -43,9 +43,9 @@ late String testDir;
|
||||
void main() async {
|
||||
final packageUri = findPackageRoot('thermion_dart');
|
||||
testDir = Directory("${packageUri.toFilePath()}/test").path;
|
||||
final lib = ThermionDartTexture1(DynamicLibrary.open(
|
||||
final lib = ThermionTexture1(DynamicLibrary.open(
|
||||
'${packageUri.toFilePath()}/native/lib/macos/swift/libthermion_swift.dylib'));
|
||||
final object = ThermionDartTexture.new1(lib);
|
||||
final object = ThermionTexture.new1(lib);
|
||||
object.initWithWidth_height_(500, 500);
|
||||
|
||||
final resourceLoader = calloc<ResourceLoaderWrapper>(1);
|
||||
|
||||
Reference in New Issue
Block a user