paysages3d/src/render/software/RenderProgress.cpp
Michaël Lemaire 7c7b6043c5 Improved render progress.
A bug was also fixed where some canvas pixels were shaded twice,
leading to a performance loss.
2015-08-23 20:22:37 +02:00

55 lines
825 B
C++

#include "RenderProgress.h"
#include "Mutex.h"
RenderProgress::RenderProgress(int count)
{
lock = new Mutex();
global = 0.0;
step = 1.0 / (double)count;
}
paysages::software::RenderProgress::~RenderProgress()
{
delete lock;
}
void RenderProgress::add(int value)
{
lock->acquire();
global += step * (double)value;
lock->release();
}
void RenderProgress::enterSub(int count)
{
struct RenderSub sub;
sub.start = global;
sub.end = global + step;
sub.count = count;
sub.previous_step = step;
lock->acquire();
subs.push(sub);
step /= (double)count;
lock->release();
}
void RenderProgress::exitSub()
{
lock->acquire();
struct RenderSub sub = subs.top();
global = sub.end;
step = sub.previous_step;
subs.pop();
lock->release();
}