All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
light.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 HDST_LIGHT_H
25 #define HDST_LIGHT_H
26 
27 #include "pxr/pxr.h"
28 #include "pxr/imaging/hdSt/api.h"
29 #include "pxr/imaging/hd/version.h"
30 #include "pxr/imaging/hd/light.h"
31 
32 #include "pxr/imaging/glf/simpleLight.h"
33 
34 #include "pxr/base/tf/staticTokens.h"
35 #include "pxr/base/vt/dictionary.h"
36 #include "pxr/base/vt/value.h"
37 
38 #include <boost/shared_ptr.hpp>
39 
40 #include <vector>
41 
42 PXR_NAMESPACE_OPEN_SCOPE
43 
44 
45 class HdResourceRegistry;
46 class HdSceneDelegate;
47 typedef boost::shared_ptr<class HdStLight> HdStLightSharedPtr;
48 typedef std::vector<class HdStLight const *> HdStLightPtrConstVector;
49 typedef boost::shared_ptr<class HdStTextureResource>
50  HdStTextureResourceSharedPtr;
51 
56 class HdStLight final : public HdLight {
57 public:
58  HDST_API
59  HdStLight(SdfPath const & id, TfToken const &lightType);
60  HDST_API
61  virtual ~HdStLight();
62 
64  HDST_API
65  virtual void Sync(HdSceneDelegate *sceneDelegate,
66  HdRenderParam *renderParam,
67  HdDirtyBits *dirtyBits) override;
68 
70  HDST_API
71  VtValue Get(TfToken const &token) const;
72 
76  HDST_API
77  virtual HdDirtyBits GetInitialDirtyBitsMask() const override;
78 
79 private:
83  GlfSimpleLight _ApproximateAreaLight(SdfPath const &id,
84  HdSceneDelegate *sceneDelegate);
85 
86 
90  GlfSimpleLight _PrepareDomeLight(SdfPath const &id,
91  HdSceneDelegate *sceneDelegate);
92 
94  void _SetupComputations(GLuint sourceTexture,
95  HdResourceRegistry *resourceRegistry);
96 
97 private:
98  // Stores the internal light type of this light.
99  TfToken _lightType;
100 
101  // Cached states.
102  TfHashMap<TfToken, VtValue, TfToken::HashFunctor> _params;
103 
104  HdStTextureResourceSharedPtr _textureResource;
105 
106  GLuint _irradianceTexture;
107  GLuint _prefilterTexture;
108  GLuint _brdfTexture;
109 };
110 
111 
112 PXR_NAMESPACE_CLOSE_SCOPE
113 
114 #endif // HDST_LIGHT_H
virtual HDST_API void Sync(HdSceneDelegate *sceneDelegate, HdRenderParam *renderParam, HdDirtyBits *dirtyBits) override
Synchronizes state from the delegate to this object.
HDST_API VtValue Get(TfToken const &token) const
Accessor for tasks to get the parameters cached in this object.
The HdRenderParam is an opaque (to core Hydra) handle, to an object that is obtained from the render ...
virtual HDST_API HdDirtyBits GetInitialDirtyBitsMask() const override
Returns the minimal set of dirty bits to place in the change tracker for use in the first sync of thi...
A light model, used in conjunction with HdRenderPass.
Definition: light.h:56
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:89
Adapter class providing data exchange with the client scene graph.
A central registry of all GPU resources.
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:287
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Definition: value.h:182
A light model, used in conjunction with HdRenderPass.
Definition: light.h:86