You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							111 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
	
	
							111 lines
						
					
					
						
							4.0 KiB
						
					
					
				/// @brief Include to use images, a representation of a single texture level. | 
						|
/// @file gli/image.hpp | 
						|
 | 
						|
#pragma once | 
						|
 | 
						|
#include "./core/storage_linear.hpp" | 
						|
 | 
						|
namespace gli | 
						|
{ | 
						|
	/// Image, representation for a single texture level | 
						|
	class image | 
						|
	{ | 
						|
	private: | 
						|
		friend class texture1d; | 
						|
		friend class texture2d; | 
						|
		friend class texture3d; | 
						|
 | 
						|
	public: | 
						|
		typedef size_t size_type; | 
						|
		typedef gli::format format_type; | 
						|
		typedef storage_linear::extent_type extent_type; | 
						|
		typedef storage_linear::data_type data_type; | 
						|
 | 
						|
		/// Create an empty image instance | 
						|
		image(); | 
						|
 | 
						|
		/// Create an image object and allocate an image storoge for it. | 
						|
		explicit image(format_type Format, extent_type const& Extent); | 
						|
 | 
						|
		/// Create an image object by sharing an existing image storage_linear from another image instance. | 
						|
		/// This image object is effectively an image view where format can be reinterpreted | 
						|
		/// with a different compatible image format. | 
						|
		/// For formats to be compatible, the block size of source and destination must match. | 
						|
		explicit image(image const& Image, format_type Format); | 
						|
 | 
						|
		/// Return whether the image instance is empty, no storage_linear or description have been assigned to the instance. | 
						|
		bool empty() const; | 
						|
 | 
						|
		/// Return the image instance format. | 
						|
		format_type format() const; | 
						|
 | 
						|
		/// Return the dimensions of an image instance: width, height and depth. | 
						|
		extent_type extent() const; | 
						|
 | 
						|
		/// Return the memory size of an image instance storage_linear in bytes. | 
						|
		size_type size() const; | 
						|
 | 
						|
		/// Return the number of blocks contained in an image instance storage_linear. | 
						|
		/// genType size must match the block size conresponding to the image format.  | 
						|
		template <typename genType> | 
						|
		size_type size() const; | 
						|
 | 
						|
		/// Return a pointer to the beginning of the image instance data. | 
						|
		void* data(); | 
						|
 | 
						|
		/// Return a pointer to the beginning of the image instance data. | 
						|
		void const* data() const; | 
						|
 | 
						|
		/// Return a pointer of type genType which size must match the image format block size. | 
						|
		template <typename genType> | 
						|
		genType* data(); | 
						|
 | 
						|
		/// Return a pointer of type genType which size must match the image format block size. | 
						|
		template <typename genType> | 
						|
		genType const* data() const; | 
						|
 | 
						|
		/// Clear the entire image storage_linear with zeros | 
						|
		void clear(); | 
						|
 | 
						|
		/// Clear the entire image storage_linear with Texel which type must match the image storage_linear format block size | 
						|
		/// If the type of genType doesn't match the type of the image format, no conversion is performed and the data will be reinterpreted as if is was of the image format.  | 
						|
		template <typename genType> | 
						|
		void clear(genType const& Texel); | 
						|
 | 
						|
		/// Load the texel located at TexelCoord coordinates. | 
						|
		/// It's an error to call this function if the format is compressed. | 
						|
		/// It's an error if TexelCoord values aren't between [0, dimensions]. | 
						|
		template <typename genType> | 
						|
		genType load(extent_type const& TexelCoord); | 
						|
 | 
						|
		/// Store the texel located at TexelCoord coordinates. | 
						|
		/// It's an error to call this function if the format is compressed. | 
						|
		/// It's an error if TexelCoord values aren't between [0, dimensions]. | 
						|
		template <typename genType> | 
						|
		void store(extent_type const& TexelCoord, genType const& Data); | 
						|
 | 
						|
	private: | 
						|
		/// Create an image object by sharing an existing image storage_linear from another image instance. | 
						|
		/// This image object is effectively an image view where the layer, the face and the level allows identifying | 
						|
		/// a specific subset of the image storage_linear source.  | 
						|
		/// This image object is effectively a image view where the format can be reinterpreted | 
						|
		/// with a different compatible image format. | 
						|
		explicit image( | 
						|
			std::shared_ptr<storage_linear> Storage, | 
						|
			format_type Format, | 
						|
			size_type BaseLayer, | 
						|
			size_type BaseFace, | 
						|
			size_type BaseLevel); | 
						|
 | 
						|
		std::shared_ptr<storage_linear> Storage; | 
						|
		format_type const Format; | 
						|
		size_type const BaseLevel; | 
						|
		data_type* Data; | 
						|
		size_type const Size; | 
						|
 | 
						|
		data_type* compute_data(size_type BaseLayer, size_type BaseFace, size_type BaseLevel); | 
						|
		size_type compute_size(size_type Level) const; | 
						|
	}; | 
						|
}//namespace gli | 
						|
 | 
						|
#include "./core/image.inl"
 | 
						|
 |