Blender V4.3
engine.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include <memory>
8#include <string>
9
10#include <pxr/imaging/hd/driver.h>
11#include <pxr/imaging/hd/engine.h>
12#include <pxr/imaging/hd/pluginRenderDelegateUniqueHandle.h>
13#include <pxr/imaging/hdx/freeCameraSceneDelegate.h>
14#include <pxr/imaging/hgi/hgi.h>
15#include <pxr/usd/usd/stage.h>
16#include <pxr/usdImaging/usdImaging/delegate.h>
17
19#include "hydra/settings.hh"
21
24
25struct bContext;
26struct RenderEngine;
27struct CLG_LogRef;
28
29namespace blender::render::hydra {
30
31extern struct CLG_LogRef *LOG_HYDRA_RENDER;
32
33class Engine {
34 protected:
37 Depsgraph *depsgraph_ = nullptr;
38 bContext *context_ = nullptr;
39 Scene *scene_ = nullptr;
40
41 /* The order is important due to deletion order */
42 pxr::HgiUniquePtr hgi_;
43 pxr::HdDriver hgi_driver_;
44 pxr::HdPluginRenderDelegateUniqueHandle render_delegate_;
45 std::unique_ptr<pxr::HdRenderIndex> render_index_;
46
47 std::unique_ptr<io::hydra::HydraSceneDelegate> hydra_scene_delegate_;
48 std::unique_ptr<io::hydra::USDSceneDelegate> usd_scene_delegate_;
49
50 std::unique_ptr<RenderTaskDelegate> render_task_delegate_;
51 std::unique_ptr<pxr::HdxFreeCameraSceneDelegate> free_camera_delegate_;
52 std::unique_ptr<LightTasksDelegate> light_tasks_delegate_;
53 std::unique_ptr<pxr::HdEngine> engine_;
54
55 public:
56 Engine(RenderEngine *bl_engine, const std::string &render_delegate_name);
57 virtual ~Engine() = default;
58
59 void sync(Depsgraph *depsgraph, bContext *context);
60 virtual void render() = 0;
61
62 virtual void set_render_setting(const std::string &key, const pxr::VtValue &val);
63
64 protected:
66 pxr::HdTaskSharedPtrVector tasks();
67 virtual void notify_status(float progress,
68 const std::string &title,
69 const std::string &info) = 0;
70};
71
72} // namespace blender::render::hydra
Engine(RenderEngine *bl_engine, const std::string &render_delegate_name)
RenderEngine * bl_engine_
Definition engine.hh:36
void sync(Depsgraph *depsgraph, bContext *context)
std::unique_ptr< pxr::HdxFreeCameraSceneDelegate > free_camera_delegate_
Definition engine.hh:51
pxr::HdTaskSharedPtrVector tasks()
std::unique_ptr< RenderTaskDelegate > render_task_delegate_
Definition engine.hh:50
pxr::HdPluginRenderDelegateUniqueHandle render_delegate_
Definition engine.hh:44
std::string render_delegate_name_
Definition engine.hh:35
std::unique_ptr< io::hydra::USDSceneDelegate > usd_scene_delegate_
Definition engine.hh:48
std::unique_ptr< pxr::HdRenderIndex > render_index_
Definition engine.hh:45
virtual void notify_status(float progress, const std::string &title, const std::string &info)=0
std::unique_ptr< io::hydra::HydraSceneDelegate > hydra_scene_delegate_
Definition engine.hh:47
pxr::HgiUniquePtr hgi_
Definition engine.hh:42
virtual void set_render_setting(const std::string &key, const pxr::VtValue &val)
std::unique_ptr< LightTasksDelegate > light_tasks_delegate_
Definition engine.hh:52
std::unique_ptr< pxr::HdEngine > engine_
Definition engine.hh:53
const Depsgraph * depsgraph
struct CLG_LogRef * LOG_HYDRA_RENDER