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 _jointBar;
115 HdBufferArrayRangeSharedPtr _uniformBar;
116};
117
118HDX_API
119bool operator==(const HdxOitResolveTaskParams& lhs,
120 const HdxOitResolveTaskParams& rhs);
121HDX_API
122bool operator!=(const HdxOitResolveTaskParams& lhs,
123 const HdxOitResolveTaskParams& rhs);
124HDX_API
125std::ostream& operator<<(std::ostream& out, const HdxOitResolveTaskParams& pv);
126
127PXR_NAMESPACE_CLOSE_SCOPE
128
129#endif
Basic type for a vector of 2 int components.
Definition vec2i.h:44
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.
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:281
OIT resolve task params.