Blender V4.3
render_delegate.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2022 NVIDIA Corporation
2 * SPDX-FileCopyrightText: 2022 Blender Foundation
3 *
4 * SPDX-License-Identifier: Apache-2.0 */
5
6#pragma once
7
8#include "hydra/config.h"
9
10#include <pxr/imaging/hd/renderDelegate.h>
11#include <pxr/imaging/hgi/hgi.h>
12
14
15// clang-format off
16#define HD_CYCLES_RENDER_SETTINGS_TOKENS \
17 (stageMetersPerUnit) \
18 ((device, "cycles:device")) \
19 ((threads, "cycles:threads")) \
20 ((timeLimit, "cycles:time_limit")) \
21 ((samples, "cycles:samples")) \
22 ((sampleOffset, "cycles:sample_offset"))
23// clang-format on
24
26
27class HdCyclesDelegate final : public PXR_NS::HdRenderDelegate {
28 public:
29 HdCyclesDelegate(const PXR_NS::HdRenderSettingsMap &settingsMap,
30 CCL_NS::Session *session_ = nullptr,
31 const bool keep_nodes = false);
32 ~HdCyclesDelegate() override;
33
34 void SetDrivers(const PXR_NS::HdDriverVector &drivers) override;
35
36 bool IsDisplaySupported() const;
37
38 PXR_NS::Hgi *GetHgi() const
39 {
40 return _hgi;
41 }
42
43 const PXR_NS::TfTokenVector &GetSupportedRprimTypes() const override;
44 const PXR_NS::TfTokenVector &GetSupportedSprimTypes() const override;
45 const PXR_NS::TfTokenVector &GetSupportedBprimTypes() const override;
46
47 PXR_NS::HdRenderParam *GetRenderParam() const override;
48
49 PXR_NS::HdResourceRegistrySharedPtr GetResourceRegistry() const override;
50
51 PXR_NS::HdRenderSettingDescriptorList GetRenderSettingDescriptors() const override;
52
53 bool IsPauseSupported() const override;
54
55 bool Pause() override;
56 bool Resume() override;
57
58 PXR_NS::HdRenderPassSharedPtr CreateRenderPass(
59 PXR_NS::HdRenderIndex *index, const PXR_NS::HdRprimCollection &collection) override;
60
61 PXR_NS::HdInstancer *CreateInstancer(PXR_NS::HdSceneDelegate *delegate,
62 const PXR_NS::SdfPath &id
63#if PXR_VERSION < 2102
64 ,
65 const PXR_NS::SdfPath &instancerId
66#endif
67 ) override;
68 void DestroyInstancer(PXR_NS::HdInstancer *instancer) override;
69
70 PXR_NS::HdRprim *CreateRprim(const PXR_NS::TfToken &typeId,
71 const PXR_NS::SdfPath &rprimId
72#if PXR_VERSION < 2102
73 ,
74 const PXR_NS::SdfPath &instancerId
75#endif
76 ) override;
77 void DestroyRprim(PXR_NS::HdRprim *rPrim) override;
78
79 PXR_NS::HdSprim *CreateSprim(const PXR_NS::TfToken &typeId,
80 const PXR_NS::SdfPath &sprimId) override;
81 PXR_NS::HdSprim *CreateFallbackSprim(const PXR_NS::TfToken &typeId) override;
82 void DestroySprim(PXR_NS::HdSprim *sPrim) override;
83
84 PXR_NS::HdBprim *CreateBprim(const PXR_NS::TfToken &typeId,
85 const PXR_NS::SdfPath &bprimId) override;
86 PXR_NS::HdBprim *CreateFallbackBprim(const PXR_NS::TfToken &typeId) override;
87 void DestroyBprim(PXR_NS::HdBprim *bPrim) override;
88
89 void CommitResources(PXR_NS::HdChangeTracker *tracker) override;
90
91 PXR_NS::TfToken GetMaterialBindingPurpose() const override;
92
93#if HD_API_VERSION < 41
94 PXR_NS::TfToken GetMaterialNetworkSelector() const override;
95#else
96 PXR_NS::TfTokenVector GetMaterialRenderContexts() const override;
97#endif
98
99 PXR_NS::VtDictionary GetRenderStats() const override;
100
101 PXR_NS::HdAovDescriptor GetDefaultAovDescriptor(const PXR_NS::TfToken &name) const override;
102
103 void SetRenderSetting(const PXR_NS::TfToken &key, const PXR_NS::VtValue &value) override;
104
105 PXR_NS::VtValue GetRenderSetting(const PXR_NS::TfToken &key) const override;
106
107 private:
108 PXR_NS::Hgi *_hgi = nullptr;
109 std::unique_ptr<HdCyclesSession> _renderParam;
110};
111
bool IsPauseSupported() const override
PXR_NS::HdBprim * CreateFallbackBprim(const PXR_NS::TfToken &typeId) override
bool Resume() override
~HdCyclesDelegate() override
void SetRenderSetting(const PXR_NS::TfToken &key, const PXR_NS::VtValue &value) override
void DestroyRprim(PXR_NS::HdRprim *rPrim) override
const PXR_NS::TfTokenVector & GetSupportedSprimTypes() const override
PXR_NS::HdRenderParam * GetRenderParam() const override
PXR_NS::HdRenderPassSharedPtr CreateRenderPass(PXR_NS::HdRenderIndex *index, const PXR_NS::HdRprimCollection &collection) override
PXR_NS::HdSprim * CreateFallbackSprim(const PXR_NS::TfToken &typeId) override
PXR_NS::TfToken GetMaterialNetworkSelector() const override
PXR_NS::HdResourceRegistrySharedPtr GetResourceRegistry() const override
PXR_NS::HdInstancer * CreateInstancer(PXR_NS::HdSceneDelegate *delegate, const PXR_NS::SdfPath &id, const PXR_NS::SdfPath &instancerId) override
void DestroySprim(PXR_NS::HdSprim *sPrim) override
bool Pause() override
void CommitResources(PXR_NS::HdChangeTracker *tracker) override
const PXR_NS::TfTokenVector & GetSupportedBprimTypes() const override
const PXR_NS::TfTokenVector & GetSupportedRprimTypes() const override
HdCyclesDelegate(const PXR_NS::HdRenderSettingsMap &settingsMap, CCL_NS::Session *session_=nullptr, const bool keep_nodes=false)
PXR_NS::HdRprim * CreateRprim(const PXR_NS::TfToken &typeId, const PXR_NS::SdfPath &rprimId, const PXR_NS::SdfPath &instancerId) override
PXR_NS::HdAovDescriptor GetDefaultAovDescriptor(const PXR_NS::TfToken &name) const override
PXR_NS::HdSprim * CreateSprim(const PXR_NS::TfToken &typeId, const PXR_NS::SdfPath &sprimId) override
PXR_NS::VtValue GetRenderSetting(const PXR_NS::TfToken &key) const override
void SetDrivers(const PXR_NS::HdDriverVector &drivers) override
bool IsDisplaySupported() const
PXR_NS::HdRenderSettingDescriptorList GetRenderSettingDescriptors() const override
PXR_NS::TfToken GetMaterialBindingPurpose() const override
void DestroyBprim(PXR_NS::HdBprim *bPrim) override
PXR_NS::VtDictionary GetRenderStats() const override
void DestroyInstancer(PXR_NS::HdInstancer *instancer) override
PXR_NS::Hgi * GetHgi() const
PXR_NS::HdBprim * CreateBprim(const PXR_NS::TfToken &typeId, const PXR_NS::SdfPath &bprimId) override
#define HDCYCLES_NAMESPACE_CLOSE_SCOPE
#define HD_CYCLES_RENDER_SETTINGS_TOKENS
TF_DECLARE_PUBLIC_TOKENS(HdCyclesRenderSettingsTokens, HD_CYCLES_RENDER_SETTINGS_TOKENS)