texture.h
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2016 The ClanLib Team
4 **
5 ** This software is provided 'as-is', without any express or implied
6 ** warranty. In no event will the authors be held liable for any damages
7 ** arising from the use of this software.
8 **
9 ** Permission is granted to anyone to use this software for any purpose,
10 ** including commercial applications, and to alter it and redistribute it
11 ** freely, subject to the following restrictions:
12 **
13 ** 1. The origin of this software must not be misrepresented; you must not
14 ** claim that you wrote the original software. If you use this software
15 ** in a product, an acknowledgment in the product documentation would be
16 ** appreciated but is not required.
17 ** 2. Altered source versions must be plainly marked as such, and must not be
18 ** misrepresented as being the original software.
19 ** 3. This notice may not be removed or altered from any source distribution.
20 **
21 ** Note: Some of the libraries ClanLib may link to may have additional
22 ** requirements or restrictions.
23 **
24 ** File Author(s):
25 **
26 ** Magnus Norddahl
27 ** Harry Storbacka
28 */
29 
30 #pragma once
31 
32 #include <memory>
33 #include "../../Core/IOData/file_system.h"
34 #include "../../Core/Resources/resource.h"
35 #include "graphic_context.h"
36 #include "../Image/image_import_description.h"
37 #include "../Image/texture_format.h"
38 
39 namespace clan
40 {
43 
44  class Color;
45  class Point;
46  class PixelBuffer;
47  class PixelBufferSet;
48  class PixelFormat;
49  class TextureProvider;
50  class DataBuffer;
51  class Texture1D;
52  class Texture1DArray;
53  class Texture2D;
54  class Texture2DArray;
55  class Texture3D;
56  class TextureCube;
57  class TextureCubeArray;
58  class Texture_Impl;
59  class SharedGCData_Impl;
60  class ResourceManager;
61  class XMLResourceDocument;
62 
65  {
69  };
70 
73  {
80  };
81 
84  {
87  };
88 
91  {
99  };
100 
102  class Texture
103  {
104  public:
106  Texture();
107 
109  Texture(GraphicContext &gc, PixelBufferSet pixelbuffer_set);
110 
114  Texture(const std::shared_ptr<Texture_Impl> &impl);
115 
119  Texture(TextureProvider *provider);
120 
121  virtual ~Texture();
122 
128  static Resource<Texture> resource(GraphicContext &gc, const std::string &id, const ResourceManager &resources);
129 
131  static Texture load(GraphicContext &gc, const std::string &id, const XMLResourceDocument &doc, const ImageImportDescription &import_desc = ImageImportDescription());
132 
134  bool operator==(const Texture &other) const
135  {
136  return impl == other.impl;
137  }
138 
140  bool operator!=(const Texture &other) const
141  {
142  return impl != other.impl;
143  }
144 
146  bool operator<(const Texture &other) const
147  {
148  return impl < other.impl;
149  }
150 
152  bool is_null() const { return !impl; }
153  explicit operator bool() const { return bool(impl); }
154 
156  void throw_if_null() const;
157 
159  float get_min_lod() const;
160 
162  float get_max_lod() const;
163 
165  float get_lod_bias() const;
166 
168  int get_base_level() const;
169 
171  int get_max_level() const;
172 
175 
178 
180  bool is_resident() const;
181 
184 
187 
191  TextureProvider *get_provider() const;
192 
196  std::weak_ptr<Texture_Impl> get_impl() const;
197 
199  void generate_mipmap();
200 
202  void set_min_lod(float min_lod);
203 
205  void set_max_lod(float max_lod);
206 
208  void set_lod_bias(float lod_bias);
209 
211  void set_base_level(int base_level);
212 
214  void set_max_level(int max_level);
215 
217  void set_min_filter(TextureFilter filter);
218 
220  void set_mag_filter(TextureFilter filter);
221 
223  void set_max_anisotropy(float max_anisotropy);
224 
227 
229  Texture1D to_texture_1d() const;
230 
233 
235  Texture2D to_texture_2d() const;
236 
239 
241  Texture3D to_texture_3d() const;
242 
245 
248 
249  protected:
250  std::shared_ptr<Texture_Impl> impl;
251 
252  friend class Texture2DArray;
253  };
254 
256 }
3D texture object class.
Definition: texture_3d.h:40
void set_mag_filter(TextureFilter filter)
Set the magnification filter.
Definition: clanapp.h:35
Definition: texture.h:97
TextureProvider * get_provider() const
Get Provider.
void set_min_lod(float min_lod)
Set the minimum level of detail texture parameter.
Definition: texture.h:75
Definition: texture.h:96
Resource proxy of a specific type.
Definition: resource.h:57
bool operator!=(const Texture &other) const
Inequality operator.
Definition: texture.h:140
TextureFilter
Texture filters.
Definition: texture.h:72
bool operator==(const Texture &other) const
Equality operator.
Definition: texture.h:134
static Resource< Texture > resource(GraphicContext &gc, const std::string &id, const ResourceManager &resources)
Retrieves a Texture resource from the resource manager.
void set_base_level(int base_level)
Sets the texture base level texture parameter.
Definition: texture.h:67
Definition: texture.h:92
TextureWrapMode
Texture coordinate wrapping modes.
Definition: texture.h:64
Texture object class.
Definition: texture.h:102
TextureDimensions
Texture dimensions.
Definition: texture.h:90
Image Import Description Class.
Definition: image_import_description.h:47
Definition: texture.h:74
1D texture array object class.
Definition: texture_1d_array.h:40
Texture2DArray to_texture_2d_array() const
Dynamic cast to Texture2DArray.
float get_lod_bias() const
Get the level of detail bias constant.
int get_max_level() const
Get the texture max level.
Definition: texture.h:68
2D texture cube object class.
Definition: texture_cube.h:51
void set_max_level(int max_level)
Sets the texture max level texture parameter.
void generate_mipmap()
Generate the mipmap.
TextureCompareMode
Texture compare modes.
Definition: texture.h:83
Set of images that combined form a complete texture.
Definition: pixel_buffer_set.h:45
Definition: texture.h:76
2D texture object class.
Definition: texture_2d.h:40
Definition: texture.h:66
static Texture load(GraphicContext &gc, const std::string &id, const XMLResourceDocument &doc, const ImageImportDescription &import_desc=ImageImportDescription())
Loads a Texture from a XML resource definition.
std::shared_ptr< Texture_Impl > impl
Definition: texture.h:250
Definition: texture.h:78
int get_base_level() const
Get the texture base level.
TextureCube to_texture_cube() const
Dynamic cast to TextureCube.
void throw_if_null() const
Throw an exception if this object is invalid.
TextureFilter get_mag_filter() const
Get the texture magnification filter.
TextureCompareMode get_compare_mode() const
Get the texture compare mode.
Resource manager.
Definition: resource_manager.h:43
bool operator<(const Texture &other) const
Less than operator.
Definition: texture.h:146
float get_min_lod() const
Get the minimum level of detail.
TextureFilter get_min_filter() const
Get the texture minification filter.
Definition: texture.h:98
std::weak_ptr< Texture_Impl > get_impl() const
Get the implementation weakptr.
virtual ~Texture()
void set_lod_bias(float lod_bias)
Sets the level of detail bias constant.
Definition: texture.h:79
Interface for implementing a Texture target.
Definition: texture_provider.h:49
2D texture cube array object class.
Definition: texture_cube_array.h:40
Texture3D to_texture_3d() const
Dynamic cast to Texture3D.
bool is_resident() const
Returns true if texture is resident in texture memory.
Interface to drawing graphics.
Definition: graphic_context.h:256
Texture()
Constructs a null instance.
CompareFunction get_compare_function() const
Get the texture compare function.
Definition: texture.h:94
Definition: texture.h:77
CompareFunction
Compare functions.
Definition: graphic_context.h:91
Texture1D to_texture_1d() const
Dynamic cast to Texture1D.
Texture1DArray to_texture_1d_array() const
Dynamic cast to Texture1DArray.
XML Resource Document.
Definition: xml_resource_document.h:47
void set_max_anisotropy(float max_anisotropy)
Set the maximum degree of anisotropy.
TextureCubeArray to_texture_cube_array() const
Dynamic cast to TextureCubeArray.
void set_max_lod(float max_lod)
Set the maximum level of detail texture parameter.
Definition: texture.h:85
1D texture object class.
Definition: texture_1d.h:40
2D texture array object class.
Definition: texture_2d_array.h:42
void set_texture_compare(TextureCompareMode mode, CompareFunction func)
Sets the texture compare mode and compare function texture parameters.
Definition: texture.h:93
void set_min_filter(TextureFilter filter)
Set the minification filter.
Texture2D to_texture_2d() const
Dynamic cast to Texture2D.
bool is_null() const
Returns true if this object is invalid.
Definition: texture.h:152
Definition: texture.h:95
float get_max_lod() const
Get the maximum level of detail.