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 <embree4/rtcore.h>
17
18#include <mutex>
19
20PXR_NAMESPACE_OPEN_SCOPE
21
23
24#define HDEMBREE_RENDER_SETTINGS_TOKENS \
25 (enableAmbientOcclusion) \
26 (enableLighting) \
27 (enableSceneColors) \
28 (ambientOcclusionSamples) \
29 (randomNumberSeed)
30
31// Also: HdRenderSettingsTokens->convergedSamplesPerPixel
32
33TF_DECLARE_PUBLIC_TOKENS(HdEmbreeRenderSettingsTokens, HDEMBREE_RENDER_SETTINGS_TOKENS);
34
70class HdEmbreeRenderDelegate final : public HdRenderDelegate
71{
72public:
79 HdEmbreeRenderDelegate(HdRenderSettingsMap const& settingsMap);
83
86 HdRenderParam *GetRenderParam() const override;
87
90 const TfTokenVector &GetSupportedRprimTypes() const override;
93 const TfTokenVector &GetSupportedSprimTypes() const override;
96 const TfTokenVector &GetSupportedBprimTypes() const override;
97
99 HdResourceRegistrySharedPtr GetResourceRegistry() const override;
100
105 HdRenderSettingDescriptorList
107
109 bool IsPauseSupported() const override;
110
112 bool Pause() override;
113
115 bool Resume() override;
116
125 HdRenderPassSharedPtr CreateRenderPass(HdRenderIndex *index,
126 HdRprimCollection const& collection) override;
127
136 SdfPath const& id) override;
137
140 void DestroyInstancer(HdInstancer *instancer) override;
141
151 SdfPath const& rprimId) override;
152
155 void DestroyRprim(HdRprim *rPrim) override;
156
165 SdfPath const& sprimId) override;
166
172 HdSprim *CreateFallbackSprim(TfToken const& typeId) override;
173
176 void DestroySprim(HdSprim *sPrim) override;
177
185 SdfPath const& bprimId) override;
186
192 HdBprim *CreateFallbackBprim(TfToken const& typeId) override;
193
196 void DestroyBprim(HdBprim *bPrim) override;
197
203 void CommitResources(HdChangeTracker *tracker) override;
204
211 return HdTokens->full;
212 }
213
221 GetDefaultAovDescriptor(TfToken const& name) const override;
222
225 VtDictionary GetRenderStats() const override;
226
227private:
228 static const TfTokenVector SUPPORTED_RPRIM_TYPES;
229 static const TfTokenVector SUPPORTED_SPRIM_TYPES;
230 static const TfTokenVector SUPPORTED_BPRIM_TYPES;
231
233 static std::mutex _mutexResourceRegistry;
234 static std::atomic_int _counterResourceRegistry;
235 static HdResourceRegistrySharedPtr _resourceRegistry;
236
237 // This class does not support copying.
239 HdEmbreeRenderDelegate &operator =(const HdEmbreeRenderDelegate &) = delete;
240
241 // Embree initialization routine.
242 void _Initialize();
243
244 // Handle for an embree "device", or library state.
245 RTCDevice _rtcDevice;
246
247 // Handle for the top-level embree scene, mirroring the Hydra scene.
248 RTCScene _rtcScene;
249
250 // A version counter for edits to _scene.
251 std::atomic<int> _sceneVersion;
252
253 // A shared HdEmbreeRenderParam object that stores top-level embree state;
254 // passed to prims during Sync().
255 std::shared_ptr<HdEmbreeRenderParam> _renderParam;
256
257 // A background render thread for running the actual renders in. The
258 // render thread object manages synchronization between the scene data
259 // and the background-threaded renderer.
260 HdRenderThread _renderThread;
261
262 // An embree renderer object, to perform the actual raytracing.
263 HdEmbreeRenderer _renderer;
264
265 // A list of render setting exports.
266 HdRenderSettingDescriptorList _settingDescriptors;
267
268 // A callback that interprets embree error codes and injects them into
269 // the hydra logging system.
270 static void HandleRtcError(void* userPtr, RTCError code, const char *msg);
271};
272
273
274PXR_NAMESPACE_CLOSE_SCOPE
275
276#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:28
HdEmbreeRenderer implements a renderer on top of Embree's raycasting abilities.
Definition: renderer.h:53
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:105
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:92
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