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
52class HdxRenderSetupTask : public HdTask
53{
54public:
55 HDX_API
56 HdxRenderSetupTask(HdSceneDelegate* delegate, SdfPath const& id);
57
58 HDX_API
59 ~HdxRenderSetupTask() override;
60
61
62 // APIs used from HdxRenderTask to manage the sync/prepare process.
63 HDX_API
64 void SyncParams(HdSceneDelegate* delegate,
65 HdxRenderTaskParams const &params);
66 HDX_API
67 void PrepareCamera(HdRenderIndex* renderIndex);
68
69 HdRenderPassStateSharedPtr const &GetRenderPassState() const {
70 return _renderPassState;
71 }
72
74 HDX_API
75 void Sync(HdSceneDelegate* delegate,
76 HdTaskContext* ctx,
77 HdDirtyBits* dirtyBits) override;
78
80 HDX_API
81 void Prepare(HdTaskContext* ctx,
82 HdRenderIndex* renderIndex) override;
83
85 HDX_API
86 void Execute(HdTaskContext* ctx) override;
87
88private:
89 HdRenderPassStateSharedPtr _renderPassState;
90 HdStRenderPassShaderSharedPtr _colorRenderPassShader;
91 HdStRenderPassShaderSharedPtr _idRenderPassShader;
92 SdfPath _cameraId;
93 CameraUtilFraming _framing;
94 std::optional<CameraUtilConformWindowPolicy> _overrideWindowPolicy;
95 // Used when client did not specify the camera framing (more expressive
96 // and preferred).
97 GfVec4d _viewport;
98 HdRenderPassAovBindingVector _aovBindings;
99 HdRenderPassAovBindingVector _aovInputBindings;
100
101 void _SetRenderpassShadersForStorm(
102 HdxRenderTaskParams const& params,
103 HdStRenderPassState *renderPassState);
104
105 HdRenderPassStateSharedPtr &_GetRenderPassState(HdRenderIndex* renderIndex);
106
107 void _PrepareAovBindings(HdTaskContext* ctx, HdRenderIndex* renderIndex);
108
109
110 HdxRenderSetupTask() = delete;
111 HdxRenderSetupTask(const HdxRenderSetupTask &) = delete;
112 HdxRenderSetupTask &operator =(const HdxRenderSetupTask &) = delete;
113};
114
120{
122 // Global Params
123 : overrideColor(0.0)
124 , wireframeColor(0.0)
125 , pointColor(GfVec4f(0,0,0,1))
126 , pointSize(3.0)
127 , enableLighting(false)
128 , enableIdRender(false)
129 , alphaThreshold(0.0)
130 , enableSceneMaterials(true)
131 , enableSceneLights(true)
132 , enableClipping(true)
133 // Selection/Masking params
134 , maskColor(1.0f, 0.0f, 0.0f, 1.0f)
135 , indicatorColor(0.0f, 1.0f, 0.0f, 1.0f)
136 , pointSelectedSize(3.0)
137 // Storm render pipeline state
138 , depthBiasUseDefault(true)
139 , depthBiasEnable(false)
140 , depthBiasConstantFactor(0.0f)
141 , depthBiasSlopeFactor(1.0f)
142 , depthFunc(HdCmpFuncLEqual)
143 , depthMaskEnable(true)
144 , stencilFunc(HdCmpFuncAlways)
145 , stencilRef(0)
146 , stencilMask(~0)
147 , stencilFailOp(HdStencilOpKeep)
148 , stencilZFailOp(HdStencilOpKeep)
149 , stencilZPassOp(HdStencilOpKeep)
150 , stencilEnable(false)
151 , blendColorOp(HdBlendOpAdd)
152 , blendColorSrcFactor(HdBlendFactorOne)
153 , blendColorDstFactor(HdBlendFactorZero)
154 , blendAlphaOp(HdBlendOpAdd)
155 , blendAlphaSrcFactor(HdBlendFactorOne)
156 , blendAlphaDstFactor(HdBlendFactorZero)
157 , blendConstantColor(0.0f, 0.0f, 0.0f, 0.0f)
158 , blendEnable(false)
159 , enableAlphaToCoverage(true)
160 , useAovMultiSample(true)
161 , resolveAovMultiSample(true)
162 // Camera framing and viewer state
163 , viewport(0.0)
164 , cullStyle(HdCullStyleBackUnlessDoubleSided)
165 {}
166
167 // ---------------------------------------------------------------------- //
168 // Application rendering state
169 // XXX: Several of the parameters below are specific to (or work only with)
170 // Storm and stem from its integration in Presto and usdview.
171 // ---------------------------------------------------------------------- //
172 // "Global" parameters while rendering.
173 GfVec4f overrideColor;
174 GfVec4f wireframeColor;
175 GfVec4f pointColor;
176 float pointSize;
177 bool enableLighting;
178 bool enableIdRender;
179 float alphaThreshold;
180 bool enableSceneMaterials;
181 bool enableSceneLights;
182 bool enableClipping;
183
184 // Selection/Masking params
185 GfVec4f maskColor;
186 GfVec4f indicatorColor;
187 float pointSelectedSize;
188
189 // AOVs to render to
190 // XXX: As a transitional API, if this is empty it indicates the renderer
191 // should write color and depth to the GL framebuffer.
192 HdRenderPassAovBindingVector aovBindings;
193 HdRenderPassAovBindingVector aovInputBindings;
194
195 // ---------------------------------------------------------------------- //
196 // Render pipeline state for rasterizers.
197 // XXX: These are relevant only for Storm.
198 // ---------------------------------------------------------------------- //
199 bool depthBiasUseDefault; // inherit application GL state
200 bool depthBiasEnable;
201 float depthBiasConstantFactor;
202 float depthBiasSlopeFactor;
203
204 HdCompareFunction depthFunc;
205 bool depthMaskEnable;
206
207 // Stencil
208 HdCompareFunction stencilFunc;
209 int stencilRef;
210 int stencilMask;
211 HdStencilOp stencilFailOp;
212 HdStencilOp stencilZFailOp;
213 HdStencilOp stencilZPassOp;
214 bool stencilEnable;
215
216 // Blending
217 HdBlendOp blendColorOp;
218 HdBlendFactor blendColorSrcFactor;
219 HdBlendFactor blendColorDstFactor;
220 HdBlendOp blendAlphaOp;
221 HdBlendFactor blendAlphaSrcFactor;
222 HdBlendFactor blendAlphaDstFactor;
223 GfVec4f blendConstantColor;
224 bool blendEnable;
225
226 // AlphaToCoverage
227 bool enableAlphaToCoverage;
228
229 // If true (default), render into the multi-sampled AOVs (rather than
230 // the resolved AOVs).
231 bool useAovMultiSample;
232
233 // If true (default), multi-sampled AOVs will be resolved at the end of a
234 // render pass.
235 bool resolveAovMultiSample;
236
237 // ---------------------------------------------------------------------- //
238 // Viewer & Camera Framing state
239 // ---------------------------------------------------------------------- //
240 SdfPath camera;
241 CameraUtilFraming framing;
242 // Only used if framing is invalid.
243 GfVec4d viewport;
244 HdCullStyle cullStyle;
245 std::optional<CameraUtilConformWindowPolicy> overrideWindowPolicy;
246};
247
248// VtValue requirements
249HDX_API
250std::ostream& operator<<(std::ostream& out, const HdxRenderTaskParams& pv);
251HDX_API
252bool operator==(const HdxRenderTaskParams& lhs, const HdxRenderTaskParams& rhs);
253HDX_API
254bool operator!=(const HdxRenderTaskParams& lhs, const HdxRenderTaskParams& rhs);
255
256
257PXR_NAMESPACE_CLOSE_SCOPE
258
259#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 Hydra render index is a flattened representation of the client scene graph, which may be composed...
Definition: renderIndex.h:104
Adapter class providing data exchange with the client scene graph.
A set of rendering parameters used among render passes.
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:274
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].
RenderTask parameters (renderpass state).