MaterialX 1.39.2
Loading...
Searching...
No Matches
ImageHandler.h
Go to the documentation of this file.
1//
2// Copyright Contributors to the MaterialX Project
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#ifndef MATERIALX_IMAGEHANDLER_H
7#define MATERIALX_IMAGEHANDLER_H
8
11
14
16
18
19MATERIALX_NAMESPACE_BEGIN
20
21extern MX_RENDER_API const string IMAGE_PROPERTY_SEPARATOR;
22extern MX_RENDER_API const string UADDRESS_MODE_SUFFIX;
23extern MX_RENDER_API const string VADDRESS_MODE_SUFFIX;
24extern MX_RENDER_API const string FILTER_TYPE_SUFFIX;
25extern MX_RENDER_API const string DEFAULT_COLOR_SUFFIX;
26
27class ImageHandler;
28class ImageLoader;
29class VariableBlock;
30
32using ImageHandlerPtr = std::shared_ptr<ImageHandler>;
33
35using ImageLoaderPtr = std::shared_ptr<ImageLoader>;
36
38using ImageLoaderMap = std::unordered_map<string, std::vector<ImageLoaderPtr>>;
39
42class MX_RENDER_API ImageSamplingProperties
43{
44 public:
49 void setProperties(const string& fileNameUniform,
50 const VariableBlock& uniformBlock);
51
52 bool operator==(const ImageSamplingProperties& r) const;
53
56 enum class AddressMode : int
57 {
58 UNSPECIFIED = -1,
59 CONSTANT = 0,
60 CLAMP = 1,
61 PERIODIC = 2,
62 MIRROR = 3
63 };
64
66 AddressMode uaddressMode = AddressMode::UNSPECIFIED;
68 AddressMode vaddressMode = AddressMode::UNSPECIFIED;
69
72 enum class FilterType : int
73 {
74 UNSPECIFIED = -1,
75 CLOSEST = 0,
76 LINEAR = 1,
77 CUBIC = 2
78 };
79
81 FilterType filterType = FilterType::UNSPECIFIED;
82
84 bool enableMipmaps = true;
85
88 Color4 defaultColor = { 0.0f, 0.0f, 0.0f, 1.0f };
89};
90
93struct MX_RENDER_API ImageSamplingKeyHasher
94{
95 size_t operator()(const ImageSamplingProperties& k) const
96 {
97 return (size_t) k.enableMipmaps + // 1 bit
98 (((size_t) k.filterType & 3) << 1) + // 2 bit
99 ((((size_t) k.uaddressMode + 1) & 7) << 3) + // 3 bit
100 ((((size_t) k.vaddressMode + 1) & 7) << 6) + // 3 bit
101 ((((size_t) k.defaultColor[0] + 1)) << 9) ;
102 }
103};
104
107class MX_RENDER_API ImageLoader
108{
109 public:
110 ImageLoader()
111 {
112 }
113 virtual ~ImageLoader() { }
114
116 static const string BMP_EXTENSION;
117 static const string EXR_EXTENSION;
118 static const string GIF_EXTENSION;
119 static const string HDR_EXTENSION;
120 static const string JPG_EXTENSION;
121 static const string JPEG_EXTENSION;
122 static const string PIC_EXTENSION;
123 static const string PNG_EXTENSION;
124 static const string PSD_EXTENSION;
125 static const string TGA_EXTENSION;
126 static const string TIF_EXTENSION;
127 static const string TIFF_EXTENSION;
128 static const string TXT_EXTENSION;
129 static const string TX_EXTENSION;
130 static const string TXR_EXTENSION;
131
135 {
136 return _extensions;
137 }
138
144 virtual bool saveImage(const FilePath& filePath,
145 ConstImagePtr image,
146 bool verticalFlip = false);
147
151 virtual ImagePtr loadImage(const FilePath& filePath);
152
153 protected:
154 // List of supported string extensions
155 StringSet _extensions;
156};
157
163class MX_RENDER_API ImageHandler
164{
165 public:
166 static ImageHandlerPtr create(ImageLoaderPtr imageLoader)
167 {
168 return ImageHandlerPtr(new ImageHandler(imageLoader));
169 }
170 virtual ~ImageHandler() { }
171
175
178
185 bool saveImage(const FilePath& filePath, ConstImagePtr image, bool verticalFlip = false);
186
194 ImagePtr acquireImage(const FilePath& filePath, const Color4& defaultColor = Color4(0.0f));
195
199 virtual bool bindImage(ImagePtr image, const ImageSamplingProperties& samplingProperties);
200
203 virtual bool unbindImage(ImagePtr image);
204
207
210 {
211 _searchPath = path;
212 }
213
216 {
217 return _searchPath;
218 }
219
222 {
223 _resolver = resolver;
224 }
225
228 {
229 return _resolver;
230 }
231
233 virtual bool createRenderResources(ImagePtr image, bool generateMipMaps, bool useAsRenderTarget = false);
234
237 virtual void releaseRenderResources(ImagePtr image = nullptr);
238
242 {
244 _imageCache.clear();
245 }
246
249 {
250 return _zeroImage;
251 }
252
256
257 protected:
258 // Protected constructor.
259 ImageHandler(ImageLoaderPtr imageLoader);
260
261 // Load an image from the file system.
262 ImagePtr loadImage(const FilePath& filePath);
263
264 // Add an image to the cache.
265 void cacheImage(const string& filePath, ImagePtr image);
266
267 // Return the cached image, if found; otherwise return an empty
268 // shared pointer.
269 ImagePtr getCachedImage(const FilePath& filePath);
270
271 protected:
272 ImageLoaderMap _imageLoaders;
273 ImageMap _imageCache;
274 FileSearchPath _searchPath;
275 StringResolverPtr _resolver;
276 ImagePtr _zeroImage;
277};
278
279MATERIALX_NAMESPACE_END
280
281#endif
The top-level Document class.
shared_ptr< const Document > ConstDocumentPtr
A shared pointer to a const Document.
Definition Document.h:24
shared_ptr< StringResolver > StringResolverPtr
A shared pointer to a StringResolver.
Definition Element.h:66
Cross-platform support for file and search paths.
Image class.
shared_ptr< const Image > ConstImagePtr
A shared pointer to a const image.
Definition Image.h:26
std::vector< ImagePtr > ImageVec
A vector of images.
Definition Image.h:32
std::unordered_map< string, ImagePtr > ImageMap
A map from strings to images.
Definition Image.h:29
shared_ptr< Image > ImagePtr
A shared pointer to an image.
Definition Image.h:23
std::shared_ptr< ImageLoader > ImageLoaderPtr
Shared pointer to an ImageLoader.
Definition ImageHandler.h:35
std::shared_ptr< ImageHandler > ImageHandlerPtr
Shared pointer to an ImageHandler.
Definition ImageHandler.h:32
std::unordered_map< string, std::vector< ImageLoaderPtr > > ImageLoaderMap
Map from strings to vectors of image loaders.
Definition ImageHandler.h:38
std::set< string > StringSet
A set of strings.
Definition Library.h:64
Macros for declaring imported and exported symbols.
A four-component color value.
Definition Types.h:364
A generic file path, supporting both syntactic and file system operations.
Definition File.h:27
A sequence of file paths, which may be queried to find the first instance of a given filename on the ...
Definition File.h:219
Base image handler class.
Definition ImageHandler.h:164
ImagePtr acquireImage(const FilePath &filePath, const Color4 &defaultColor=Color4(0.0f))
Acquire an image from the cache or file system.
virtual bool createRenderResources(ImagePtr image, bool generateMipMaps, bool useAsRenderTarget=false)
Create rendering resources for the given image.
virtual bool unbindImage(ImagePtr image)
Unbind an image, making it no longer active for rendering.
void clearImageCache()
Clear the contents of the image cache, first releasing any render resources associated with cached im...
Definition ImageHandler.h:241
ImageVec getReferencedImages(ConstDocumentPtr doc)
Acquire all images referenced by the given document, and return the images in a vector.
const FileSearchPath & getSearchPath() const
Return the image search path.
Definition ImageHandler.h:215
StringResolverPtr getFilenameResolver() const
Return the filename resolver for images.
Definition ImageHandler.h:227
virtual bool bindImage(ImagePtr image, const ImageSamplingProperties &samplingProperties)
Bind an image for rendering.
void setSearchPath(const FileSearchPath &path)
Set the search path to be used for finding images on the file system.
Definition ImageHandler.h:209
void addLoader(ImageLoaderPtr loader)
Add another image loader to the handler, which will be invoked if existing loaders cannot load a give...
void unbindImages()
Unbind all images that are currently stored in the cache.
virtual void releaseRenderResources(ImagePtr image=nullptr)
Release rendering resources for the given image, or for all cached images if no image pointer is spec...
ImagePtr getZeroImage() const
Return a fallback image with zeroes in all channels.
Definition ImageHandler.h:248
StringSet supportedExtensions()
Get a list of extensions supported by the handler.
void setFilenameResolver(StringResolverPtr resolver)
Set the filename resolver for images.
Definition ImageHandler.h:221
bool saveImage(const FilePath &filePath, ConstImagePtr image, bool verticalFlip=false)
Save image to disk.
Abstract base class for file-system image loaders.
Definition ImageHandler.h:108
const StringSet & supportedExtensions() const
Returns a list of supported extensions.
Definition ImageHandler.h:134
virtual bool saveImage(const FilePath &filePath, ConstImagePtr image, bool verticalFlip=false)
Save an image to the file system.
virtual ImagePtr loadImage(const FilePath &filePath)
Load an image from the file system.
static const string BMP_EXTENSION
Standard image file extensions.
Definition ImageHandler.h:116
Interface to describe sampling properties for images.
Definition ImageHandler.h:43
FilterType
Filter type options.
Definition ImageHandler.h:73
AddressMode
Address mode options.
Definition ImageHandler.h:57
FilterType filterType
Filter type.
Definition ImageHandler.h:81
void setProperties(const string &fileNameUniform, const VariableBlock &uniformBlock)
Set the properties based on data in a uniform block.
Color4 defaultColor
Default color.
Definition ImageHandler.h:88
AddressMode uaddressMode
Address mode in U.
Definition ImageHandler.h:66
bool enableMipmaps
Enable mipmaps.
Definition ImageHandler.h:84
AddressMode vaddressMode
Address mode in V.
Definition ImageHandler.h:68
A block of variables in a shader stage.
Definition ShaderStage.h:61
Class used for hashing ImageSamplingProperties in an unordered_map.
Definition ImageHandler.h:94