Loading...
Searching...
No Matches
volume.h
1//
2// Copyright 2019 Pixar
3//
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
5// with the following modification; you may not use this file except in
6// compliance with the Apache License and the following modification to it:
7// Section 6. Trademarks. is deleted and replaced with:
8//
9// 6. Trademarks. This License does not grant permission to use the trade
10// names, trademarks, service marks, or product names of the Licensor
11// and its affiliates, except as required to comply with Section 4(c) of
12// the License and to reproduce the content of the NOTICE file.
13//
14// You may obtain a copy of the Apache License at
15//
16// http://www.apache.org/licenses/LICENSE-2.0
17//
18// Unless required by applicable law or agreed to in writing, software
19// distributed under the Apache License with the above modification is
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21// KIND, either express or implied. See the Apache License for the specific
22// language governing permissions and limitations under the Apache License.
23//
24#ifndef EXT_RMANPKG_25_0_PLUGIN_RENDERMAN_PLUGIN_HD_PRMAN_VOLUME_H
25#define EXT_RMANPKG_25_0_PLUGIN_RENDERMAN_PLUGIN_HD_PRMAN_VOLUME_H
26
27#include "pxr/pxr.h"
28#include "hdPrman/gprim.h"
29#include "pxr/imaging/hd/field.h"
30#include "pxr/imaging/hd/volume.h"
31
32#include "Riley.h"
33
34PXR_NAMESPACE_OPEN_SCOPE
35
36class HdPrman_Field final : public HdField
37{
38public:
39 HdPrman_Field(TfToken const& typeId, SdfPath const& id);
40 void Sync(HdSceneDelegate *sceneDelegate,
41 HdRenderParam *renderParam,
42 HdDirtyBits *dirtyBits) override;
43 void Finalize(HdRenderParam *renderParam) override;
44 HdDirtyBits GetInitialDirtyBitsMask() const override;
45private:
46 TfToken const _typeId;
47};
48
49class HdPrman_Volume final : public HdPrman_Gprim<HdVolume>
50{
51public:
52 using BASE = HdPrman_Gprim<HdVolume>;
53public:
54
55 HF_MALLOC_TAG_NEW("new HdPrman_Volume");
56
57 HdPrman_Volume(SdfPath const& id, const bool isMeshLight);
58
59 HdDirtyBits GetInitialDirtyBitsMask() const override;
60
78 using HdPrman_VolumeTypeEmitter =
79 void (*)(HdSceneDelegate *sceneDelegate,
80 SdfPath const& id,
81 HdVolumeFieldDescriptorVector const& fields,
82 RtPrimVarList* primvars);
83
87 static bool AddVolumeTypeEmitter(TfToken const& fieldPrimType,
88 HdPrman_VolumeTypeEmitter emitterFunc,
89 bool overrideExisting = false);
90
92 enum FieldType {
93 FloatType = 0,
94 IntType,
95 Float2Type,
96 Int2Type,
97 Float3Type,
98 Int3Type,
99 ColorType,
100 PointType,
101 NormalType,
102 VectorType,
103 Float4Type,
104 MatrixType,
105 StringType
106 };
107
109 static void DeclareFieldPrimvar(RtPrimVarList* primvars,
110 RtUString const& fieldName,
111 FieldType type);
112
113protected:
114 RtPrimVarList
115 _ConvertGeometry(HdPrman_RenderParam *renderParam,
116 HdSceneDelegate *sceneDelegate,
117 const SdfPath &id,
118 RtUString *primType,
119 std::vector<HdGeomSubset> *geomSubsets) override;
120
121 riley::MaterialId
122 _GetFallbackMaterial(HdPrman_RenderParam *renderParam) override {
123 return renderParam->GetFallbackVolumeMaterialId();
124 }
125
126 bool _PrototypeOnly() override;
127
128 using _VolumeEmitterMap = std::map<TfToken, HdPrman_VolumeTypeEmitter>;
129 static _VolumeEmitterMap& _GetVolumeEmitterMap();
130
131private:
132 bool _isMeshLight;
133};
134
135PXR_NAMESPACE_CLOSE_SCOPE
136
137#endif // EXT_RMANPKG_25_0_PLUGIN_RENDERMAN_PLUGIN_HD_PRMAN_VOLUME_H
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.
Definition: field.h:51
A mix-in template that adds shared gprim behavior to support various HdRprim types.
Definition: gprim.h:46
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.
Definition: path.h:290
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:88