mirror of
https://github.com/lubosz/overte.git
synced 2025-04-23 07:43:57 +02:00
Make Engine a Task
This commit is contained in:
parent
3dab1571a5
commit
8b68d5922c
5 changed files with 21 additions and 35 deletions
|
@ -677,8 +677,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
|||
|
||||
// Start rendering
|
||||
render::CullFunctor cullFunctor = LODManager::shouldRender;
|
||||
_renderEngine->addTask(make_shared<RenderShadowTask>(cullFunctor));
|
||||
_renderEngine->addTask(make_shared<RenderDeferredTask>(cullFunctor));
|
||||
_renderEngine->addJob<RenderShadowTask>("RenderShadowTask", cullFunctor);
|
||||
_renderEngine->addJob<RenderDeferredTask>("RenderDeferredTask", cullFunctor);
|
||||
_renderEngine->registerScene(_main3DScene);
|
||||
|
||||
_offscreenContext->makeCurrent();
|
||||
|
|
|
@ -115,6 +115,10 @@ class RenderDeferredTask : public render::Task {
|
|||
public:
|
||||
RenderDeferredTask(render::CullFunctor cullFunctor);
|
||||
|
||||
void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext);
|
||||
|
||||
using JobModel = render::Task::Job::Model<RenderDeferredTask>;
|
||||
|
||||
void setDrawDebugDeferredBuffer(int draw) { enableJob(_drawDebugDeferredBufferIndex, draw >= 0); }
|
||||
bool doDrawDebugDeferredBuffer() const { return getEnableJob(_drawDebugDeferredBufferIndex); }
|
||||
|
||||
|
@ -136,7 +140,6 @@ public:
|
|||
void setToneMappingToneCurve(int toneCurve);
|
||||
int getToneMappingToneCurve() const;
|
||||
|
||||
virtual void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext);
|
||||
|
||||
protected:
|
||||
int _drawDebugDeferredBufferIndex;
|
||||
|
|
|
@ -35,6 +35,8 @@ public:
|
|||
RenderShadowTask(render::CullFunctor shouldRender);
|
||||
|
||||
void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext);
|
||||
|
||||
using JobModel = render::Task::Job::Model<RenderShadowTask>;
|
||||
};
|
||||
|
||||
#endif // hifi_RenderShadowTask_h
|
||||
|
|
|
@ -21,25 +21,11 @@ Engine::Engine() :
|
|||
{
|
||||
}
|
||||
|
||||
void Engine::registerScene(const ScenePointer& scene) {
|
||||
_sceneContext->_scene = scene;
|
||||
}
|
||||
|
||||
void Engine::setRenderContext(const RenderContext& renderContext) {
|
||||
(*_renderContext) = renderContext;
|
||||
}
|
||||
|
||||
void Engine::addTask(const TaskPointer& task) {
|
||||
if (task) {
|
||||
_tasks.push_back(task);
|
||||
}
|
||||
}
|
||||
|
||||
void Engine::run() {
|
||||
// Sync GPU state before beginning to render
|
||||
_renderContext->getArgs()->_context->syncCache();
|
||||
|
||||
for (auto task : _tasks) {
|
||||
task->run(_sceneContext, _renderContext);
|
||||
for (auto job : _jobs) {
|
||||
job.run(_sceneContext, _renderContext);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,36 +17,31 @@
|
|||
|
||||
namespace render {
|
||||
|
||||
// The root of the tasks, the Engine, should not be known from the Tasks,
|
||||
// The SceneContext is what navigates from the engine down to the Tasks
|
||||
class Engine {
|
||||
// The render engine holds all render tasks, and is itself a render task.
|
||||
// State flows through tasks to jobs via the render and scene contexts -
|
||||
// the engine should not be known from its jobs.
|
||||
class Engine : public Task {
|
||||
public:
|
||||
|
||||
Engine();
|
||||
~Engine() {}
|
||||
~Engine() = default;
|
||||
|
||||
// Register the scene should be [art of the init phase before running the engine
|
||||
void registerScene(const ScenePointer& scene);
|
||||
// Register the scene
|
||||
void registerScene(const ScenePointer& scene) { _sceneContext->_scene = scene; }
|
||||
|
||||
// Push a RenderContext
|
||||
void setRenderContext(const RenderContext& renderContext);
|
||||
void setRenderContext(const RenderContext& renderContext) { (*_renderContext) = renderContext; }
|
||||
RenderContextPointer getRenderContext() const { return _renderContext; }
|
||||
|
||||
void addTask(const TaskPointer& task);
|
||||
const Tasks& getTasks() const { return _tasks; }
|
||||
|
||||
|
||||
// Render a frame
|
||||
// A frame must have a scene registered and a context set to render
|
||||
void run();
|
||||
|
||||
protected:
|
||||
Tasks _tasks;
|
||||
|
||||
SceneContextPointer _sceneContext;
|
||||
RenderContextPointer _renderContext;
|
||||
};
|
||||
typedef std::shared_ptr<Engine> EnginePointer;
|
||||
using EnginePointer = std::shared_ptr<Engine>;
|
||||
|
||||
}
|
||||
|
||||
#endif // hifi_render_Engine_h
|
||||
|
||||
|
|
Loading…
Reference in a new issue