diff --git a/src/renderer/wg_engine/tvgWgCompositor.cpp b/src/renderer/wg_engine/tvgWgCompositor.cpp index 38bdc341..f07be669 100644 --- a/src/renderer/wg_engine/tvgWgCompositor.cpp +++ b/src/renderer/wg_engine/tvgWgCompositor.cpp @@ -39,6 +39,8 @@ void WgCompositor::initialize(WgContext& context, uint32_t width, uint32_t heigh resize(context, width, height); // composition and blend geometries meshDataBlit.blitBox(); + // force stage buffers initialization + flush(context); } diff --git a/src/renderer/wg_engine/tvgWgCompositor.h b/src/renderer/wg_engine/tvgWgCompositor.h index b04069c4..dbc75f0c 100644 --- a/src/renderer/wg_engine/tvgWgCompositor.h +++ b/src/renderer/wg_engine/tvgWgCompositor.h @@ -111,11 +111,11 @@ public: void beginRenderPass(WGPUCommandEncoder encoder, WgRenderTarget* target, bool clear, WGPUColor clearColor = { 0.0, 0.0, 0.0, 0.0 }); void endRenderPass(); - // request shapes for drawing (staging) - // stage data + // stage buffers operations void reset(WgContext& context); void flush(WgContext& context); + // request shapes for drawing (staging) void requestShape(WgRenderDataShape* renderData); void requestImage(WgRenderDataPicture* renderData); diff --git a/src/renderer/wg_engine/tvgWgRenderer.cpp b/src/renderer/wg_engine/tvgWgRenderer.cpp index a6db9b28..8f611e4f 100644 --- a/src/renderer/wg_engine/tvgWgRenderer.cpp +++ b/src/renderer/wg_engine/tvgWgRenderer.cpp @@ -341,22 +341,24 @@ bool WgRenderer::sync() // there is no external dest buffer if (!dstTexture) return false; - // get external dest buffer - WGPUTextureView dstTextureView = mContext.createTextureView(dstTexture); + // insure that surface and offscreen target have the same size + if ((wgpuTextureGetWidth(dstTexture) == mRenderTargetRoot.width) && + (wgpuTextureGetHeight(dstTexture) == mRenderTargetRoot.height)) { + // get external dest buffer + WGPUTextureView dstTextureView = mContext.createTextureView(dstTexture); + // create command encoder + WGPUCommandEncoder commandEncoder = mContext.createCommandEncoder(); + // show root offscreen buffer + mCompositor.blit(mContext, commandEncoder, &mRenderTargetRoot, dstTextureView); + mContext.submitCommandEncoder(commandEncoder); + mContext.releaseCommandEncoder(commandEncoder); + // release dest buffer view + mContext.releaseTextureView(dstTextureView); + } - // create command encoder - WGPUCommandEncoder commandEncoder = mContext.createCommandEncoder(); - // show root offscreen buffer - mCompositor.blit(mContext, commandEncoder, &mRenderTargetRoot, dstTextureView); - mContext.submitCommandEncoder(commandEncoder); - mContext.releaseCommandEncoder(commandEncoder); - - // release dest buffer view - mContext.releaseTextureView(dstTextureView); return true; } - // render target handle bool WgRenderer::target(WGPUDevice device, WGPUInstance instance, void* target, uint32_t width, uint32_t height, int type) {