don't pass View to readPixels (only width/height, x/y offsets needed, and optionally rendertarget)
This commit is contained in:
@@ -800,10 +800,11 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
if (captureRenderTarget && view.renderTarget == null) {
|
if (captureRenderTarget && view.renderTarget == null) {
|
||||||
throw Exception();
|
throw Exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
await withVoidCallback((requestId, cb) {
|
await withVoidCallback((requestId, cb) {
|
||||||
Renderer_readPixelsRenderThread(
|
Renderer_readPixelsRenderThread(
|
||||||
renderer,
|
renderer,
|
||||||
view.view,
|
viewport.width, viewport.height, 0, 0,
|
||||||
view.renderTarget == null
|
view.renderTarget == null
|
||||||
? nullptr
|
? nullptr
|
||||||
: view.renderTarget!.getNativeHandle(),
|
: view.renderTarget!.getNativeHandle(),
|
||||||
|
|||||||
@@ -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_renderStandaloneView(TRenderer *tRenderer, TView *tView);
|
||||||
EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
|
EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
|
||||||
TRenderer *tRenderer,
|
TRenderer *tRenderer,
|
||||||
TView *tView,
|
uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset,
|
||||||
TRenderTarget *tRenderTarget,
|
TRenderTarget *tRenderTarget,
|
||||||
TPixelDataFormat tPixelBufferFormat,
|
TPixelDataFormat tPixelBufferFormat,
|
||||||
TPixelDataType tPixelDataType,
|
TPixelDataType tPixelDataType,
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ namespace thermion
|
|||||||
void Renderer_renderStandaloneViewRenderThread(TRenderer *tRenderer, TView *tView, uint32_t requestId, VoidCallback onComplete);
|
void Renderer_renderStandaloneViewRenderThread(TRenderer *tRenderer, TView *tView, uint32_t requestId, VoidCallback onComplete);
|
||||||
void Renderer_readPixelsRenderThread(
|
void Renderer_readPixelsRenderThread(
|
||||||
TRenderer *tRenderer,
|
TRenderer *tRenderer,
|
||||||
TView *tView,
|
uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset,
|
||||||
TRenderTarget *tRenderTarget,
|
TRenderTarget *tRenderTarget,
|
||||||
TPixelDataFormat tPixelBufferFormat,
|
TPixelDataFormat tPixelBufferFormat,
|
||||||
TPixelDataType tPixelDataType,
|
TPixelDataType tPixelDataType,
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ class CaptureCallbackHandler : public filament::backend::CallbackHandler
|
|||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
|
EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
|
||||||
TRenderer *tRenderer,
|
TRenderer *tRenderer,
|
||||||
TView *tView,
|
uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset,
|
||||||
TRenderTarget *tRenderTarget,
|
TRenderTarget *tRenderTarget,
|
||||||
TPixelDataFormat tPixelBufferFormat,
|
TPixelDataFormat tPixelBufferFormat,
|
||||||
TPixelDataType tPixelDataType,
|
TPixelDataType tPixelDataType,
|
||||||
@@ -102,9 +102,6 @@ EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
|
|||||||
|
|
||||||
auto *renderer = reinterpret_cast<filament::Renderer *>(tRenderer);
|
auto *renderer = reinterpret_cast<filament::Renderer *>(tRenderer);
|
||||||
auto *renderTarget = reinterpret_cast<filament::RenderTarget *>(tRenderTarget);
|
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::PixelDataFormat pixelBufferFormat = static_cast<filament::backend::PixelDataFormat>(tPixelBufferFormat);
|
||||||
filament::backend::PixelDataType pixelDataType = static_cast<filament::backend::PixelDataType>(tPixelDataType);
|
filament::backend::PixelDataType pixelDataType = static_cast<filament::backend::PixelDataType>(tPixelDataType);
|
||||||
@@ -126,9 +123,9 @@ EMSCRIPTEN_KEEPALIVE void Renderer_readPixels(
|
|||||||
);
|
);
|
||||||
|
|
||||||
if(renderTarget) {
|
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 {
|
} else {
|
||||||
renderer->readPixels(0, 0, vp.width, vp.height, std::move(pbd));
|
renderer->readPixels(xOffset, yOffset, width, height, std::move(pbd));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -474,7 +474,7 @@ extern "C"
|
|||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void Renderer_readPixelsRenderThread(
|
EMSCRIPTEN_KEEPALIVE void Renderer_readPixelsRenderThread(
|
||||||
TRenderer *tRenderer,
|
TRenderer *tRenderer,
|
||||||
TView *tView,
|
uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset,
|
||||||
TRenderTarget *tRenderTarget,
|
TRenderTarget *tRenderTarget,
|
||||||
TPixelDataFormat tPixelBufferFormat,
|
TPixelDataFormat tPixelBufferFormat,
|
||||||
TPixelDataType tPixelDataType,
|
TPixelDataType tPixelDataType,
|
||||||
@@ -485,7 +485,7 @@ extern "C"
|
|||||||
std::packaged_task<void()> lambda(
|
std::packaged_task<void()> lambda(
|
||||||
[=]() mutable
|
[=]() 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));
|
PROXY(onComplete(requestId));
|
||||||
});
|
});
|
||||||
auto fut = _renderThread->add_task(lambda);
|
auto fut = _renderThread->add_task(lambda);
|
||||||
|
|||||||
Reference in New Issue
Block a user