common: code refactoring

trivial changes to utilize RenderData type.
This commit is contained in:
Hermet Park 2023-04-10 11:38:20 +09:00
parent 4f3b718c3f
commit 033a65b560
5 changed files with 27 additions and 26 deletions

View file

@ -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;
} }

View file

@ -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);
} }

View file

@ -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};
} }

View file

@ -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. */

View file

@ -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;