|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef TRENDERER_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
#define TRENDERER_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "trasterfx.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef DVAPI
|
|
Toshihiro Shimizu |
890ddd |
#undef DVVAR
|
|
Toshihiro Shimizu |
890ddd |
#ifdef TFX_EXPORTS
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_EXPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_EXPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_IMPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_IMPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TRenderer;
|
|
Toshihiro Shimizu |
890ddd |
class TRendererImp;
|
|
Toshihiro Shimizu |
890ddd |
class TException;
|
|
Toshihiro Shimizu |
890ddd |
class TRenderSettings;
|
|
Toshihiro Shimizu |
890ddd |
class TRasterFxP;
|
|
Toshihiro Shimizu |
890ddd |
class TFxCacheManager;
|
|
Toshihiro Shimizu |
890ddd |
class TRenderResourceManager;
|
|
Toshihiro Shimizu |
890ddd |
class TRenderResourceManagerGenerator;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class TFxPair {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TRasterFxP m_frameA, m_frameB;
|
|
Shinya Kitaoka |
120a6e |
TFxPair() : m_frameA(), m_frameB() {}
|
|
Shinya Kitaoka |
120a6e |
TFxPair(const TRasterFxP &frameA, TRasterFxP &frameB)
|
|
Shinya Kitaoka |
120a6e |
: m_frameA(frameA), m_frameB(frameB) {}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// typedef std::pair<trasterfxp, trasterfxp=""> TFxPair;</trasterfxp,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TRenderPort {
|
|
Shinya Kitaoka |
120a6e |
TRectD m_renderArea;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
struct RenderData;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TRenderPort();
|
|
Shinya Kitaoka |
120a6e |
virtual ~TRenderPort();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setRenderArea(const TRectD &area);
|
|
Shinya Kitaoka |
120a6e |
TRectD &getRenderArea();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
virtual void onRenderRasterStarted(const RenderData &renderData) {}
|
|
Shinya Kitaoka |
120a6e |
virtual void onRenderRasterCompleted(const RenderData &renderData) {}
|
|
Shinya Kitaoka |
120a6e |
virtual void onRenderFailure(const RenderData &renderData, TException &e) {}
|
|
Shinya Kitaoka |
120a6e |
virtual void onRenderFinished(bool isCanceled = false) {}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! rendered frames from TRenderer. In order to avoid recalculation of identical
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! render process, they are merged in one 'equivalence cluster' of which only
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
struct TRenderPort::RenderData {
|
|
Shinya Kitaoka |
120a6e |
std::vector<double> m_frames;
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings m_info;
|
|
Shinya Kitaoka |
120a6e |
TRasterP m_rasA, m_rasB; //!< The output images; m_rasB is not empty only for
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
unsigned long m_renderId;
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
unsigned long m_taskId;
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
RenderData() : m_renderId((unsigned long)-1), m_taskId((unsigned long)-1) {}
|
|
Shinya Kitaoka |
120a6e |
RenderData(const std::vector<double> &frames, const TRenderSettings &info,</double>
|
|
Shinya Kitaoka |
120a6e |
const TRasterP &rasA, const TRasterP &rasB, unsigned long renderId,
|
|
Shinya Kitaoka |
120a6e |
unsigned long taskId)
|
|
Shinya Kitaoka |
120a6e |
: m_frames(frames)
|
|
Shinya Kitaoka |
120a6e |
, m_info(info)
|
|
Shinya Kitaoka |
120a6e |
, m_rasA(rasA)
|
|
Shinya Kitaoka |
120a6e |
, m_rasB(rasB)
|
|
Shinya Kitaoka |
120a6e |
, m_renderId(renderId)
|
|
Shinya Kitaoka |
120a6e |
, m_taskId(taskId) {}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! of separate threads through the \b startRendering() methods. After this is
|
|
Shinya Kitaoka |
120a6e |
//! done,
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! which
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! id in case
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! which remains in background. This means that users have no necessity of
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! TRenderer instance alive as a render process is running. We may, for
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! process. This is especially useful when it is known that multiple rendering
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! some common resources (likewise, intermediate cache results), which can be
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
//! in the same internal TRenderer representation for later use.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! even in those cases -
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! methods and invoking install() and uninstall() on each rendering thread
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TRenderer {
|
|
Shinya Kitaoka |
120a6e |
TRendererImp *m_imp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
friend class TRenderResourceManagerGenerator;
|
|
Shinya Kitaoka |
120a6e |
TRenderResourceManager *getManager(unsigned int id) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
struct RenderData {
|
|
Shinya Kitaoka |
120a6e |
double m_frame;
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings m_info;
|
|
Shinya Kitaoka |
120a6e |
TFxPair m_fxRoot; // The second of pair is used for field interlacing or
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
RenderData(double frame, const TRenderSettings &info, const TFxPair &fxRoot)
|
|
Shinya Kitaoka |
120a6e |
: m_frame(frame), m_info(info), m_fxRoot(fxRoot) {}
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TRenderer(int nThread = 1);
|
|
Shinya Kitaoka |
120a6e |
TRenderer(TRendererImp *);
|
|
Shinya Kitaoka |
120a6e |
~TRenderer();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TRenderer(const TRenderer &);
|
|
Shinya Kitaoka |
120a6e |
void operator=(const TRenderer &);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
operator bool() const { return m_imp; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void addPort(TRenderPort *port);
|
|
Shinya Kitaoka |
120a6e |
void removePort(TRenderPort *port);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
unsigned long startRendering(
|
|
Shinya Kitaoka |
120a6e |
const std::vector<trenderer::renderdata> *renderDatas);</trenderer::renderdata>
|
|
Shinya Kitaoka |
120a6e |
unsigned long startRendering(double f, const TRenderSettings &info,
|
|
Shinya Kitaoka |
120a6e |
const TFxPair &actualRoot);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void abortRendering(unsigned long renderId);
|
|
Shinya Kitaoka |
120a6e |
void stopRendering(bool waitForCompleteStop = false);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void enablePrecomputing(bool on);
|
|
Shinya Kitaoka |
120a6e |
bool isPrecomputingEnabled() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setThreadsCount(int nThreads);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static TRenderer instance();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
unsigned long rendererId();
|
|
Shinya Kitaoka |
120a6e |
static unsigned long renderId();
|
|
Shinya Kitaoka |
120a6e |
static unsigned long nextRenderId();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
enum RenderStatus {
|
|
Shinya Kitaoka |
120a6e |
IDLE = 0x0,
|
|
Shinya Kitaoka |
120a6e |
FIRSTRUN = 0x1,
|
|
Shinya Kitaoka |
120a6e |
TESTRUN = 0x2,
|
|
Shinya Kitaoka |
120a6e |
COMPUTING = 0x4
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Shinya Kitaoka |
120a6e |
int getRenderStatus(unsigned long renderId) const;
|
|
Shinya Kitaoka |
120a6e |
bool isAborted(unsigned long renderId) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// To install the TRenderer on lower-level rendering invocations
|
|
Shinya Kitaoka |
120a6e |
static unsigned long buildRenderId();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void declareRenderStart(unsigned long renderId);
|
|
Shinya Kitaoka |
120a6e |
void declareRenderEnd(unsigned long renderId);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void declareFrameStart(double frame);
|
|
Shinya Kitaoka |
120a6e |
void declareFrameEnd(double frame);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void install(unsigned long renderId);
|
|
Shinya Kitaoka |
120a6e |
void uninstall();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static void initialize();
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
typedef std::vector<trenderer::renderdata> RenderDataVector;</trenderer::renderdata>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|