internal: add destroyRenderTargetRenderThread

This commit is contained in:
Nick Fisher
2024-12-18 08:57:26 +08:00
parent b158062ce8
commit f8ae90b631
3 changed files with 16 additions and 15 deletions

View File

@@ -93,19 +93,10 @@ class ThermionViewerFFI extends ThermionViewer {
_logger.info(
"Viewer is being (or has been) disposed; this will clean up all render targets.");
} else {
Viewer_destroyRenderTarget(_viewer!, renderTarget.renderTarget);
}
}
///
///
///
Future setRenderTarget(FFIRenderTarget? renderTarget) async {
final view = (await getViewAt(0)) as FFIView;
if (renderTarget != null) {
View_setRenderTarget(view.view, renderTarget.renderTarget);
} else {
View_setRenderTarget(view.view, nullptr);
await withVoidCallback((cb) {
Viewer_destroyRenderTargetRenderThread(
_viewer!, renderTarget.renderTarget, cb);
});
}
}
@@ -1769,8 +1760,7 @@ class ThermionViewerFFI extends ThermionViewer {
_sceneManager!, material.pointer, cb);
}
});
_grid =
FFIAsset(ptr, _sceneManager!, _engine!, _unlitMaterialProvider!);
_grid = FFIAsset(ptr, _sceneManager!, _engine!, _unlitMaterialProvider!);
}
await _grid!.addToScene();
await setLayerVisibility(VisibilityLayers.OVERLAY, true);

View File

@@ -39,6 +39,7 @@ namespace thermion
EMSCRIPTEN_KEEPALIVE void Viewer_requestFrameRenderThread(TViewer *viewer, void (*onComplete)());
EMSCRIPTEN_KEEPALIVE void Viewer_loadIblRenderThread(TViewer *viewer, const char *iblPath, float intensity, void (*onComplete)());
EMSCRIPTEN_KEEPALIVE void Viewer_createRenderTargetRenderThread(TViewer *viewer, intptr_t texture, uint32_t width, uint32_t height, void (*onComplete)(TRenderTarget *));
EMSCRIPTEN_KEEPALIVE void Viewer_destroyRenderTargetRenderThread(TViewer *viewer, TRenderTarget *tRenderTarget, void (*onComplete)());
EMSCRIPTEN_KEEPALIVE void Engine_buildMaterialRenderThread(TEngine *tEngine, const uint8_t* materialData, size_t length, void (*onComplete)(TMaterial *));
EMSCRIPTEN_KEEPALIVE void Engine_destroyMaterialRenderThread(TEngine *tEngine, TMaterial *tMaterial, void (*onComplete)());

View File

@@ -279,6 +279,16 @@ extern "C"
auto fut = _rl->add_task(lambda);
}
EMSCRIPTEN_KEEPALIVE void Viewer_destroyRenderTargetRenderThread(TViewer *tViewer, TRenderTarget *tRenderTarget, void (*onComplete)()) {
std::packaged_task<void()> lambda(
[=]() mutable
{
Viewer_destroyRenderTarget(tViewer, tRenderTarget);
onComplete();
});
auto fut = _rl->add_task(lambda);
}
EMSCRIPTEN_KEEPALIVE void Engine_buildMaterialRenderThread(TEngine *tEngine, const uint8_t *materialData, size_t length, void (*onComplete)(TMaterial *))
{
std::packaged_task<void()> lambda(