7#ifndef EXT_RMANPKG_PLUGIN_RENDERMAN_PLUGIN_HD_PRMAN_VOLUME_H
8#define EXT_RMANPKG_PLUGIN_RENDERMAN_PLUGIN_HD_PRMAN_VOLUME_H
10#include "hdPrman/gprim.h"
12#include "pxr/imaging/hd/field.h"
13#include "pxr/imaging/hd/version.h"
14#include "pxr/imaging/hd/volume.h"
20PXR_NAMESPACE_OPEN_SCOPE
22class HdPrman_Field final :
public HdField
28 HdDirtyBits *dirtyBits)
override;
41 HF_MALLOC_TAG_NEW(
"new HdPrman_Volume");
43 HdPrman_Volume(
SdfPath const&
id,
const bool isMeshLight);
48 HdDirtyBits *dirtyBits,
49 TfToken const &reprToken)
override;
53 HdDirtyBits GetInitialDirtyBitsMask()
const override;
72 using HdPrman_VolumeTypeEmitter =
75 HdVolumeFieldDescriptorVector
const& fields,
76 RtPrimVarList* primvars);
81 static bool AddVolumeTypeEmitter(
TfToken const& fieldPrimType,
82 HdPrman_VolumeTypeEmitter emitterFunc,
83 bool overrideExisting =
false);
103 static void DeclareFieldPrimvar(RtPrimVarList* primvars,
104 RtUString
const& fieldName,
108 bool _ConvertGeometry(
109 HdPrman_RenderParam *renderParam,
113 RtPrimVarList *primvars,
114 std::vector<HdGeomSubset> *geomSubsets,
115 std::vector<RtPrimVarList> *geomSubsetPrimvars)
override;
117 void _AddPrimvars(RtPrimVarList*)
const override;
119 const std::vector<riley::CoordinateSystemId>&
120 _GetAdditionalCoordSysIds()
const override;
123 _GetFallbackMaterial(HdPrman_RenderParam *renderParam)
override {
124 return renderParam->GetFallbackVolumeMaterialId();
127 bool _PrototypeOnly()
override;
129 using _VolumeEmitterMap = std::map<TfToken, HdPrman_VolumeTypeEmitter>;
130 static _VolumeEmitterMap& _GetVolumeEmitterMap();
135#if _PRMANAPI_VERSION_MAJOR_ >= 27 && HD_API_VERSION >= 93
136 SdfPathVector _volumeFilterPaths;
137 std::vector<RtUString> _volumeFilterNodeNames;
138 std::vector<riley::VolumeFilterId> _volumeFilterIds;
139 std::vector<riley::CoordinateSystemId> _volumeFilterCoordSysIds;
143PXR_NAMESPACE_CLOSE_SCOPE
virtual HD_API void Finalize(HdRenderParam *renderParam)
Finalizes object resources.
virtual HdDirtyBits GetInitialDirtyBitsMask() const =0
Returns the minimal set of dirty bits to place in the change tracker for use in the first sync of thi...
virtual void Sync(HdSceneDelegate *sceneDelegate, HdRenderParam *renderParam, HdDirtyBits *dirtyBits)=0
Synchronizes state from the delegate to this object.
Hydra schema for a USD field primitive.
A mix-in template that adds shared gprim behavior to support various HdRprim types.
The HdRenderParam is an opaque (to core Hydra) handle, to an object that is obtained from the render ...
Adapter class providing data exchange with the client scene graph.
A path value used to locate objects in layers or scenegraphs.
Token for efficient comparison, assignment, and hashing of known strings.