Restored progress display in CLI render

This commit is contained in:
Michaël Lemaire 2015-08-12 22:11:26 +02:00
parent 6f8e0c3cfd
commit a4edc9568b
2 changed files with 56 additions and 24 deletions

View file

@ -9,17 +9,48 @@
#include "Scenery.h" #include "Scenery.h"
#include "RenderConfig.h" #include "RenderConfig.h"
#include "ColorProfile.h" #include "ColorProfile.h"
#include "Thread.h"
void startRender(SoftwareCanvasRenderer *renderer, char *outputpath) class RenderThread: public Thread
{ {
public:
RenderThread(SoftwareCanvasRenderer *renderer, char *outputpath):
renderer(renderer), outputpath(outputpath)
{
}
virtual void run() override
{
renderer->render();
}
private:
SoftwareCanvasRenderer *renderer;
char *outputpath;
};
static void startRender(SoftwareCanvasRenderer *renderer, char *outputpath)
{
RenderThread thread(renderer, outputpath);
printf("\rRendering %s ... \n", outputpath); printf("\rRendering %s ... \n", outputpath);
renderer->render(); thread.start();
while (thread.isWorking())
{
Thread::timeSleepMs(200);
printf("\rProgress : %0.1f%% ", renderer->getProgress() * 100.0);
fflush(stdout);
}
thread.join();
printf("\rSaving %s ... \n", outputpath); printf("\rSaving %s ... \n", outputpath);
remove(outputpath); remove(outputpath);
renderer->saveToDisk(outputpath); renderer->saveToDisk(outputpath);
} }
void displayHelp() static void displayHelp()
{ {
printf("Usage : paysages-cli [options]\n"); printf("Usage : paysages-cli [options]\n");
printf("Options :\n"); printf("Options :\n");
@ -37,17 +68,11 @@ void displayHelp()
printf(" -cz z Camera Z step (double)\n"); printf(" -cz z Camera Z step (double)\n");
} }
void _previewUpdate(double progress)
{
printf("\rProgress : %0.1f%% ", progress * 100.0);
fflush(stdout);
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
SoftwareCanvasRenderer* renderer; SoftwareCanvasRenderer* renderer;
char* conf_file_path = NULL; char* conf_file_path = NULL;
RenderConfig conf_render_params(800, 600, 1, 5); RenderConfig conf_render_params(400, 300, 1, 3);
int conf_first_picture = 0; int conf_first_picture = 0;
int conf_nb_pictures = 1; int conf_nb_pictures = 1;
double conf_daytime_start = 0.4; double conf_daytime_start = 0.4;
@ -185,7 +210,7 @@ int main(int argc, char** argv)
if (outputcount >= conf_first_picture) if (outputcount >= conf_first_picture)
{ {
sprintf(outputpath, "output/pic%05d.png", outputcount); sprintf(outputpath, "pic%05d.png", outputcount);
startRender(renderer, outputpath); startRender(renderer, outputpath);
} }

View file

@ -11,37 +11,44 @@ namespace system
typedef void* (*ThreadFunction)(void* data); typedef void* (*ThreadFunction)(void* data);
/*! /**
* \brief System thread * System thread
*/ */
class SYSTEMSHARED_EXPORT Thread: private QThread class SYSTEMSHARED_EXPORT Thread: private QThread
{ {
public: public:
/*! /**
* \brief Create a new thread * Create a new thread.
* *
* The thread is not started automatically. A call to method start() needs to be done. * The thread is not started automatically. A call to method start() needs to be done.
* \param function Function to call inside the thread once it is started *
* Either the *function* argument should be provided (with the function to call from the
* thread), or the *run* method overridden.
*/ */
Thread(ThreadFunction function=0); Thread(ThreadFunction function=0);
/*! /**
* \brief Start the thread * Start the thread, with custom data.
* \param data User data to pass to the threaded function
*/ */
void start(void* data=0); void start(void* data=0);
/*! /**
* \brief Wait for the thread to end, and collect its result. * Wait for the thread to end, and collect its result.
* \return The value returned by the threaded function. *
* Returns the value returned by the threaded function.
*/ */
void* join(); void* join();
/**
* Return true if the thread is currently running.
*/
inline bool isWorking() const {return not isFinished();}
static inline void timeSleepMs(unsigned long ms){ QThread::msleep(ms); } static inline void timeSleepMs(unsigned long ms){ QThread::msleep(ms); }
protected: protected:
/*! /**
* \brief Function to reimplement if no ThreadFunction has been passed to the constructor. * Function to reimplement if no ThreadFunction has been passed to the constructor.
*/ */
virtual void run(); virtual void run();