Loading...
Searching...
No Matches
renderDelegate.h
1//
2// Copyright 2017 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7#ifndef PXR_IMAGING_PLUGIN_HD_EMBREE_RENDER_DELEGATE_H
8#define PXR_IMAGING_PLUGIN_HD_EMBREE_RENDER_DELEGATE_H
9
10#include "pxr/pxr.h"
11#include "pxr/imaging/hd/renderDelegate.h"
12#include "pxr/imaging/hd/renderThread.h"
13#include "pxr/imaging/plugin/hdEmbree/renderer.h"
15
16#include <mutex>
17#include <embree3/rtcore.h>
18
19PXR_NAMESPACE_OPEN_SCOPE
20
22
23#define HDEMBREE_RENDER_SETTINGS_TOKENS \
24 (enableAmbientOcclusion) \
25 (enableSceneColors) \
26 (ambientOcclusionSamples)
27
28// Also: HdRenderSettingsTokens->convergedSamplesPerPixel
29
30TF_DECLARE_PUBLIC_TOKENS(HdEmbreeRenderSettingsTokens, HDEMBREE_RENDER_SETTINGS_TOKENS);
31
67class HdEmbreeRenderDelegate final : public HdRenderDelegate
68{
69public:
76 HdEmbreeRenderDelegate(HdRenderSettingsMap const& settingsMap);
80
83 HdRenderParam *GetRenderParam() const override;
84
87 const TfTokenVector &GetSupportedRprimTypes() const override;
90 const TfTokenVector &GetSupportedSprimTypes() const override;
93 const TfTokenVector &GetSupportedBprimTypes() const override;
94
96 HdResourceRegistrySharedPtr GetResourceRegistry() const override;
97
102 HdRenderSettingDescriptorList
104
106 bool IsPauseSupported() const override;
107
109 bool Pause() override;
110
112 bool Resume() override;
113
122 HdRenderPassSharedPtr CreateRenderPass(HdRenderIndex *index,
123 HdRprimCollection const& collection) override;
124
133 SdfPath const& id) override;
134
137 void DestroyInstancer(HdInstancer *instancer) override;
138
148 SdfPath const& rprimId) override;
149
152 void DestroyRprim(HdRprim *rPrim) override;
153
162 SdfPath const& sprimId) override;
163
169 HdSprim *CreateFallbackSprim(TfToken const& typeId) override;
170
173 void DestroySprim(HdSprim *sPrim) override;
174
182 SdfPath const& bprimId) override;
183
189 HdBprim *CreateFallbackBprim(TfToken const& typeId) override;
190
193 void DestroyBprim(HdBprim *bPrim) override;
194
200 void CommitResources(HdChangeTracker *tracker) override;
201
208 return HdTokens->full;
209 }
210
218 GetDefaultAovDescriptor(TfToken const& name) const override;
219
222 VtDictionary GetRenderStats() const override;
223
224private:
225 static const TfTokenVector SUPPORTED_RPRIM_TYPES;
226 static const TfTokenVector SUPPORTED_SPRIM_TYPES;
227 static const TfTokenVector SUPPORTED_BPRIM_TYPES;
228
230 static std::mutex _mutexResourceRegistry;
231 static std::atomic_int _counterResourceRegistry;
232 static HdResourceRegistrySharedPtr _resourceRegistry;
233
234 // This class does not support copying.
236 HdEmbreeRenderDelegate &operator =(const HdEmbreeRenderDelegate &) = delete;
237
238 // Embree initialization routine.
239 void _Initialize();
240
241 // Handle for an embree "device", or library state.
242 RTCDevice _rtcDevice;
243
244 // Handle for the top-level embree scene, mirroring the Hydra scene.
245 RTCScene _rtcScene;
246
247 // A version counter for edits to _scene.
248 std::atomic<int> _sceneVersion;
249
250 // A shared HdEmbreeRenderParam object that stores top-level embree state;
251 // passed to prims during Sync().
252 std::shared_ptr<HdEmbreeRenderParam> _renderParam;
253
254 // A background render thread for running the actual renders in. The
255 // render thread object manages synchronization between the scene data
256 // and the background-threaded renderer.
257 HdRenderThread _renderThread;
258
259 // An embree renderer object, to perform the actual raytracing.
260 HdEmbreeRenderer _renderer;
261
262 // A list of render setting exports.
263 HdRenderSettingDescriptorList _settingDescriptors;
264
265 // A callback that interprets embree error codes and injects them into
266 // the hydra logging system.
267 static void HandleRtcError(void* userPtr, RTCError code, const char *msg);
268};
269
270
271PXR_NAMESPACE_CLOSE_SCOPE
272
273#endif // PXR_IMAGING_PLUGIN_HD_EMBREE_RENDER_DELEGATE_H
Bprim (buffer prim) is a base class of managing a blob of data that is used to communicate between th...
Definition: bprim.h:40
Tracks changes from the HdSceneDelegate, providing invalidation cues to the render engine.
Definition: changeTracker.h:35
Render delegates provide renderer-specific functionality to the render index, the main hydra state ma...
bool Resume() override
Resume background rendering threads.
void DestroyRprim(HdRprim *rPrim) override
Destroy an Rprim created with CreateRprim.
bool Pause() override
Pause background rendering threads.
~HdEmbreeRenderDelegate() override
Render delegate destructor.
const TfTokenVector & GetSupportedSprimTypes() const override
Return a list of which Sprim types can be created by this class's CreateSprim.
void DestroySprim(HdSprim *sPrim) override
Destroy an Sprim created with CreateSprim or CreateFallbackSprim.
void CommitResources(HdChangeTracker *tracker) override
This function is called after new scene data is pulled during prim Sync(), but before any tasks (such...
HdBprim * CreateFallbackBprim(TfToken const &typeId) override
Create a hydra Bprim using default values, and with no scene graph binding.
HdRenderPassSharedPtr CreateRenderPass(HdRenderIndex *index, HdRprimCollection const &collection) override
Create a renderpass.
HdSprim * CreateSprim(TfToken const &typeId, SdfPath const &sprimId) override
Create a hydra Sprim, representing scene or viewport state like cameras or lights.
HdSprim * CreateFallbackSprim(TfToken const &typeId) override
Create a hydra Sprim using default values, and with no scene graph binding.
HdRprim * CreateRprim(TfToken const &typeId, SdfPath const &rprimId) override
Create a hydra Rprim, representing scene geometry.
const TfTokenVector & GetSupportedRprimTypes() const override
Return a list of which Rprim types can be created by this class's CreateRprim.
HdBprim * CreateBprim(TfToken const &typeId, SdfPath const &bprimId) override
Create a hydra Bprim, representing data buffers such as textures.
bool IsPauseSupported() const override
Return true to indicate that pausing and resuming are supported.
HdInstancer * CreateInstancer(HdSceneDelegate *delegate, SdfPath const &id) override
Create an instancer.
HdResourceRegistrySharedPtr GetResourceRegistry() const override
Returns the HdResourceRegistry instance used by this render delegate.
HdRenderParam * GetRenderParam() const override
Return this delegate's render param.
HdEmbreeRenderDelegate()
Render delegate constructor.
void DestroyInstancer(HdInstancer *instancer) override
Destroy an instancer created with CreateInstancer.
const TfTokenVector & GetSupportedBprimTypes() const override
Return a list of which Bprim types can be created by this class's CreateBprim.
HdEmbreeRenderDelegate(HdRenderSettingsMap const &settingsMap)
Render delegate constructor.
void DestroyBprim(HdBprim *bPrim) override
Destroy a Bprim created with CreateBprim or CreateFallbackBprim.
TfToken GetMaterialBindingPurpose() const override
This function tells the scene which material variant to reference.
VtDictionary GetRenderStats() const override
This function allows the renderer to report back some useful statistics that the application can disp...
HdRenderSettingDescriptorList GetRenderSettingDescriptors() const override
Returns a list of user-configurable render settings.
HdAovDescriptor GetDefaultAovDescriptor(TfToken const &name) const override
This function returns the default AOV descriptor for a given named AOV.
The render delegate can create an object of type HdRenderParam, to pass to each prim during Sync().
Definition: renderParam.h:26
HdEmbreeRenderer implements a renderer on top of Embree's raycasting abilities.
Definition: renderer.h:38
This class exists to facilitate point cloud style instancing.
Definition: instancer.h:108
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
Definition: renderIndex.h:104
The HdRenderParam is an opaque (to core Hydra) handle, to an object that is obtained from the render ...
HdRenderThread is a utility that specific render delegates can choose to use depending on their needs...
Definition: renderThread.h:129
A named, semantic collection of objects.
The render engine state for a given rprim from the scene graph.
Definition: rprim.h:38
Adapter class providing data exchange with the client scene graph.
Sprim (state prim) is a base class of managing state for non-drawable scene entity (e....
Definition: sprim.h:35
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:274
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:71
A map with string keys and VtValue values.
Definition: dictionary.h:43
This file defines some macros that are useful for declaring and using static TfTokens.
#define TF_DECLARE_PUBLIC_TOKENS(...)
Macro to define public tokens.
Definition: staticTokens.h:81
A bundle of state describing an AOV ("Arbitrary Output Variable") display channel.
Definition: aov.h:30
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:440