Loading...
Searching...
No Matches
renderTask.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_TASK_H
8#define PXR_IMAGING_HDX_RENDER_TASK_H
9
10#include "pxr/pxr.h"
11#include "pxr/imaging/hd/renderIndex.h"
12#include "pxr/imaging/hdx/api.h"
13#include "pxr/imaging/hdx/version.h"
14#include "pxr/imaging/hdx/task.h"
15#include "pxr/imaging/hdx/renderSetupTask.h" // for short-term compatibility.
16#include "pxr/imaging/hdSt/renderPassState.h"
17
18#include <memory>
19
20PXR_NAMESPACE_OPEN_SCOPE
21
22
23class HdSceneDelegate;
25
26using HdRenderPassStateSharedPtr = std::shared_ptr<class HdRenderPassState>;
27using HdRenderPassSharedPtr = std::shared_ptr<class HdRenderPass>;
28using HdxRenderSetupTaskSharedPtr = std::shared_ptr<class HdxRenderSetupTask>;
29
49class HdxRenderTask : public HdxTask
50{
51public:
53
54 HDX_API
55 HdxRenderTask(HdSceneDelegate* delegate, SdfPath const& id);
56
57 HDX_API
58 ~HdxRenderTask() override;
59
61 HDX_API
62 bool IsConverged() const override;
63
65 HDX_API
66 void Prepare(HdTaskContext* ctx,
67 HdRenderIndex* renderIndex) override;
68
70 HDX_API
71 void Execute(HdTaskContext* ctx) override;
72
74 HDX_API
75 const TfTokenVector &GetRenderTags() const override;
76
77protected:
79 HDX_API
80 void _Sync(HdSceneDelegate* delegate,
81 HdTaskContext* ctx,
82 HdDirtyBits* dirtyBits) override;
83
84 HDX_API
85 HdRenderPassStateSharedPtr _GetRenderPassState() const;
86
87 HDX_API
88 HdRenderPassSharedPtr _GetRenderPass() const;
89
90 HDX_API
91 void _PrepareRenderPassState(HdTaskContext* ctx,
92 HdRenderIndex* renderIndex);
93
94 // XXX: Storm specific API
95 // While HdDrawItem is currently a core-Hydra concept, it'll be moved
96 // to Storm. Until then, allow querying the render pass to know if there's
97 // draw submission work.
98 //
99 // Returns whether the render pass has any draw items to submit.
100 // For non-Storm backends, this returns true.
101 // When using with Storm tasks, make sure to call it after
102 // HdxRenderTask::Prepare().
103 HDX_API
104 bool _HasDrawItems() const;
105
106 // XXX: Storm specific API
107 // Binds the selection highlight buffers published by HdxSelectionTask onto
108 // the given render pass shader.
109 HDX_API
110 void _AddStormSelectionBindings(
111 HdTaskContext* ctx,
112 HdStRenderPassShaderSharedPtr passShader);
113
114 // XXX: Storm specific API
115 // Binds the lighting shader published by HdxSimpleLightTask onto
116 // the given render pass state.
117 HDX_API
118 void _AddStormLightingShader(
119 HdTaskContext* ctx,
120 HdStRenderPassStateSharedPtr passState);
121
122private:
123 HdRenderPassSharedPtr _pass;
124 HdRenderPassStateSharedPtr _passState;
125 TfTokenVector _renderTags;
126
127 // Optional internal render setup task, for params unpacking.
128 HdxRenderSetupTaskSharedPtr _setupTask;
129
130 // XXX: Storm specific API
131 // Setup additional state that HdStRenderPassState requires.
132 void _SetHdStRenderPassState(HdTaskContext *ctx,
133 HdStRenderPassState *renderPassState);
134
135 // Inspect the AOV bindings to determine if any of them need to be cleared.
136 bool _NeedToClearAovs(HdRenderPassStateSharedPtr const &renderPassState)
137 const;
138
139 HdxRenderTask() = delete;
140 HdxRenderTask(const HdxRenderTask &) = delete;
141 HdxRenderTask &operator =(const HdxRenderTask &) = delete;
142};
143
144
145PXR_NAMESPACE_CLOSE_SCOPE
146
147#endif //PXR_IMAGING_HDX_RENDER_TASK_H
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.
A set of rendering parameters used among render passes.
A task for rendering geometry to pixels.
Definition renderTask.h:50
HDX_API const TfTokenVector & GetRenderTags() const override
Collect Render Tags used by the task.
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.
HDX_API bool IsConverged() const override
Hooks for progressive rendering (delegated to renderpasses).
Base class for (some) tasks in Hdx that provides common progressive rendering and Hgi functionality.
Definition task.h:28
A path value used to locate objects in layers or scenegraphs.
Definition path.h:281
RenderTask parameters (renderpass state).
std::vector< TfToken > TfTokenVector
Convenience types.
Definition token.h:489