mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 21:53:41 +00:00
common: code refactoring
trivial changes to utilize RenderData type.
This commit is contained in:
parent
4f3b718c3f
commit
033a65b560
5 changed files with 27 additions and 26 deletions
|
@ -184,7 +184,7 @@ bool Paint::Impl::render(RenderMethod& renderer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void* Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pTransform, uint32_t opacity, Array<RenderData>& clips, uint32_t pFlag, bool clipper)
|
RenderData Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pTransform, uint32_t opacity, Array<RenderData>& clips, uint32_t pFlag, bool clipper)
|
||||||
{
|
{
|
||||||
if (renderFlag & RenderUpdateFlag::Transform) {
|
if (renderFlag & RenderUpdateFlag::Transform) {
|
||||||
if (!rTransform) return nullptr;
|
if (!rTransform) return nullptr;
|
||||||
|
@ -195,9 +195,10 @@ void* Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pTransf
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 1. Composition Pre Processing */
|
/* 1. Composition Pre Processing */
|
||||||
void *tdata = nullptr;
|
RenderData trd = nullptr; //composite target render data
|
||||||
RenderRegion viewport;
|
RenderRegion viewport;
|
||||||
bool compFastTrack = false;
|
bool compFastTrack = false;
|
||||||
|
bool childClipper = false;
|
||||||
|
|
||||||
if (compData) {
|
if (compData) {
|
||||||
auto target = compData->target;
|
auto target = compData->target;
|
||||||
|
@ -224,31 +225,31 @@ void* Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pTransf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!compFastTrack) {
|
if (!compFastTrack) {
|
||||||
auto clipper = compData->method == CompositeMethod::ClipPath ? true : false;
|
childClipper = compData->method == CompositeMethod::ClipPath ? true : false;
|
||||||
tdata = target->pImpl->update(renderer, pTransform, 255, clips, pFlag, clipper);
|
trd = target->pImpl->update(renderer, pTransform, 255, clips, pFlag, childClipper);
|
||||||
if (method == CompositeMethod::ClipPath) clips.push(tdata);
|
if (childClipper) clips.push(trd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 2. Main Update */
|
/* 2. Main Update */
|
||||||
void *edata = nullptr;
|
RenderData rd = nullptr;
|
||||||
auto newFlag = static_cast<RenderUpdateFlag>(pFlag | renderFlag);
|
auto newFlag = static_cast<RenderUpdateFlag>(pFlag | renderFlag);
|
||||||
renderFlag = RenderUpdateFlag::None;
|
renderFlag = RenderUpdateFlag::None;
|
||||||
opacity = (opacity * this->opacity) / 255;
|
opacity = (opacity * this->opacity) / 255;
|
||||||
|
|
||||||
if (rTransform && pTransform) {
|
if (rTransform && pTransform) {
|
||||||
RenderTransform outTransform(pTransform, rTransform);
|
RenderTransform outTransform(pTransform, rTransform);
|
||||||
edata = smethod->update(renderer, &outTransform, opacity, clips, newFlag, clipper);
|
rd = smethod->update(renderer, &outTransform, opacity, clips, newFlag, clipper);
|
||||||
} else {
|
} else {
|
||||||
auto outTransform = pTransform ? pTransform : rTransform;
|
auto outTransform = pTransform ? pTransform : rTransform;
|
||||||
edata = smethod->update(renderer, outTransform, opacity, clips, newFlag, clipper);
|
rd = smethod->update(renderer, outTransform, opacity, clips, newFlag, clipper);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 3. Composition Post Processing */
|
/* 3. Composition Post Processing */
|
||||||
if (compFastTrack) renderer.viewport(viewport);
|
if (compFastTrack) renderer.viewport(viewport);
|
||||||
else if (tdata && compData->method == CompositeMethod::ClipPath) clips.pop();
|
else if (childClipper) clips.pop();
|
||||||
|
|
||||||
return edata;
|
return rd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,7 @@ namespace tvg
|
||||||
bool scale(float factor);
|
bool scale(float factor);
|
||||||
bool translate(float x, float y);
|
bool translate(float x, float y);
|
||||||
bool bounds(float* x, float* y, float* w, float* h, bool transformed);
|
bool bounds(float* x, float* y, float* w, float* h, bool transformed);
|
||||||
void* update(RenderMethod& renderer, const RenderTransform* pTransform, uint32_t opacity, Array<RenderData>& clips, uint32_t pFlag, bool clipper = false);
|
RenderData update(RenderMethod& renderer, const RenderTransform* pTransform, uint32_t opacity, Array<RenderData>& clips, uint32_t pFlag, bool clipper = false);
|
||||||
bool render(RenderMethod& renderer);
|
bool render(RenderMethod& renderer);
|
||||||
Paint* duplicate();
|
Paint* duplicate();
|
||||||
};
|
};
|
||||||
|
@ -176,7 +176,7 @@ namespace tvg
|
||||||
return inst->dispose(renderer);
|
return inst->dispose(renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* update(RenderMethod& renderer, const RenderTransform* transform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag renderFlag, bool clipper) override
|
RenderData update(RenderMethod& renderer, const RenderTransform* transform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag renderFlag, bool clipper) override
|
||||||
{
|
{
|
||||||
return inst->update(renderer, transform, opacity, clips, renderFlag, clipper);
|
return inst->update(renderer, transform, opacity, clips, renderFlag, clipper);
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,10 +66,10 @@ struct Picture::Impl
|
||||||
Surface* surface = nullptr; //bitmap picture uses
|
Surface* surface = nullptr; //bitmap picture uses
|
||||||
Polygon* triangles = nullptr; //mesh data
|
Polygon* triangles = nullptr; //mesh data
|
||||||
uint32_t triangleCnt = 0; //mesh triangle count
|
uint32_t triangleCnt = 0; //mesh triangle count
|
||||||
void* rdata = nullptr; //engine data
|
RenderData rd = nullptr; //engine data
|
||||||
float w = 0, h = 0;
|
float w = 0, h = 0;
|
||||||
bool resizing = false;
|
|
||||||
uint32_t rendererColorSpace = 0;
|
uint32_t rendererColorSpace = 0;
|
||||||
|
bool resizing = false;
|
||||||
|
|
||||||
~Impl()
|
~Impl()
|
||||||
{
|
{
|
||||||
|
@ -84,8 +84,8 @@ struct Picture::Impl
|
||||||
if (paint) {
|
if (paint) {
|
||||||
ret = paint->pImpl->dispose(renderer);
|
ret = paint->pImpl->dispose(renderer);
|
||||||
} else if (surface) {
|
} else if (surface) {
|
||||||
ret = renderer.dispose(rdata);
|
ret = renderer.dispose(rd);
|
||||||
rdata = nullptr;
|
rd = nullptr;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -131,29 +131,29 @@ struct Picture::Impl
|
||||||
else return RenderTransform(pTransform, &tmp);
|
else return RenderTransform(pTransform, &tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* update(RenderMethod &renderer, const RenderTransform* pTransform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag pFlag, bool clipper)
|
RenderData update(RenderMethod &renderer, const RenderTransform* pTransform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag pFlag, bool clipper)
|
||||||
{
|
{
|
||||||
rendererColorSpace = renderer.colorSpace();
|
rendererColorSpace = renderer.colorSpace();
|
||||||
auto flag = reload();
|
auto flag = reload();
|
||||||
|
|
||||||
if (surface) {
|
if (surface) {
|
||||||
auto transform = resizeTransform(pTransform);
|
auto transform = resizeTransform(pTransform);
|
||||||
rdata = renderer.prepare(surface, triangles, triangleCnt, rdata, &transform, opacity, clips, static_cast<RenderUpdateFlag>(pFlag | flag));
|
rd = renderer.prepare(surface, triangles, triangleCnt, rd, &transform, opacity, clips, static_cast<RenderUpdateFlag>(pFlag | flag));
|
||||||
} else if (paint) {
|
} else if (paint) {
|
||||||
if (resizing) {
|
if (resizing) {
|
||||||
loader->resize(paint, w, h);
|
loader->resize(paint, w, h);
|
||||||
resizing = false;
|
resizing = false;
|
||||||
}
|
}
|
||||||
rdata = paint->pImpl->update(renderer, pTransform, opacity, clips, static_cast<RenderUpdateFlag>(pFlag | flag), clipper);
|
rd = paint->pImpl->update(renderer, pTransform, opacity, clips, static_cast<RenderUpdateFlag>(pFlag | flag), clipper);
|
||||||
}
|
}
|
||||||
return rdata;
|
return rd;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool render(RenderMethod &renderer)
|
bool render(RenderMethod &renderer)
|
||||||
{
|
{
|
||||||
if (surface) {
|
if (surface) {
|
||||||
if (triangles) return renderer.renderImageMesh(rdata);
|
if (triangles) return renderer.renderImageMesh(rd);
|
||||||
else return renderer.renderImage(rdata);
|
else return renderer.renderImage(rd);
|
||||||
}
|
}
|
||||||
else if (paint) return paint->pImpl->render(renderer);
|
else if (paint) return paint->pImpl->render(renderer);
|
||||||
return false;
|
return false;
|
||||||
|
@ -214,7 +214,7 @@ struct Picture::Impl
|
||||||
|
|
||||||
RenderRegion bounds(RenderMethod& renderer)
|
RenderRegion bounds(RenderMethod& renderer)
|
||||||
{
|
{
|
||||||
if (rdata) return renderer.region(rdata);
|
if (rd) return renderer.region(rd);
|
||||||
if (paint) return paint->pImpl->bounds(renderer);
|
if (paint) return paint->pImpl->bounds(renderer);
|
||||||
return {0, 0, 0, 0};
|
return {0, 0, 0, 0};
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ struct Scene::Impl
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* update(RenderMethod &renderer, const RenderTransform* transform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag flag, bool clipper)
|
RenderData update(RenderMethod &renderer, const RenderTransform* transform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag flag, bool clipper)
|
||||||
{
|
{
|
||||||
/* Overriding opacity value. If this scene is half-translucent,
|
/* Overriding opacity value. If this scene is half-translucent,
|
||||||
It must do intermeidate composition with that opacity value. */
|
It must do intermeidate composition with that opacity value. */
|
||||||
|
|
|
@ -48,7 +48,7 @@ struct Shape::Impl
|
||||||
return renderer.renderShape(rd);
|
return renderer.renderShape(rd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* update(RenderMethod& renderer, const RenderTransform* transform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag pFlag, bool clipper)
|
RenderData update(RenderMethod& renderer, const RenderTransform* transform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag pFlag, bool clipper)
|
||||||
{
|
{
|
||||||
rd = renderer.prepare(rs, rd, transform, opacity, clips, static_cast<RenderUpdateFlag>(pFlag | flag), clipper);
|
rd = renderer.prepare(rs, rd, transform, opacity, clips, static_cast<RenderUpdateFlag>(pFlag | flag), clipper);
|
||||||
flag = RenderUpdateFlag::None;
|
flag = RenderUpdateFlag::None;
|
||||||
|
|
Loading…
Add table
Reference in a new issue