Loading...
Searching...
No Matches
simpleLightTask.h
1//
2// Copyright 2016 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 PXR_IMAGING_HDX_SIMPLE_LIGHT_TASK_H
25#define PXR_IMAGING_HDX_SIMPLE_LIGHT_TASK_H
26
27#include "pxr/pxr.h"
28#include "pxr/imaging/hdx/api.h"
29#include "pxr/imaging/hdx/version.h"
30
31#include "pxr/imaging/hd/task.h"
32
35
36#include "pxr/imaging/cameraUtil/framing.h"
37
38#include "pxr/base/gf/vec3f.h"
40
41#include <memory>
42
43PXR_NAMESPACE_OPEN_SCOPE
44
45class HdRenderIndex;
46class HdSceneDelegate;
47class HdCamera;
48
49using HdRenderPassSharedPtr = std::shared_ptr<class HdRenderPass>;
50using HdStSimpleLightingShaderSharedPtr =
51 std::shared_ptr<class HdStSimpleLightingShader>;
52using HdxShadowMatrixComputationSharedPtr =
53 std::shared_ptr<class HdxShadowMatrixComputation>;
54
55TF_DECLARE_REF_PTRS(GlfSimpleShadowArray);
56
57
58class HdxSimpleLightTask : public HdTask
59{
60public:
61 HDX_API
62 HdxSimpleLightTask(HdSceneDelegate* delegate, SdfPath const& id);
63
64 HDX_API
65 ~HdxSimpleLightTask() override;
66
68 HDX_API
69 void Sync(HdSceneDelegate* delegate,
70 HdTaskContext* ctx,
71 HdDirtyBits* dirtyBits) override;
72
74 HDX_API
75 void Prepare(HdTaskContext* ctx,
76 HdRenderIndex* renderIndex) override;
77
79 HDX_API
80 void Execute(HdTaskContext* ctx) override;
81
82private:
83 std::vector<GfMatrix4d> _ComputeShadowMatrices(
84 const HdCamera * camera,
85 HdxShadowMatrixComputationSharedPtr const &computation) const;
86
87 SdfPath _cameraId;
88 std::map<TfToken, SdfPathVector> _lightIds;
89 SdfPathVector _lightIncludePaths;
90 SdfPathVector _lightExcludePaths;
91 size_t _numLightIds;
92 size_t _maxLights;
93 unsigned _sprimIndexVersion;
94 unsigned _settingsVersion;
95
96 // Should be weak ptrs
97 HdStSimpleLightingShaderSharedPtr _lightingShader;
98 bool _enableShadows;
99 GfVec4f _viewport;
100 CameraUtilFraming _framing;
101 std::pair<bool, CameraUtilConformWindowPolicy> _overrideWindowPolicy;
102
103 // XXX: compatibility hack for passing some unit tests until we have
104 // more formal material plumbing.
105 GlfSimpleMaterial _material;
106 GfVec4f _sceneAmbient;
107
108 // For now these are only valid for the lifetime of a single pass of
109 // the render graph. Maybe long-term these could be change-tracked.
110 GlfSimpleLightVector _glfSimpleLights;
111
112 HdBufferArrayRangeSharedPtr _lightingBar;
113 HdBufferArrayRangeSharedPtr _lightSourcesBar;
114 HdBufferArrayRangeSharedPtr _shadowsBar;
115 HdBufferArrayRangeSharedPtr _materialBar;
116
117 bool _rebuildLightingBufferSources;
118 bool _rebuildLightAndShadowBufferSources;
119 bool _rebuildMaterialBufferSources;
120
121 size_t _AppendLightsOfType(HdRenderIndex &renderIndex,
122 TfTokenVector const &lightTypes,
123 SdfPathVector const &lightIncludePaths,
124 SdfPathVector const &lightExcludePaths,
125 std::map<TfToken, SdfPathVector> *lights);
126
127 HdxSimpleLightTask() = delete;
128 HdxSimpleLightTask(const HdxSimpleLightTask &) = delete;
129 HdxSimpleLightTask &operator =(const HdxSimpleLightTask &) = delete;
130};
131
132struct HdxSimpleLightTaskParams {
133 HdxSimpleLightTaskParams()
134 : cameraPath()
135 , lightIncludePaths(1, SdfPath::AbsoluteRootPath())
136 , lightExcludePaths()
137 , enableShadows(false)
138 , viewport(0.0f)
139 , overrideWindowPolicy{false, CameraUtilFit}
140 , material()
141 , sceneAmbient(0)
142 {}
143
144 SdfPath cameraPath;
145 SdfPathVector lightIncludePaths;
146 SdfPathVector lightExcludePaths;
147 bool enableShadows;
148 GfVec4f viewport;
149 CameraUtilFraming framing;
150 std::pair<bool, CameraUtilConformWindowPolicy> overrideWindowPolicy;
151
152 // XXX: compatibility hack for passing some unit tests until we have
153 // more formal material plumbing.
154 GlfSimpleMaterial material;
155 GfVec4f sceneAmbient;
156};
157
158// VtValue requirements
159HDX_API
160std::ostream& operator<<(std::ostream& out, const HdxSimpleLightTaskParams& pv);
161HDX_API
162bool operator==(
163 const HdxSimpleLightTaskParams& lhs,
164 const HdxSimpleLightTaskParams& rhs);
165HDX_API
166bool operator!=(
167 const HdxSimpleLightTaskParams& lhs,
168 const HdxSimpleLightTaskParams& rhs);
169
170struct HdxShadowParams {
171 HdxShadowParams()
172 : shadowMatrix()
173 , bias(0.0)
174 , blur(0.0)
175 , resolution(0)
176 , enabled(false)
177 {}
178
179 HdxShadowMatrixComputationSharedPtr shadowMatrix;
180 double bias;
181 double blur;
182 int resolution;
183 bool enabled;
184};
185
186// VtValue requirements
187HDX_API
188std::ostream& operator<<(std::ostream& out, const HdxShadowParams& pv);
189HDX_API
190bool operator==(const HdxShadowParams& lhs, const HdxShadowParams& rhs);
191HDX_API
192bool operator!=(const HdxShadowParams& lhs, const HdxShadowParams& rhs);
193
194
195PXR_NAMESPACE_CLOSE_SCOPE
196
197#endif //PXR_IMAGING_HDX_SIMPLE_LIGHT_TASK_H
Framing information.
Definition: framing.h:80
Basic type for a vector of 4 float components.
Definition: vec4f.h:63
Hydra schema for a camera that pulls the params (see above) during Sync.
Definition: camera.h:104
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
Definition: renderIndex.h:121
Adapter class providing data exchange with the client scene graph.
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:291
Standard pointer typedefs.
#define TF_DECLARE_REF_PTRS(type)
Define standard ref pointer types.
Definition: declarePtrs.h:75
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:457