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