HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
samplerObjectRegistry.h
Go to the documentation of this file.
1 //
2 // Copyright 2020 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_SAMPLER_OBJECT_REGISTRY_H
25 #define PXR_IMAGING_HD_ST_SAMPLER_OBJECT_REGISTRY_H
26 
27 #include "pxr/pxr.h"
28 #include "pxr/imaging/hdSt/api.h"
29 
30 #include <memory>
31 #include <vector>
32 
34 
37  std::shared_ptr<class HdStTextureObject>;
39  std::shared_ptr<class HdStSamplerObject>;
40 class Hgi;
41 
42 /// \class HdSt_SamplerObjectRegistry
43 ///
44 /// A simple registry for GPU samplers and GL texture sampler handles
45 /// (for bindless textures).
46 ///
47 /// The registry makes no attempt at de-duplication. But construction
48 /// is dispatched by texture type returing a matching sampler (e.g.,
49 /// HdStFieldSamplerObject for a HdStFieldTextureObject or
50 /// HdStPtexSamplerObject for the (not yet existing)
51 /// HdStPtexTextureObject). Also, it keeps a shared pointer to a sampler
52 /// around until garbage collection so that clients can safely drop their
53 /// shared pointers from different threads.
54 ///
56 {
57 public:
58  HDST_API
59  explicit HdSt_SamplerObjectRegistry(Hgi * hgi);
60 
61  HDST_API
63 
64  /// Create new sampler object matching the given texture object.
65  ///
66  /// If createBindlessHandle, also creates a texture sampler handle
67  /// (for bindless textures). The associated GPU resource is
68  /// created immediately and the call is not thread-safe.
69  HDST_API
72  HdSamplerParameters const &samplerParameters,
73  bool createBindlessHandle);
74 
75  /// Delete samplers no longer used by a client.
76  HDST_API
77  void GarbageCollect();
78 
79  /// Get Hgi instance
80  ///
81  HDST_API
82  Hgi * GetHgi() const { return _hgi; }
83 
84 private:
85  std::vector<HdStSamplerObjectSharedPtr> _samplerObjects;
86 
87  Hgi *_hgi;
88 };
89 
91 
92 #endif
HDST_API ~HdSt_SamplerObjectRegistry()
std::shared_ptr< class HdStTextureObject > HdStTextureObjectSharedPtr
HDST_API HdStSamplerObjectSharedPtr AllocateSampler(HdStTextureObjectSharedPtr const &texture, HdSamplerParameters const &samplerParameters, bool createBindlessHandle)
Definition: hgi.h:106
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1346
HDST_API Hgi * GetHgi() const
#define HDST_API
Definition: api.h:40
GLenum GLuint texture
Definition: glew.h:2361
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:91
HDST_API HdSt_SamplerObjectRegistry(Hgi *hgi)
HDST_API void GarbageCollect()
Delete samplers no longer used by a client.
std::shared_ptr< class HdStSamplerObject > HdStSamplerObjectSharedPtr
Definition: samplerObject.h:47