don't pass View to readPixels (only width/height, x/y offsets needed, and optionally rendertarget)

This commit is contained in:
Nick Fisher
2025-07-01 13:01:39 +08:00
parent 0693a2a95b
commit e984d8cf71
5 changed files with 9 additions and 11 deletions

View File

@@ -800,10 +800,11 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
if (captureRenderTarget && view.renderTarget == null) {
throw Exception();
}
await withVoidCallback((requestId, cb) {
Renderer_readPixelsRenderThread(
renderer,
view.view,
viewport.width, viewport.height, 0, 0,
view.renderTarget == null
? nullptr
: view.renderTarget!.getNativeHandle(),

View File

@@ -17,7 +17,7 @@ EMSCRIPTEN_KEEPALIVE void Renderer_render(TRenderer *tRenderer, TView *tView);
EMSCRIPTEN_KEEPALIVE void Renderer_renderStandaloneView(TRenderer *tRenderer, TView *tView);
EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
TRenderer *tRenderer,
TView *tView,
uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset,
TRenderTarget *tRenderTarget,
TPixelDataFormat tPixelBufferFormat,
TPixelDataType tPixelDataType,

View File

@@ -79,7 +79,7 @@ namespace thermion
void Renderer_renderStandaloneViewRenderThread(TRenderer *tRenderer, TView *tView, uint32_t requestId, VoidCallback onComplete);
void Renderer_readPixelsRenderThread(
TRenderer *tRenderer,
TView *tView,
uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset,
TRenderTarget *tRenderTarget,
TPixelDataFormat tPixelBufferFormat,
TPixelDataType tPixelDataType,

View File

@@ -93,7 +93,7 @@ class CaptureCallbackHandler : public filament::backend::CallbackHandler
EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
TRenderer *tRenderer,
TView *tView,
uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset,
TRenderTarget *tRenderTarget,
TPixelDataFormat tPixelBufferFormat,
TPixelDataType tPixelDataType,
@@ -102,9 +102,6 @@ EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
auto *renderer = reinterpret_cast<filament::Renderer *>(tRenderer);
auto *renderTarget = reinterpret_cast<filament::RenderTarget *>(tRenderTarget);
auto *view = reinterpret_cast<filament::View *>(tView);
filament::Viewport const &vp = view->getViewport();
filament::backend::PixelDataFormat pixelBufferFormat = static_cast<filament::backend::PixelDataFormat>(tPixelBufferFormat);
filament::backend::PixelDataType pixelDataType = static_cast<filament::backend::PixelDataType>(tPixelDataType);
@@ -126,9 +123,9 @@ EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
);
if(renderTarget) {
renderer->readPixels(renderTarget, 0, 0, vp.width, vp.height, std::move(pbd));
renderer->readPixels(renderTarget, xOffset, yOffset, width, height, std::move(pbd));
} else {
renderer->readPixels(0, 0, vp.width, vp.height, std::move(pbd));
renderer->readPixels(xOffset, yOffset, width, height, std::move(pbd));
}
}

View File

@@ -474,7 +474,7 @@ extern "C"
EMSCRIPTEN_KEEPALIVE void Renderer_readPixelsRenderThread(
TRenderer *tRenderer,
TView *tView,
uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset,
TRenderTarget *tRenderTarget,
TPixelDataFormat tPixelBufferFormat,
TPixelDataType tPixelDataType,
@@ -485,7 +485,7 @@ extern "C"
std::packaged_task<void()> lambda(
[=]() mutable
{
Renderer_readPixels(tRenderer, tView, tRenderTarget, tPixelBufferFormat, tPixelDataType, out, outLength);
Renderer_readPixels(tRenderer, width, height, xOffset, yOffset, tRenderTarget, tPixelBufferFormat, tPixelDataType, out, outLength);
PROXY(onComplete(requestId));
});
auto fut = _renderThread->add_task(lambda);