renderer: revamped engine interfaces

Introduced updated pre/post calls
for proper preparation of the drawing process.
This commit is contained in:
Hermet Park 2024-12-30 16:03:25 +09:00 committed by Hermet Park
parent ccf5a8158f
commit 1cbc11cadd
8 changed files with 48 additions and 0 deletions

View file

@ -1233,6 +1233,18 @@ bool GlRenderer::viewport(const RenderRegion& vp)
}
bool GlRenderer::preUpdate()
{
return true;
}
bool GlRenderer::postUpdate()
{
return true;
}
int GlRenderer::init(uint32_t threads)
{
if ((initEngineCnt++) > 0) return true;

View file

@ -63,8 +63,10 @@ public:
RT_None,
};
bool preUpdate() override;
RenderData prepare(const RenderShape& rshape, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) override;
RenderData prepare(RenderSurface* surface, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags) override;
bool postUpdate() override;
bool preRender() override;
bool renderShape(RenderData data) override;
bool renderImage(RenderData data) override;

View file

@ -363,6 +363,18 @@ bool SwRenderer::target(pixel_t* data, uint32_t stride, uint32_t w, uint32_t h,
}
bool SwRenderer::preUpdate()
{
return true;
}
bool SwRenderer::postUpdate()
{
return true;
}
bool SwRenderer::preRender()
{
return true;

View file

@ -36,8 +36,10 @@ namespace tvg
class SwRenderer : public RenderMethod
{
public:
bool preUpdate() override;
RenderData prepare(const RenderShape& rshape, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) override;
RenderData prepare(RenderSurface* surface, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags) override;
bool postUpdate() override;
bool preRender() override;
bool renderShape(RenderData data) override;
bool renderImage(RenderData data) override;

View file

@ -76,9 +76,13 @@ struct Canvas::Impl
auto m = Matrix{1, 0, 0, 0, 1, 0, 0, 0, 1};
if (!renderer->preUpdate()) return Result::InsufficientCondition;
if (paint) PAINT(paint)->update(renderer, m, clips, 255, flag);
else PAINT(scene)->update(renderer, m, clips, 255, flag);
if (!renderer->postUpdate()) return Result::InsufficientCondition;
status = Status::Updating;
return Result::Success;
}

View file

@ -383,8 +383,10 @@ public:
uint32_t unref();
virtual ~RenderMethod() {}
virtual bool preUpdate() = 0;
virtual RenderData prepare(const RenderShape& rshape, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) = 0;
virtual RenderData prepare(RenderSurface* surface, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags) = 0;
virtual bool postUpdate() = 0;
virtual bool preRender() = 0;
virtual bool renderShape(RenderData data) = 0;
virtual bool renderImage(RenderData data) = 0;

View file

@ -480,6 +480,18 @@ bool WgRenderer::effect(TVG_UNUSED RenderCompositor* cmp, TVG_UNUSED const Rende
}
bool WgRenderer::preUpdate()
{
return true;
}
bool WgRenderer::postUpdate()
{
return true;
}
WgRenderer* WgRenderer::gen()
{
return new WgRenderer();

View file

@ -28,8 +28,10 @@
class WgRenderer : public RenderMethod
{
public:
bool preUpdate() override;
RenderData prepare(const RenderShape& rshape, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) override;
RenderData prepare(RenderSurface* surface, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags) override;
bool postUpdate() override;
bool preRender() override;
bool renderShape(RenderData data) override;
bool renderImage(RenderData data) override;