Loading...
Searching...
No Matches
simpleLightingShader.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_HDST_SIMPLE_LIGHTING_SHADER_H
25#define PXR_IMAGING_HDST_SIMPLE_LIGHTING_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/lightingShader.h"
31
32#include "pxr/imaging/hd/version.h"
33
36
37#include <memory>
38#include <string>
39
40PXR_NAMESPACE_OPEN_SCOPE
41
42class HdRenderIndex;
43class HdRenderParam;
44class HdSceneDelegate;
45class HdStRenderBuffer;
47using HdStSimpleLightingShaderSharedPtr =
48 std::shared_ptr<class HdStSimpleLightingShader>;
49using HdRenderPassAovBindingVector = std::vector<HdRenderPassAovBinding>;
50
51TF_DECLARE_REF_PTRS(GlfBindingMap);
52
58{
59public:
60 HDST_API
62 HDST_API
64
66 HDST_API
67 ID ComputeHash() const override;
68 HDST_API
69 std::string GetSource(TfToken const &shaderStageKey) const override;
70 HDST_API
71 void BindResources(int program,
72 HdSt_ResourceBinder const &binder) override;
73 HDST_API
74 void UnbindResources(int program,
75 HdSt_ResourceBinder const &binder) override;
76
78 HDST_API
80
82 HDST_API
83 void RemoveBufferBinding(TfToken const &name);
84
86 HDST_API
88
89 HDST_API
90 void AddBindings(HdStBindingRequestVector *customBindings) override;
91
94 HDST_API
95 void AddResourcesFromTextures(ResourceContext &ctx) const override;
96
98 HDST_API
99 HdSt_MaterialParamVector const& GetParams() const override;
100
102 HDST_API
104 GfMatrix4d const &worldToViewMatrix,
105 GfMatrix4d const &projectionMatrix) override;
106
107 GlfSimpleLightingContextRefPtr GetLightingContext() const {
108 return _lightingContext;
109 };
110
116 HDST_API
117 void AllocateTextureHandles(HdRenderIndex const &renderIndex);
118
121 const HdStTextureHandleSharedPtr &
123 return _domeLightEnvironmentTextureHandle;
124 }
125
128 HDST_API
129 NamedTextureHandleVector const &GetNamedTextureHandles() const override;
130
133 HDST_API
134 const HdStTextureHandleSharedPtr &GetTextureHandle(
135 const TfToken &name) const;
136
137 HdRenderPassAovBindingVector const& GetShadowAovBindings() {
138 return _shadowAovBindings;
139 }
140
141private:
142 SdfPath _GetAovPath(TfToken const &aov, size_t shadowIndex) const;
143 void _ResizeOrCreateBufferForAov(size_t shadowIndex) const;
144 void _CleanupAovBindings();
145
146 GlfSimpleLightingContextRefPtr _lightingContext;
147 bool _useLighting;
148 std::unique_ptr<class HioGlslfx> _glslfx;
149
150 // Lexicographic ordering for stable output between runs.
151 std::map<TfToken, HdStBindingRequest> _customBuffers;
152
153 // The environment map used as source for the dome light textures.
154 //
155 // Handle is allocated in AllocateTextureHandles. Actual loading
156 // happens during commit.
157 HdStTextureHandleSharedPtr _domeLightEnvironmentTextureHandle;
158
159 // Other dome light textures.
160 NamedTextureHandleVector _namedTextureHandles;
161
162 NamedTextureHandleVector _domeLightTextureHandles;
163 NamedTextureHandleVector _shadowTextureHandles;
164
165 HdSt_MaterialParamVector _lightTextureParams;
166
167 HdRenderParam *_renderParam;
168
169 HdRenderPassAovBindingVector _shadowAovBindings;
170 std::vector<std::unique_ptr<HdStRenderBuffer>> _shadowAovBuffers;
171};
172
173
174PXR_NAMESPACE_CLOSE_SCOPE
175
176#endif // PXR_IMAGING_HDST_SIMPLE_LIGHTING_SHADER_H
Stores a 4x4 matrix of double elements.
Definition: matrix4d.h:88
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
Definition: renderIndex.h:121
The HdRenderParam is an opaque (to core Hydra) handle, to an object that is obtained from the render ...
Adapter class providing data exchange with the client scene graph.
BindingRequest allows externally allocated buffers to be bound at render time.
Definition: binding.h:126
A lighting shader base class.
The context available in implementations of AddResourcesFromTextures.
Definition: shaderCode.h:201
A shader that supports simple lighting functionality.
HDST_API void RemoveBufferBinding(TfToken const &name)
Remove name from custom binding.
HDST_API const HdStTextureHandleSharedPtr & GetTextureHandle(const TfToken &name) const
Get one of the textures that need to be computed from the dome light environment map.
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 void AllocateTextureHandles(HdRenderIndex const &renderIndex)
Allocates texture handles (texture loading happens later during commit) needed for lights.
const HdStTextureHandleSharedPtr & GetDomeLightEnvironmentTextureHandle() const
The dome light environment map used as source for the other dome light textures.
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 AddResourcesFromTextures(ResourceContext &ctx) const override
Adds computations to create the dome light textures that are pre-calculated from the environment map ...
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
The textures computed from the dome light environment map that the shader needs to bind for the dome ...
HDST_API void SetCamera(GfMatrix4d const &worldToViewMatrix, GfMatrix4d const &projectionMatrix) override
HdStLightingShader overrides.
HDST_API HdSt_MaterialParamVector const & GetParams() const override
HdStShaderCode overrides.
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:290
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:88
Standard pointer typedefs.
#define TF_DECLARE_REF_PTRS(type)
Define standard ref pointer types.
Definition: declarePtrs.h:75
A renderpass AOV represents a binding of some output of the rendering process to an output buffer.
Definition: aov.h:117