mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-14 12:04:29 +00:00
sw_engine: step backward optimization.
As profiled, raster parallelization is not so efficient, we revert this behavior. We will come again with a better fine-tuned method.
This commit is contained in:
parent
c7646d3f73
commit
1f05c249af
2 changed files with 9 additions and 17 deletions
|
@ -98,7 +98,8 @@ SwRenderer::~SwRenderer()
|
||||||
|
|
||||||
bool SwRenderer::clear()
|
bool SwRenderer::clear()
|
||||||
{
|
{
|
||||||
if (this->valid() || tasks.size() > 0) return false;
|
for (auto task : tasks) task->get();
|
||||||
|
tasks.clear();
|
||||||
|
|
||||||
return flush();
|
return flush();
|
||||||
}
|
}
|
||||||
|
@ -106,8 +107,6 @@ bool SwRenderer::clear()
|
||||||
|
|
||||||
bool SwRenderer::flush()
|
bool SwRenderer::flush()
|
||||||
{
|
{
|
||||||
this->get(); //complete rendering
|
|
||||||
|
|
||||||
for (auto task : tasks) task->get();
|
for (auto task : tasks) task->get();
|
||||||
tasks.clear();
|
tasks.clear();
|
||||||
|
|
||||||
|
@ -135,21 +134,13 @@ bool SwRenderer::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t
|
||||||
|
|
||||||
|
|
||||||
bool SwRenderer::preRender()
|
bool SwRenderer::preRender()
|
||||||
{
|
|
||||||
//before we start rendering, we should finish all preparing tasks
|
|
||||||
for (auto task : tasks) task->get();
|
|
||||||
|
|
||||||
TaskScheduler::request(this);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SwRenderer::run()
|
|
||||||
{
|
{
|
||||||
rasterClear(surface);
|
rasterClear(surface);
|
||||||
|
|
||||||
|
//before we start rendering, we should finish all preparing tasks
|
||||||
for (auto task : tasks) {
|
for (auto task : tasks) {
|
||||||
|
task->get();
|
||||||
|
|
||||||
uint8_t r, g, b, a;
|
uint8_t r, g, b, a;
|
||||||
if (auto fill = task->sdata->fill()) {
|
if (auto fill = task->sdata->fill()) {
|
||||||
rasterGradientShape(surface, &task->shape, fill->id());
|
rasterGradientShape(surface, &task->shape, fill->id());
|
||||||
|
@ -161,7 +152,9 @@ void SwRenderer::run()
|
||||||
if (a > 0) rasterStroke(surface, &task->shape, r, g, b, a);
|
if (a > 0) rasterStroke(surface, &task->shape, r, g, b, a);
|
||||||
}
|
}
|
||||||
tasks.clear();
|
tasks.clear();
|
||||||
};
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool SwRenderer::dispose(TVG_UNUSED const Shape& sdata, void *data)
|
bool SwRenderer::dispose(TVG_UNUSED const Shape& sdata, void *data)
|
||||||
|
|
|
@ -28,7 +28,7 @@ struct SwTask;
|
||||||
namespace tvg
|
namespace tvg
|
||||||
{
|
{
|
||||||
|
|
||||||
class SwRenderer : public RenderMethod, public Task
|
class SwRenderer : public RenderMethod
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void* prepare(const Shape& shape, void* data, const RenderTransform* transform, RenderUpdateFlag flags) override;
|
void* prepare(const Shape& shape, void* data, const RenderTransform* transform, RenderUpdateFlag flags) override;
|
||||||
|
@ -39,7 +39,6 @@ public:
|
||||||
bool flush() override;
|
bool flush() override;
|
||||||
uint32_t ref() override;
|
uint32_t ref() override;
|
||||||
uint32_t unref() override;
|
uint32_t unref() override;
|
||||||
void run() override;
|
|
||||||
|
|
||||||
static SwRenderer* inst();
|
static SwRenderer* inst();
|
||||||
static int init();
|
static int init();
|
||||||
|
|
Loading…
Add table
Reference in a new issue