2011-05-23 04:43:56 +02:00
|
|
|
/*
|
2011-05-23 05:46:40 +02:00
|
|
|
EngineService - primary service access point for using the renderengine
|
2011-05-23 04:43:56 +02:00
|
|
|
|
|
|
|
|
Copyright (C) Lumiera.org
|
2011-05-23 05:46:40 +02:00
|
|
|
2011, Hermann Vosseler <Ichthyostega@web.de>
|
2011-05-23 04:43:56 +02:00
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
|
modify it under the terms of the GNU General Public License as
|
|
|
|
|
published by the Free Software Foundation; either version 2 of
|
|
|
|
|
the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
|
|
|
|
|
|
* *****************************************************/
|
|
|
|
|
|
|
|
|
|
|
2011-05-23 05:46:40 +02:00
|
|
|
#include "proc/engine/engine-service.hpp"
|
2011-05-23 04:43:56 +02:00
|
|
|
|
2011-05-23 05:46:40 +02:00
|
|
|
//#include <string>
|
|
|
|
|
//#include <memory>
|
|
|
|
|
//#include <tr1/functional>
|
|
|
|
|
//#include <boost/scoped_ptr.hpp>
|
2011-05-23 04:43:56 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace proc {
|
2011-05-23 05:46:40 +02:00
|
|
|
namespace engine{
|
2011-05-23 04:43:56 +02:00
|
|
|
|
2011-05-23 05:46:40 +02:00
|
|
|
// using std::string;
|
|
|
|
|
// using lumiera::Subsys;
|
|
|
|
|
// using std::auto_ptr;
|
|
|
|
|
// using boost::scoped_ptr;
|
|
|
|
|
// using std::tr1::bind;
|
2011-08-16 03:02:55 +02:00
|
|
|
|
|
|
|
|
|
2011-08-15 00:52:56 +02:00
|
|
|
namespace { // hidden local details of the service implementation....
|
2011-05-23 04:43:56 +02:00
|
|
|
|
2011-08-15 00:52:56 +02:00
|
|
|
} // (End) hidden service impl details
|
|
|
|
|
|
2011-08-16 03:02:55 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/** storage for the EngineService interface object */
|
|
|
|
|
lib::Singleton<EngineService> EngineService::instance;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-08-15 00:52:56 +02:00
|
|
|
/** */
|
|
|
|
|
EngineService::EngineService()
|
|
|
|
|
{ }
|
2011-08-16 03:02:55 +02:00
|
|
|
|
|
|
|
|
|
2011-08-15 00:52:56 +02:00
|
|
|
|
2011-12-17 04:45:42 +01:00
|
|
|
/** core operation: activate the Lumiera Render Engine.
|
|
|
|
|
* Invoking this service effectively hooks up each channel
|
|
|
|
|
* of the given model exit point to deliver into the corresponding
|
|
|
|
|
* output sink on the given OutputConnection (which is assumed
|
|
|
|
|
* to be already allocated for active use by this connection).
|
|
|
|
|
* The generated calculation streams represent actively ongoing
|
|
|
|
|
* calculations within the engine, started right away, according
|
|
|
|
|
* to the given timing constraints and service quality.
|
|
|
|
|
*/
|
|
|
|
|
CalcStreams
|
2011-08-15 00:52:56 +02:00
|
|
|
EngineService::calculate(ModelPort mPort,
|
|
|
|
|
Timings nominalTimings,
|
2011-11-05 16:51:24 +01:00
|
|
|
OutputConnection& output,
|
2011-08-15 00:52:56 +02:00
|
|
|
Quality serviceQuality)
|
|
|
|
|
{
|
2011-12-17 04:45:42 +01:00
|
|
|
UNIMPLEMENTED ("build a list of standard calculation streams");
|
2011-08-15 00:52:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** */
|
2011-12-17 04:45:42 +01:00
|
|
|
CalcStreams
|
2011-08-15 00:52:56 +02:00
|
|
|
EngineService::calculateBackground(ModelPort mPort,
|
|
|
|
|
Timings nominalTimings,
|
|
|
|
|
Quality serviceQuality)
|
|
|
|
|
{
|
2011-12-17 04:45:42 +01:00
|
|
|
UNIMPLEMENTED ("build calculation streams for background rendering");
|
2011-08-15 00:52:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ===== Quality-of-Service ===== */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EngineService::Quality::~Quality() { } // emit vtables here...
|
|
|
|
|
|
|
|
|
|
enum CalcType {
|
|
|
|
|
PLAYBACK,
|
|
|
|
|
RENDER,
|
|
|
|
|
BACKGROUND
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DefaultQoS
|
|
|
|
|
: public EngineService::Quality
|
|
|
|
|
{
|
|
|
|
|
CalcType type_;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
DefaultQoS (CalcType type)
|
|
|
|
|
: type_(type)
|
|
|
|
|
{ }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class PriorityQoS
|
|
|
|
|
: public DefaultQoS
|
|
|
|
|
{
|
2011-08-18 12:31:26 +02:00
|
|
|
|
2011-08-15 00:52:56 +02:00
|
|
|
public:
|
|
|
|
|
PriorityQoS ()
|
|
|
|
|
: DefaultQoS(PLAYBACK)
|
|
|
|
|
{ }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class Compromise
|
|
|
|
|
: public DefaultQoS
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
Compromise (CalcType type)
|
|
|
|
|
: DefaultQoS(type)
|
|
|
|
|
{ }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EngineService::QoS_Definition EngineService::QoS_DEFAULT = QoS_Definition::build<DefaultQoS> (PLAYBACK);
|
|
|
|
|
EngineService::QoS_Definition EngineService::QoS_BACKGROUND = QoS_Definition::build<DefaultQoS> (BACKGROUND);
|
|
|
|
|
EngineService::QoS_Definition EngineService::QoS_COMPROMISE = QoS_Definition::build<Compromise> (PLAYBACK);
|
|
|
|
|
EngineService::QoS_Definition EngineService::QoS_PERFECT_RESULT = QoS_Definition::build<DefaultQoS> (RENDER);
|
|
|
|
|
EngineService::QoS_Definition EngineService::QoS_SYNC_PRIORITY = QoS_Definition::build<PriorityQoS>();
|
|
|
|
|
|
2011-05-23 04:43:56 +02:00
|
|
|
|
|
|
|
|
|
2011-05-23 05:46:40 +02:00
|
|
|
}} // namespace proc::engine
|