mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-19 14:31:39 +00:00
renderer: code refactoring
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
unify the viewport methods among engines.
This commit is contained in:
parent
0c0c30bd36
commit
e96678df28
8 changed files with 27 additions and 53 deletions
|
@ -1399,7 +1399,7 @@ RenderData GlRenderer::prepare(RenderSurface* image, RenderData data, const Matr
|
||||||
}
|
}
|
||||||
|
|
||||||
sdata->geometry.matrix = transform;
|
sdata->geometry.matrix = transform;
|
||||||
sdata->geometry.viewport = mViewport;
|
sdata->geometry.viewport = vport;
|
||||||
|
|
||||||
sdata->geometry.tesselate(image, flags);
|
sdata->geometry.tesselate(image, flags);
|
||||||
|
|
||||||
|
@ -1454,7 +1454,7 @@ RenderData GlRenderer::prepare(const RenderShape& rshape, RenderData data, const
|
||||||
if (sdata->updateFlag == RenderUpdateFlag::None) return sdata;
|
if (sdata->updateFlag == RenderUpdateFlag::None) return sdata;
|
||||||
|
|
||||||
sdata->geometry.matrix = transform;
|
sdata->geometry.matrix = transform;
|
||||||
sdata->geometry.viewport = mViewport;
|
sdata->geometry.viewport = vport;
|
||||||
|
|
||||||
if (sdata->updateFlag & (RenderUpdateFlag::Color | RenderUpdateFlag::Stroke | RenderUpdateFlag::Gradient | RenderUpdateFlag::GradientStroke | RenderUpdateFlag::Transform | RenderUpdateFlag::Path))
|
if (sdata->updateFlag & (RenderUpdateFlag::Color | RenderUpdateFlag::Stroke | RenderUpdateFlag::Gradient | RenderUpdateFlag::GradientStroke | RenderUpdateFlag::Transform | RenderUpdateFlag::Path))
|
||||||
{
|
{
|
||||||
|
@ -1470,19 +1470,6 @@ RenderData GlRenderer::prepare(const RenderShape& rshape, RenderData data, const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RenderRegion GlRenderer::viewport()
|
|
||||||
{
|
|
||||||
return mViewport;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool GlRenderer::viewport(const RenderRegion& vp)
|
|
||||||
{
|
|
||||||
mViewport = vp;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool GlRenderer::preUpdate()
|
bool GlRenderer::preUpdate()
|
||||||
{
|
{
|
||||||
if (mRootTarget.invalid()) return false;
|
if (mRootTarget.invalid()) return false;
|
||||||
|
|
|
@ -80,8 +80,6 @@ public:
|
||||||
bool postRender() override;
|
bool postRender() override;
|
||||||
void dispose(RenderData data) override;;
|
void dispose(RenderData data) override;;
|
||||||
RenderRegion region(RenderData data) override;
|
RenderRegion region(RenderData data) override;
|
||||||
RenderRegion viewport() override;
|
|
||||||
bool viewport(const RenderRegion& vp) override;
|
|
||||||
bool blend(BlendMethod method) override;
|
bool blend(BlendMethod method) override;
|
||||||
ColorSpace colorSpace() override;
|
ColorSpace colorSpace() override;
|
||||||
const RenderSurface* mainSurface() override;
|
const RenderSurface* mainSurface() override;
|
||||||
|
@ -137,7 +135,6 @@ private:
|
||||||
void* mContext = nullptr;
|
void* mContext = nullptr;
|
||||||
RenderSurface surface;
|
RenderSurface surface;
|
||||||
GLint mTargetFboId = 0;
|
GLint mTargetFboId = 0;
|
||||||
RenderRegion mViewport;
|
|
||||||
GlStageBuffer mGpuBuffer;
|
GlStageBuffer mGpuBuffer;
|
||||||
GlRenderTarget mRootTarget;
|
GlRenderTarget mRootTarget;
|
||||||
Array<GlProgram*> mPrograms;
|
Array<GlProgram*> mPrograms;
|
||||||
|
|
|
@ -313,19 +313,6 @@ bool SwRenderer::sync()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RenderRegion SwRenderer::viewport()
|
|
||||||
{
|
|
||||||
return vport;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool SwRenderer::viewport(const RenderRegion& vp)
|
|
||||||
{
|
|
||||||
vport = vp;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool SwRenderer::target(pixel_t* data, uint32_t stride, uint32_t w, uint32_t h, ColorSpace cs)
|
bool SwRenderer::target(pixel_t* data, uint32_t stride, uint32_t w, uint32_t h, ColorSpace cs)
|
||||||
{
|
{
|
||||||
if (!data || stride == 0 || w == 0 || h == 0 || w > stride) return false;
|
if (!data || stride == 0 || w == 0 || h == 0 || w > stride) return false;
|
||||||
|
|
|
@ -46,8 +46,6 @@ public:
|
||||||
bool postRender() override;
|
bool postRender() override;
|
||||||
void dispose(RenderData data) override;
|
void dispose(RenderData data) override;
|
||||||
RenderRegion region(RenderData data) override;
|
RenderRegion region(RenderData data) override;
|
||||||
RenderRegion viewport() override;
|
|
||||||
bool viewport(const RenderRegion& vp) override;
|
|
||||||
bool blend(BlendMethod method) override;
|
bool blend(BlendMethod method) override;
|
||||||
ColorSpace colorSpace() override;
|
ColorSpace colorSpace() override;
|
||||||
const RenderSurface* mainSurface() override;
|
const RenderSurface* mainSurface() override;
|
||||||
|
@ -76,7 +74,6 @@ private:
|
||||||
Array<SwTask*> tasks; //async task list
|
Array<SwTask*> tasks; //async task list
|
||||||
Array<SwSurface*> compositors; //render targets cache list
|
Array<SwSurface*> compositors; //render targets cache list
|
||||||
SwMpool* mpool; //private memory pool
|
SwMpool* mpool; //private memory pool
|
||||||
RenderRegion vport; //viewport
|
|
||||||
bool sharedMpool; //memory-pool behavior policy
|
bool sharedMpool; //memory-pool behavior policy
|
||||||
|
|
||||||
SwRenderer();
|
SwRenderer();
|
||||||
|
|
|
@ -40,6 +40,20 @@ uint32_t RenderMethod::unref()
|
||||||
return (--refCnt);
|
return (--refCnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RenderRegion RenderMethod::viewport()
|
||||||
|
{
|
||||||
|
return vport;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool RenderMethod::viewport(const RenderRegion& vp)
|
||||||
|
{
|
||||||
|
vport = vp;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
/* RenderPath Class Implementation */
|
/* RenderPath Class Implementation */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
|
@ -423,10 +423,17 @@ private:
|
||||||
uint32_t refCnt = 0; //reference count
|
uint32_t refCnt = 0; //reference count
|
||||||
Key key;
|
Key key;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
RenderRegion vport; //viewport
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//common implementation
|
||||||
uint32_t ref();
|
uint32_t ref();
|
||||||
uint32_t unref();
|
uint32_t unref();
|
||||||
|
RenderRegion viewport();
|
||||||
|
bool viewport(const RenderRegion& vp);
|
||||||
|
|
||||||
|
//main features
|
||||||
virtual ~RenderMethod() {}
|
virtual ~RenderMethod() {}
|
||||||
virtual bool preUpdate() = 0;
|
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(const RenderShape& rshape, RenderData data, const Matrix& transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) = 0;
|
||||||
|
@ -438,8 +445,6 @@ public:
|
||||||
virtual bool postRender() = 0;
|
virtual bool postRender() = 0;
|
||||||
virtual void dispose(RenderData data) = 0;
|
virtual void dispose(RenderData data) = 0;
|
||||||
virtual RenderRegion region(RenderData data) = 0;
|
virtual RenderRegion region(RenderData data) = 0;
|
||||||
virtual RenderRegion viewport() = 0;
|
|
||||||
virtual bool viewport(const RenderRegion& vp) = 0;
|
|
||||||
virtual bool blend(BlendMethod method) = 0;
|
virtual bool blend(BlendMethod method) = 0;
|
||||||
virtual ColorSpace colorSpace() = 0;
|
virtual ColorSpace colorSpace() = 0;
|
||||||
virtual const RenderSurface* mainSurface() = 0;
|
virtual const RenderSurface* mainSurface() = 0;
|
||||||
|
@ -447,10 +452,12 @@ public:
|
||||||
virtual bool clear() = 0;
|
virtual bool clear() = 0;
|
||||||
virtual bool sync() = 0;
|
virtual bool sync() = 0;
|
||||||
|
|
||||||
|
//compositions
|
||||||
virtual RenderCompositor* target(const RenderRegion& region, ColorSpace cs, CompositionFlag flags) = 0;
|
virtual RenderCompositor* target(const RenderRegion& region, ColorSpace cs, CompositionFlag flags) = 0;
|
||||||
virtual bool beginComposite(RenderCompositor* cmp, MaskMethod method, uint8_t opacity) = 0;
|
virtual bool beginComposite(RenderCompositor* cmp, MaskMethod method, uint8_t opacity) = 0;
|
||||||
virtual bool endComposite(RenderCompositor* cmp) = 0;
|
virtual bool endComposite(RenderCompositor* cmp) = 0;
|
||||||
|
|
||||||
|
//post effects
|
||||||
virtual void prepare(RenderEffect* effect, const Matrix& transform) = 0;
|
virtual void prepare(RenderEffect* effect, const Matrix& transform) = 0;
|
||||||
virtual bool region(RenderEffect* effect) = 0;
|
virtual bool region(RenderEffect* effect) = 0;
|
||||||
virtual bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) = 0;
|
virtual bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) = 0;
|
||||||
|
|
|
@ -146,7 +146,7 @@ RenderData WgRenderer::prepare(const RenderShape& rshape, RenderData data, const
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup fill settings
|
// setup fill settings
|
||||||
renderDataShape->viewport = mViewport;
|
renderDataShape->viewport = vport;
|
||||||
if (flags & RenderUpdateFlag::Gradient && rshape.fill) renderDataShape->renderSettingsShape.update(mContext, rshape.fill);
|
if (flags & RenderUpdateFlag::Gradient && rshape.fill) renderDataShape->renderSettingsShape.update(mContext, rshape.fill);
|
||||||
else if (flags & RenderUpdateFlag::Color) renderDataShape->renderSettingsShape.update(mContext, rshape.color);
|
else if (flags & RenderUpdateFlag::Color) renderDataShape->renderSettingsShape.update(mContext, rshape.color);
|
||||||
if (rshape.stroke) {
|
if (rshape.stroke) {
|
||||||
|
@ -165,7 +165,7 @@ RenderData WgRenderer::prepare(RenderSurface* surface, RenderData data, const Ma
|
||||||
auto renderDataPicture = data ? (WgRenderDataPicture*)data : mRenderDataPicturePool.allocate(mContext);
|
auto renderDataPicture = data ? (WgRenderDataPicture*)data : mRenderDataPicturePool.allocate(mContext);
|
||||||
|
|
||||||
// update paint settings
|
// update paint settings
|
||||||
renderDataPicture->viewport = mViewport;
|
renderDataPicture->viewport = vport;
|
||||||
if (flags & (RenderUpdateFlag::Transform | RenderUpdateFlag::Blend)) {
|
if (flags & (RenderUpdateFlag::Transform | RenderUpdateFlag::Blend)) {
|
||||||
renderDataPicture->renderSettings.update(mContext, transform, surface->cs, opacity);
|
renderDataPicture->renderSettings.update(mContext, transform, surface->cs, opacity);
|
||||||
}
|
}
|
||||||
|
@ -280,18 +280,6 @@ RenderRegion WgRenderer::region(RenderData data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RenderRegion WgRenderer::viewport() {
|
|
||||||
return mViewport;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool WgRenderer::viewport(const RenderRegion& vp)
|
|
||||||
{
|
|
||||||
mViewport = vp;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool WgRenderer::blend(BlendMethod method)
|
bool WgRenderer::blend(BlendMethod method)
|
||||||
{
|
{
|
||||||
mBlendMethod = method;
|
mBlendMethod = method;
|
||||||
|
|
|
@ -38,8 +38,6 @@ public:
|
||||||
bool postRender() override;
|
bool postRender() override;
|
||||||
void dispose(RenderData data) override;
|
void dispose(RenderData data) override;
|
||||||
RenderRegion region(RenderData data) override;
|
RenderRegion region(RenderData data) override;
|
||||||
RenderRegion viewport() override;
|
|
||||||
bool viewport(const RenderRegion& vp) override;
|
|
||||||
bool blend(BlendMethod method) override;
|
bool blend(BlendMethod method) override;
|
||||||
ColorSpace colorSpace() override;
|
ColorSpace colorSpace() override;
|
||||||
const RenderSurface* mainSurface() override;
|
const RenderSurface* mainSurface() override;
|
||||||
|
@ -95,7 +93,6 @@ private:
|
||||||
// rendering states
|
// rendering states
|
||||||
RenderSurface mTargetSurface;
|
RenderSurface mTargetSurface;
|
||||||
BlendMethod mBlendMethod{};
|
BlendMethod mBlendMethod{};
|
||||||
RenderRegion mViewport{};
|
|
||||||
|
|
||||||
// disposable data list
|
// disposable data list
|
||||||
Array<RenderData> mDisposeRenderDatas{};
|
Array<RenderData> mDisposeRenderDatas{};
|
||||||
|
|
Loading…
Add table
Reference in a new issue