Loading...
Searching...
No Matches
renderPassShader.h
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
5// with the following modification; you may not use this file except in
6// compliance with the Apache License and the following modification to it:
7// Section 6. Trademarks. is deleted and replaced with:
8//
9// 6. Trademarks. This License does not grant permission to use the trade
10// names, trademarks, service marks, or product names of the Licensor
11// and its affiliates, except as required to comply with Section 4(c) of
12// the License and to reproduce the content of the NOTICE file.
13//
14// You may obtain a copy of the Apache License at
15//
16// http://www.apache.org/licenses/LICENSE-2.0
17//
18// Unless required by applicable law or agreed to in writing, software
19// distributed under the Apache License with the above modification is
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21// KIND, either express or implied. See the Apache License for the specific
22// language governing permissions and limitations under the Apache License.
23//
24#ifndef PXR_IMAGING_HD_ST_RENDER_PASS_SHADER_H
25#define PXR_IMAGING_HD_ST_RENDER_PASS_SHADER_H
26
27#include "pxr/pxr.h"
28#include "pxr/imaging/hdSt/api.h"
29#include "pxr/imaging/hdSt/binding.h"
30#include "pxr/imaging/hdSt/shaderCode.h"
31#include "pxr/imaging/hd/enums.h"
33
35#include "pxr/base/tf/token.h"
36
37#include <memory>
38
39PXR_NAMESPACE_OPEN_SCOPE
40
41using HdStRenderPassShaderSharedPtr =
42 std::shared_ptr<class HdStRenderPassShader>;
43class HdRenderIndex;
44using HdRenderPassAovBindingVector =
45 std::vector<struct HdRenderPassAovBinding>;
46
52public:
53 HDST_API
55 HDST_API
56 HdStRenderPassShader(TfToken const &glslfxFile);
57 HDST_API
58 ~HdStRenderPassShader() override;
59
61 HDST_API
62 ID ComputeHash() const override;
63 HDST_API
64 std::string GetSource(TfToken const &shaderStageKey) const override;
65 HDST_API
66 void BindResources(int program,
67 HdSt_ResourceBinder const &binder) override;
68 HDST_API
69 void UnbindResources(int program,
70 HdSt_ResourceBinder const &binder) override;
71 HDST_API
72 void AddBindings(HdStBindingRequestVector *customBindings) override;
73 HDST_API
74 HdSt_MaterialParamVector const& GetParams() const override;
75
76 HDST_API
77 NamedTextureHandleVector const & GetNamedTextureHandles() const override;
78
80 HDST_API
82
84 HDST_API
85 void RemoveBufferBinding(TfToken const &name);
86
88 HDST_API
90
91 // Sets the textures and params such that the shader can access
92 // the requested aovs with HdGet_AOVNAMEReadback().
93 //
94 // Needs to be called in task prepare or sync since it is
95 // allocating texture handles.
96 //
97 HDST_API
98 void UpdateAovInputTextures(
99 HdRenderPassAovBindingVector const &aovInputBindings,
100 HdRenderIndex * const renderIndex);
101
102private:
103 TfToken _glslfxFile;
104 std::unique_ptr<HioGlslfx> _glslfx;
105 mutable size_t _hash;
106 mutable bool _hashValid;
107
108 // Lexicographic ordering for stable output between runs.
109 std::map<TfToken, HdStBindingRequest> _customBuffers;
110
111 NamedTextureHandleVector _namedTextureHandles;
112
113 HdSt_MaterialParamVector _params;
114
115 // No copying
117 HdStRenderPassShader &operator =(const HdStRenderPassShader &) = delete;
118
119 HioGlslfx const * _GetGlslfx() const override;
120};
121
122
123PXR_NAMESPACE_CLOSE_SCOPE
124
125#endif // PXR_IMAGING_HD_ST_RENDER_PASS_SHADER_H
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
Definition: renderIndex.h:121
BindingRequest allows externally allocated buffers to be bound at render time.
Definition: binding.h:126
A shader that supports common renderPass functionality.
HDST_API void RemoveBufferBinding(TfToken const &name)
Remove name from custom binding.
HDST_API void AddBufferBinding(HdStBindingRequest const &req)
Add a custom binding request for use when this shader executes.
HDST_API void AddBindings(HdStBindingRequestVector *customBindings) override
Add custom bindings (used by codegen)
HDST_API void ClearBufferBindings()
Clear all custom bindings associated with this shader.
HDST_API std::string GetSource(TfToken const &shaderStageKey) const override
Returns the shader source provided by this shader for shaderStageKey.
HDST_API ID ComputeHash() const override
HdShader overrides.
HDST_API void UnbindResources(int program, HdSt_ResourceBinder const &binder) override
Unbinds shader-specific resources.
HDST_API void BindResources(int program, HdSt_ResourceBinder const &binder) override
Binds shader-specific resources to program XXX: this interface is meant to be used for bridging the G...
HDST_API NamedTextureHandleVector const & GetNamedTextureHandles() const override
Textures that need to be bound for this shader.
HDST_API HdSt_MaterialParamVector const & GetParams() const override
Returns the shader parameters for this shader.
A base class representing the implementation (code) of a shader, used in conjunction with HdRenderPas...
Definition: shaderCode.h:76
A class representing the config and shader source of a glslfx file.
Definition: glslfx.h:151
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:88
Standard pointer typedefs.
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...