Loading...
Searching...
No Matches
oitResolveTask.h
1//
2// Copyright 2019 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_OIT_RESOLVE_TASK_H
8#define PXR_IMAGING_HDX_OIT_RESOLVE_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
15#include <memory>
16
17PXR_NAMESPACE_OPEN_SCOPE
18
19
20class HdSceneDelegate;
21
22using HdRenderPassStateSharedPtr = std::shared_ptr<class HdRenderPassState>;
23using HdStRenderPassStateSharedPtr = std::shared_ptr<class HdStRenderPassState>;
24
25using HdSt_ImageShaderRenderPassSharedPtr =
26 std::shared_ptr<class HdSt_ImageShaderRenderPass>;
27using HdStRenderPassShaderSharedPtr =
28 std::shared_ptr<class HdStRenderPassShader>;
29
32{
34 : useAovMultiSample(true)
35 , resolveAovMultiSample(true)
36 {}
37
38 bool useAovMultiSample;
39 bool resolveAovMultiSample;
40};
41
52{
53public:
55
56 HDX_API
57 static bool IsOitEnabled();
58
59 HDX_API
60 HdxOitResolveTask(HdSceneDelegate* delegate, SdfPath const& id);
61
62 HDX_API
63 ~HdxOitResolveTask() override;
64
66 HDX_API
67 void Sync(HdSceneDelegate* delegate,
68 HdTaskContext* ctx,
69 HdDirtyBits* dirtyBits) override;
70
74 HDX_API
75 void Prepare(HdTaskContext* ctx,
76 HdRenderIndex* renderIndex) override;
77
81 HDX_API
82 void Execute(HdTaskContext* ctx) override;
83
84private:
85 HdxOitResolveTask() = delete;
86 HdxOitResolveTask(const HdxOitResolveTask &) = delete;
87 HdxOitResolveTask &operator =(const HdxOitResolveTask &) = delete;
88
89 void _PrepareOitBuffers(
90 HdTaskContext* ctx,
91 HdRenderIndex* renderIndex,
92 GfVec2i const& screenSize);
93
94 GfVec2i _ComputeScreenSize(
95 HdTaskContext* ctx,
96 HdRenderIndex* renderIndex) const;
97
98 const HdRenderPassAovBindingVector& _GetAovBindings(
99 HdTaskContext* ctx) const;
100
101 void _UpdateCameraFraming(
102 HdTaskContext* ctx);
103
104 HdRenderPassStateSharedPtr _GetContextRenderPassState(
105 HdTaskContext* ctx) const;
106
107 HdSt_ImageShaderRenderPassSharedPtr _renderPass;
108 HdStRenderPassStateSharedPtr _renderPassState;
109 HdStRenderPassShaderSharedPtr _renderPassShader;
110
111 GfVec2i _screenSize;
112 HdBufferArrayRangeSharedPtr _counterBar;
113 HdBufferArrayRangeSharedPtr _dataBar;
114 HdBufferArrayRangeSharedPtr _depthBar;
115 HdBufferArrayRangeSharedPtr _indexBar;
116 HdBufferArrayRangeSharedPtr _uniformBar;
117};
118
119HDX_API
120bool operator==(const HdxOitResolveTaskParams& lhs,
121 const HdxOitResolveTaskParams& rhs);
122HDX_API
123bool operator!=(const HdxOitResolveTaskParams& lhs,
124 const HdxOitResolveTaskParams& rhs);
125HDX_API
126std::ostream& operator<<(std::ostream& out, const HdxOitResolveTaskParams& pv);
127
128PXR_NAMESPACE_CLOSE_SCOPE
129
130#endif
Basic type for a vector of 2 int components.
Definition: vec2i.h:44
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
Definition: renderIndex.h:105
Adapter class providing data exchange with the client scene graph.
HdTask represents a unit of work to perform during a Hydra render.
Definition: task.h:44
A task for resolving previous passes to pixels.
HDX_API void Sync(HdSceneDelegate *delegate, HdTaskContext *ctx, HdDirtyBits *dirtyBits) override
Sync the resolve 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].
OIT resolve task params.