HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
renderTask.h
Go to the documentation of this file.
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_TASK_H
8 #define PXR_IMAGING_HDX_RENDER_TASK_H
9 
10 #include "pxr/pxr.h"
11 #include "pxr/imaging/hdx/api.h"
13 #include "pxr/imaging/hdx/task.h"
14 #include "pxr/imaging/hdx/renderSetupTask.h" // for short-term compatibility.
16 
17 #include <memory>
18 
20 
21 
22 class HdSceneDelegate;
23 struct HdxRenderTaskParams;
24 
25 using HdRenderPassStateSharedPtr = std::shared_ptr<class HdRenderPassState>;
26 using HdRenderPassSharedPtr = std::shared_ptr<class HdRenderPass>;
27 using HdxRenderSetupTaskSharedPtr = std::shared_ptr<class HdxRenderSetupTask>;
28 
29 /// \class HdxRenderTask
30 ///
31 /// A task for rendering geometry to pixels.
32 ///
33 /// Rendering state management can be handled two ways:
34 /// 1.) An application can create an HdxRenderTask and pass it the
35 /// HdxRenderTaskParams struct as "params".
36 /// 2.) An application can create an HdxRenderSetupTask and an
37 /// HdxRenderTask, and pass params to the setup task. In this case
38 /// the setup task must run first.
39 ///
40 /// Parameter unpacking is handled by HdxRenderSetupTask; in case #1,
41 /// HdxRenderTask creates a dummy setup task internally to manage the sync
42 /// process.
43 ///
44 /// Case #2 introduces complexity; the benefit is that by changing which
45 /// setup task you run before the render task, you can change the render
46 /// parameters without incurring a hydra sync or rebuilding any resources.
47 ///
48 class HdxRenderTask : public HdxTask
49 {
50 public:
52 
53  HDX_API
54  HdxRenderTask(HdSceneDelegate* delegate, SdfPath const& id);
55 
56  HDX_API
57  ~HdxRenderTask() override;
58 
59  /// Hooks for progressive rendering (delegated to renderpasses).
60  HDX_API
61  bool IsConverged() const override;
62 
63  /// Prepare the tasks resources
64  HDX_API
65  void Prepare(HdTaskContext* ctx,
66  HdRenderIndex* renderIndex) override;
67 
68  /// Execute render pass task
69  HDX_API
70  void Execute(HdTaskContext* ctx) override;
71 
72  /// Collect Render Tags used by the task.
73  HDX_API
74  const TfTokenVector &GetRenderTags() const override;
75 
76 protected:
77  /// Sync the render pass resources
78  HDX_API
79  void _Sync(HdSceneDelegate* delegate,
80  HdTaskContext* ctx,
81  HdDirtyBits* dirtyBits) override;
82 
83  HDX_API
85 
86  // XXX: Storm specific API
87  // While HdDrawItem is currently a core-Hydra concept, it'll be moved
88  // to Storm. Until then, allow querying the render pass to know if there's
89  // draw submission work.
90 
91  // Returns whether the render pass has any draw items to submit.
92  // For non-Storm backends, this returns true.
93  // When using with Storm tasks, make sure to call it after
94  // HdxRenderTask::Prepare().
95  HDX_API
96  bool _HasDrawItems() const;
97 
98 private:
100  TfTokenVector _renderTags;
101 
102  // Optional internal render setup task, for params unpacking.
103  HdxRenderSetupTaskSharedPtr _setupTask;
104 
105  // XXX: Storm specific API
106  // Setup additional state that HdStRenderPassState requires.
107  void _SetHdStRenderPassState(HdTaskContext *ctx,
108  HdStRenderPassState *renderPassState);
109 
110  // Inspect the AOV bindings to determine if any of them need to be cleared.
111  bool _NeedToClearAovs(HdRenderPassStateSharedPtr const &renderPassState)
112  const;
113 
114  HdxRenderTask() = delete;
115  HdxRenderTask(const HdxRenderTask &) = delete;
116  HdxRenderTask &operator =(const HdxRenderTask &) = delete;
117 };
118 
119 
121 
122 #endif //PXR_IMAGING_HDX_RENDER_TASK_H
std::shared_ptr< class HdRenderPassState > HdRenderPassStateSharedPtr
Definition: engine.h:25
std::shared_ptr< class HdRenderPass > HdRenderPassSharedPtr
Definition: engine.h:24
uint32_t HdDirtyBits
Definition: types.h:143
HDX_API void Prepare(HdTaskContext *ctx, HdRenderIndex *renderIndex) override
Prepare the tasks resources.
HDX_API ~HdxRenderTask() override
HDX_API HdRenderPassStateSharedPtr _GetRenderPassState(HdTaskContext *ctx) const
#define HDX_API
Definition: api.h:23
HDX_API bool IsConverged() const override
Hooks for progressive rendering (delegated to renderpasses).
HDX_API const TfTokenVector & GetRenderTags() const override
Collect Render Tags used by the task.
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:440
Definition: path.h:273
std::unordered_map< TfToken, VtValue, TfToken::HashFunctor > HdTaskContext
Definition: renderIndex.h:61
Definition: task.h:27
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1425
HDX_API bool _HasDrawItems() const
std::shared_ptr< class HdxRenderSetupTask > HdxRenderSetupTaskSharedPtr
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
HDX_API void Execute(HdTaskContext *ctx) override
Execute render pass task.
HDX_API void _Sync(HdSceneDelegate *delegate, HdTaskContext *ctx, HdDirtyBits *dirtyBits) override
Sync the render pass resources.