virtual bool dispose(RenderMethod& renderer) = 0;
virtual void* update(RenderMethod& renderer, const RenderTransform* transform, uint32_t opacity, Array<RenderData>& clips, RenderUpdateFlag pFlag) = 0; //Return engine data if it has.
- virtual bool render(RenderMethod& renderer, uint32_t opacity) = 0;
+ virtual bool render(RenderMethod& renderer) = 0;
virtual bool bounds(float* x, float* y, float* w, float* h) const = 0;
virtual bool bounds(RenderMethod& renderer, uint32_t* x, uint32_t* y, uint32_t* w, uint32_t* h) const = 0;
virtual Paint* duplicate() = 0;
return edata;
}
- bool render(RenderMethod& renderer, uint32_t opacity)
+ bool render(RenderMethod& renderer)
{
Compositor* cmp = nullptr;
if (!cmpTarget->pImpl->bounds(renderer, &x, &y, &w, &h)) return false;
cmp = renderer.target(x, y, w, h);
renderer.beginComposite(cmp, CompositeMethod::None, 255);
- cmpTarget->pImpl->render(renderer, 255);
+ cmpTarget->pImpl->render(renderer);
}
if (cmp) renderer.beginComposite(cmp, CompositeMethod::AlphaMask, cmpTarget->pImpl->opacity);
- auto ret = smethod->render(renderer, ((opacity * this->opacity) / 255));
+ auto ret = smethod->render(renderer);
if (cmp) renderer.endComposite(cmp);
return inst->update(renderer, transform, opacity, clips, flag);
}
- bool render(RenderMethod& renderer, uint32_t opacity) override
+ bool render(RenderMethod& renderer) override
{
- return inst->render(renderer, opacity);
+ return inst->render(renderer);
}
Paint* duplicate() override
struct Scene::Impl
{
Array<Paint*> paints;
+ uint8_t opacity; //for composition
bool dispose(RenderMethod& renderer)
{
{
/* Overriding opacity value. If this scene is half-translucent,
It must do intermeidate composition with that opacity value. */
+ this->opacity = static_cast<uint8_t>(opacity);
if (opacity > 0) opacity = 255;
for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) {
return nullptr;
}
- bool render(RenderMethod& renderer, uint32_t opacity)
+ bool render(RenderMethod& renderer)
{
Compositor* cmp = nullptr;
}
for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) {
- if (!(*paint)->pImpl->render(renderer, opacity)) return false;
+ if (!(*paint)->pImpl->render(renderer)) return false;
}
if (cmp) renderer.endComposite(cmp);