internal: expose View_getRenderTarget and set (Dart) FFIView.renderTarget property on construction

This commit is contained in:
Nick Fisher
2024-12-18 08:42:53 +08:00
parent dc690bb93a
commit b158062ce8
3 changed files with 20 additions and 2 deletions

View File

@@ -8,18 +8,29 @@ import 'thermion_viewer_ffi.dart';
class FFIView extends View {
final Pointer<TView> view;
final Pointer<TViewer> viewer;
FFIRenderTarget? renderTarget;
FFIView(this.view, this.viewer);
FFIView(this.view, this.viewer) {
final renderTargetPtr = View_getRenderTarget(view);
if (renderTargetPtr != nullptr) {
renderTarget = FFIRenderTarget(renderTargetPtr, viewer);
}
}
@override
Future updateViewport(int width, int height) async {
View_updateViewport(view, width, height);
}
Future<RenderTarget?> getRenderTarget() async {
return renderTarget;
}
@override
Future setRenderTarget(covariant FFIRenderTarget? renderTarget) async {
if (renderTarget != null) {
View_setRenderTarget(view, renderTarget.renderTarget);
this.renderTarget = renderTarget;
} else {
View_setRenderTarget(view, nullptr);
}

View File

@@ -31,6 +31,7 @@ EMSCRIPTEN_KEEPALIVE void View_setRenderTarget(TView *view, TRenderTarget *rende
EMSCRIPTEN_KEEPALIVE void View_setFrustumCullingEnabled(TView *view, bool enabled);
EMSCRIPTEN_KEEPALIVE void View_updateViewport(TView* tView, uint32_t width, uint32_t height);
EMSCRIPTEN_KEEPALIVE void View_setRenderTarget(TView* tView, TRenderTarget* tRenderTarget);
EMSCRIPTEN_KEEPALIVE TRenderTarget *View_getRenderTarget(TView* tView);
EMSCRIPTEN_KEEPALIVE void View_setFrustumCullingEnabled(TView* tView, bool enabled);
EMSCRIPTEN_KEEPALIVE void View_setPostProcessing(TView* tView, bool enabled);
EMSCRIPTEN_KEEPALIVE void View_setShadowsEnabled(TView* tView, bool enabled);

View File

@@ -35,6 +35,12 @@ using namespace filament;
view->setViewport({0, 0, width, height});
}
EMSCRIPTEN_KEEPALIVE TRenderTarget *View_getRenderTarget(TView *tView) {
auto view = reinterpret_cast<View *>(tView);
auto tRenderTarget = reinterpret_cast<TRenderTarget *>(view->getRenderTarget());
return tRenderTarget;
}
EMSCRIPTEN_KEEPALIVE void View_setRenderTarget(TView *tView, TRenderTarget *tRenderTarget)
{
auto view = reinterpret_cast<View *>(tView);