HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
oitResolveTask.h
Go to the documentation of this file.
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"
13 #include "pxr/imaging/hd/task.h"
14 
15 #include <memory>
16 
18 
19 
20 class HdSceneDelegate;
21 
22 using HdRenderPassStateSharedPtr = std::shared_ptr<class HdRenderPassState>;
23 using HdStRenderPassStateSharedPtr = std::shared_ptr<class HdStRenderPassState>;
24 
26  std::shared_ptr<class HdSt_ImageShaderRenderPass>;
28  std::shared_ptr<class HdStRenderPassShader>;
29 
30 /// OIT resolve task params.
32 {
34  : useAovMultiSample(true)
35  , resolveAovMultiSample(true)
36  {}
37 
40 };
41 
42 /// \class HdxOitResolveTask
43 ///
44 /// A task for resolving previous passes to pixels.
45 ///
46 /// It is also responsible for allocating the OIT buffers, but it
47 /// leaves the clearing of the OIT buffers to the OIT render tasks.
48 /// OIT render tasks coordinate with the resolve task through
49 /// HdxOitResolveTask::OitBufferAccessor.
50 ///
51 class HdxOitResolveTask : public HdTask
52 {
53 public:
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 
65  /// Sync the resolve pass resources
66  HDX_API
67  void Sync(HdSceneDelegate* delegate,
68  HdTaskContext* ctx,
69  HdDirtyBits* dirtyBits) override;
70 
71  /// Prepare the tasks resources
72  ///
73  /// Allocates OIT buffers if requested by OIT render task
74  HDX_API
75  void Prepare(HdTaskContext* ctx,
76  HdRenderIndex* renderIndex) override;
77 
78  /// Execute render pass task
79  ///
80  /// Resolves OIT buffers
81  HDX_API
82  void Execute(HdTaskContext* ctx) override;
83 
84 private:
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 
108  HdStRenderPassStateSharedPtr _renderPassState;
109  HdStRenderPassShaderSharedPtr _renderPassShader;
110 
111  GfVec2i _screenSize;
112  HdBufferArrayRangeSharedPtr _counterBar;
114  HdBufferArrayRangeSharedPtr _depthBar;
115  HdBufferArrayRangeSharedPtr _indexBar;
116  HdBufferArrayRangeSharedPtr _uniformBar;
117 };
118 
119 HDX_API
120 bool operator==(const HdxOitResolveTaskParams& lhs,
121  const HdxOitResolveTaskParams& rhs);
122 HDX_API
123 bool operator!=(const HdxOitResolveTaskParams& lhs,
124  const HdxOitResolveTaskParams& rhs);
125 HDX_API
126 std::ostream& operator<<(std::ostream& out, const HdxOitResolveTaskParams& pv);
127 
129 
130 #endif
std::shared_ptr< class HdRenderPassState > HdRenderPassStateSharedPtr
Definition: engine.h:25
HDX_API void Prepare(HdTaskContext *ctx, HdRenderIndex *renderIndex) override
Definition: vec2i.h:43
uint32_t HdDirtyBits
Definition: types.h:143
static HDX_API bool IsOitEnabled()
#define HDX_API
Definition: api.h:23
std::shared_ptr< class HdStRenderPassState > HdStRenderPassStateSharedPtr
Definition: commandBuffer.h:28
HDX_API void Sync(HdSceneDelegate *delegate, HdTaskContext *ctx, HdDirtyBits *dirtyBits) override
Sync the resolve pass resources.
std::shared_ptr< class HdSt_ImageShaderRenderPass > HdSt_ImageShaderRenderPassSharedPtr
HDX_API ~HdxOitResolveTask() override
HDX_API void Execute(HdTaskContext *ctx) override
bool operator!=(const Mat3< T0 > &m0, const Mat3< T1 > &m1)
Inequality operator, does exact floating point comparisons.
Definition: Mat3.h:556
HDX_API std::ostream & operator<<(std::ostream &out, const HdxOitResolveTaskParams &pv)
Definition: task.h:43
Definition: path.h:273
std::unordered_map< TfToken, VtValue, TfToken::HashFunctor > HdTaskContext
Definition: renderIndex.h:61
std::shared_ptr< class HdStRenderPassShader > HdStRenderPassShaderSharedPtr
OIT resolve task params.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1425
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
std::shared_ptr< HdBufferArrayRange > HdBufferArrayRangeSharedPtr
Definition: bufferArray.h:27
std::vector< HdRenderPassAovBinding > HdRenderPassAovBindingVector
Definition: aov.h:137
bool operator==(const Mat3< T0 > &m0, const Mat3< T1 > &m1)
Equality operator, does exact floating point comparisons.
Definition: Mat3.h:542