Loading...
Searching...
No Matches
renderSetupTask.h
1//
2// Copyright 2016 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_HDX_RENDER_SETUP_TASK_H
8#define PXR_IMAGING_HDX_RENDER_SETUP_TASK_H
9
10#include "pxr/pxr.h"
11#include "pxr/imaging/hdx/api.h"
12#include "pxr/imaging/hdx/version.h"
13#include "pxr/imaging/hd/task.h"
14#include "pxr/imaging/hd/tokens.h"
15#include "pxr/imaging/hd/enums.h"
16#include "pxr/imaging/hd/renderPassState.h"
17
18#include "pxr/imaging/cameraUtil/framing.h"
19
20#include "pxr/base/gf/vec2f.h"
21#include "pxr/base/gf/vec4f.h"
22#include "pxr/base/gf/vec4d.h"
23
24#include <memory>
25#include <optional>
26
27PXR_NAMESPACE_OPEN_SCOPE
28
29using HdxRenderSetupTaskSharedPtr =
30 std::shared_ptr<class HdxRenderSetupTask>;
31using HdStRenderPassShaderSharedPtr =
32 std::shared_ptr<class HdStRenderPassShader>;
33using HdStShaderCodeSharedPtr = std::shared_ptr<class HdStShaderCode>;
34
35using HdRenderPassStateSharedPtr = std::shared_ptr<class HdRenderPassState>;
36
39
40
53{
54public:
56
57 HDX_API
58 HdxRenderSetupTask(HdSceneDelegate* delegate, SdfPath const& id);
59
60 HDX_API
61 ~HdxRenderSetupTask() override;
62
63
64 // APIs used from HdxRenderTask to manage the sync/prepare process.
65 HDX_API
66 void SyncParams(HdSceneDelegate* delegate,
67 HdxRenderTaskParams const &params);
68 HDX_API
69 void PrepareCamera(HdRenderIndex* renderIndex);
70
71 HdRenderPassStateSharedPtr const &GetRenderPassState() const {
72 return _renderPassState;
73 }
74
76 HDX_API
77 void Sync(HdSceneDelegate* delegate,
78 HdTaskContext* ctx,
79 HdDirtyBits* dirtyBits) override;
80
82 HDX_API
83 void Prepare(HdTaskContext* ctx,
84 HdRenderIndex* renderIndex) override;
85
87 HDX_API
88 void Execute(HdTaskContext* ctx) override;
89
90 HDX_API
91 static void
92 SyncParamsHelper(
93 const HdRenderPassStateSharedPtr& renderPassState,
94 const HdxRenderTaskParams& params);
95
96private:
97 HdRenderPassStateSharedPtr _renderPassState;
98 HdStRenderPassShaderSharedPtr _colorRenderPassShader;
99 SdfPath _cameraId;
100 CameraUtilFraming _framing;
101 std::optional<CameraUtilConformWindowPolicy> _overrideWindowPolicy;
102 // Used when client did not specify the camera framing (more expressive
103 // and preferred).
104 GfVec4d _viewport;
105 HdRenderPassAovBindingVector _aovBindings;
106 HdRenderPassAovBindingVector _aovInputBindings;
107
108 void _SetRenderpassShadersForStorm(
109 HdStRenderPassState *renderPassState,
110 HdResourceRegistrySharedPtr const &resourceRegistry);
111
112 HdRenderPassStateSharedPtr &_GetRenderPassState(HdRenderIndex* renderIndex);
113
114 void _PrepareAovBindings(HdTaskContext* ctx, HdRenderIndex* renderIndex);
115
116
117 HdxRenderSetupTask() = delete;
118 HdxRenderSetupTask(const HdxRenderSetupTask &) = delete;
119 HdxRenderSetupTask &operator =(const HdxRenderSetupTask &) = delete;
120};
121
127{
129 // Global Params
130 : overrideColor(0.0)
131 , wireframeColor(0.0)
132 , pointColor(GfVec4f(0,0,0,1))
133 , pointSize(3.0)
134 , enableLighting(false)
135 , alphaThreshold(0.0)
136 , enableSceneLights(true)
137 , enableClipping(true)
138 // Selection/Masking params
139 , maskColor(1.0f, 0.0f, 0.0f, 1.0f)
140 , indicatorColor(0.0f, 1.0f, 0.0f, 1.0f)
141 , pointSelectedSize(3.0)
142 // Storm render pipeline state
143 , depthBiasUseDefault(true)
144 , depthBiasEnable(false)
145 , depthBiasConstantFactor(0.0f)
146 , depthBiasSlopeFactor(1.0f)
147 , depthFunc(HdCmpFuncLEqual)
148 , depthMaskEnable(true)
149 , stencilFunc(HdCmpFuncAlways)
150 , stencilRef(0)
151 , stencilMask(~0)
152 , stencilFailOp(HdStencilOpKeep)
153 , stencilZFailOp(HdStencilOpKeep)
154 , stencilZPassOp(HdStencilOpKeep)
155 , stencilEnable(false)
156 , blendColorOp(HdBlendOpAdd)
157 , blendColorSrcFactor(HdBlendFactorOne)
158 , blendColorDstFactor(HdBlendFactorZero)
159 , blendAlphaOp(HdBlendOpAdd)
160 , blendAlphaSrcFactor(HdBlendFactorOne)
161 , blendAlphaDstFactor(HdBlendFactorZero)
162 , blendConstantColor(0.0f, 0.0f, 0.0f, 0.0f)
163 , blendEnable(false)
164 , enableAlphaToCoverage(true)
165 , useAovMultiSample(true)
166 , resolveAovMultiSample(true)
167 // Camera framing and viewer state
168 , viewport(0.0)
169 , cullStyle(HdCullStyleBackUnlessDoubleSided)
170 {}
171
172 // ---------------------------------------------------------------------- //
173 // Application rendering state
174 // XXX: Several of the parameters below are specific to (or work only with)
175 // Storm and stem from its integration in Presto and usdview.
176 // ---------------------------------------------------------------------- //
177 // "Global" parameters while rendering.
178 GfVec4f overrideColor;
179 GfVec4f wireframeColor;
180 GfVec4f pointColor;
181 float pointSize;
182 bool enableLighting;
183 float alphaThreshold;
184 bool enableSceneLights;
185 bool enableClipping;
186
187 // Selection/Masking params
188 GfVec4f maskColor;
189 GfVec4f indicatorColor;
190 float pointSelectedSize;
191
192 // AOVs to render to
193 // XXX: As a transitional API, if this is empty it indicates the renderer
194 // should write color and depth to the GL framebuffer.
195 HdRenderPassAovBindingVector aovBindings;
196 HdRenderPassAovBindingVector aovInputBindings;
197
198 // ---------------------------------------------------------------------- //
199 // Render pipeline state for rasterizers.
200 // XXX: These are relevant only for Storm.
201 // ---------------------------------------------------------------------- //
202 bool depthBiasUseDefault; // inherit application GL state
203 bool depthBiasEnable;
204 float depthBiasConstantFactor;
205 float depthBiasSlopeFactor;
206
207 HdCompareFunction depthFunc;
208 bool depthMaskEnable;
209
210 // Stencil
211 HdCompareFunction stencilFunc;
212 int stencilRef;
213 int stencilMask;
214 HdStencilOp stencilFailOp;
215 HdStencilOp stencilZFailOp;
216 HdStencilOp stencilZPassOp;
217 bool stencilEnable;
218
219 // Blending
220 HdBlendOp blendColorOp;
221 HdBlendFactor blendColorSrcFactor;
222 HdBlendFactor blendColorDstFactor;
223 HdBlendOp blendAlphaOp;
224 HdBlendFactor blendAlphaSrcFactor;
225 HdBlendFactor blendAlphaDstFactor;
226 GfVec4f blendConstantColor;
227 bool blendEnable;
228
229 // AlphaToCoverage
230 bool enableAlphaToCoverage;
231
232 // If true (default), render into the multi-sampled AOVs (rather than
233 // the resolved AOVs).
234 bool useAovMultiSample;
235
236 // If true (default), multi-sampled AOVs will be resolved at the end of a
237 // render pass.
238 bool resolveAovMultiSample;
239
240 // ---------------------------------------------------------------------- //
241 // Viewer & Camera Framing state
242 // ---------------------------------------------------------------------- //
243 SdfPath camera;
244 CameraUtilFraming framing;
245 // Only used if framing is invalid.
246 GfVec4d viewport;
247 HdCullStyle cullStyle;
248 std::optional<CameraUtilConformWindowPolicy> overrideWindowPolicy;
249};
250
251// VtValue requirements
252HDX_API
253std::ostream& operator<<(std::ostream& out, const HdxRenderTaskParams& pv);
254HDX_API
255bool operator==(const HdxRenderTaskParams& lhs, const HdxRenderTaskParams& rhs);
256HDX_API
257bool operator!=(const HdxRenderTaskParams& lhs, const HdxRenderTaskParams& rhs);
258
259
260PXR_NAMESPACE_CLOSE_SCOPE
261
262#endif //PXR_IMAGING_HDX_RENDER_SETUP_TASK_H
Framing information.
Definition framing.h:63
Basic type for a vector of 4 double components.
Definition vec4d.h:46
Basic type for a vector of 4 float components.
Definition vec4f.h:46
The render index is part of the Hydra 1.0 API and is only used for emulation purposes so that HdScene...
Adapter class providing data exchange with the client scene graph.
A set of rendering parameters used among render passes.
HdTask represents a unit of work to perform during a Hydra render.
Definition task.h:44
A task for setting up render pass state (camera, renderpass shader, GL states).
HDX_API void Sync(HdSceneDelegate *delegate, HdTaskContext *ctx, HdDirtyBits *dirtyBits) override
Sync the render pass resources.
HDX_API void Prepare(HdTaskContext *ctx, HdRenderIndex *renderIndex) override
Prepare the tasks resources.
HDX_API void Execute(HdTaskContext *ctx) override
Execute render pass task.
A path value used to locate objects in layers or scenegraphs.
Definition path.h:281
RenderTask parameters (renderpass state).