text: /// @brief Include to use 2d array textures.
  /// @file gli/texture2d_array.hpp
  
  #pragma once
  
  #include "texture2d.hpp"
  
  namespace gli
  {
  	/// 2d array texture
  	class texture2d_array : public texture
  	{
  	public:
  		typedef extent2d extent_type;
  
  	public:
  		/// Create an empty texture 2D array
  		texture2d_array();
  
  		/// Create a texture2d_array and allocate a new storage_linear
  		texture2d_array(
  			format_type Format,
  			extent_type const& Extent,
  			size_type Layers,
  			size_type Levels,
  			swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA));
  
  		/// Create a texture2d_array and allocate a new storage_linear with a complete mipmap chain
  		texture2d_array(
  			format_type Format,
  			extent_type const& Extent,
  			size_type Layers,
  			swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA));
  
  		/// Create a texture2d_array view with an existing storage_linear
  		explicit texture2d_array(
  			texture const& Texture);
  
  		/// Create a texture2d_array view with an existing storage_linear
  		texture2d_array(
  			texture const& Texture,
  			format_type Format,
  			size_type BaseLayer, size_type MaxLayer,
  			size_type BaseFace, size_type MaxFace,
  			size_type BaseLevel, size_type MaxLevel,
  			swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA));
  
  		/// Create a texture view, reference a subset of an exiting texture2d_array instance
  		texture2d_array(
  			texture2d_array const& Texture,
  			size_type BaseLayer, size_type MaxLayer,
  			size_type BaseLevel, size_type MaxLevel);
  
  		/// Create a view of the texture identified by Layer in the texture array
  		texture2d operator[](size_type Layer) const;
  
  		/// Return the dimensions of a texture instance: width and height 
  		extent_type extent(size_type Level = 0) const;
  
  		/// Fetch a texel from a texture. The texture format must be uncompressed.
  		template <typename gen_type>
  		gen_type load(extent_type const& TexelCoord, size_type Layer, size_type Level) const;
  
  		/// Write a texel to a texture. The texture format must be uncompressed.
  		template <typename gen_type>
  		void store(extent_type const& TexelCoord, size_type Layer, size_type Level, gen_type const& Texel);
  	};
  }//namespace gli
  
  #include "./core/texture2d_array.inl"
  