170 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
 | |
| ///////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Created : 2011-04-05
 | |
| // Updated : 2011-04-05
 | |
| // Licence : This source is under MIT License
 | |
| // File    : gli/core/image2d.hpp
 | |
| ///////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef GLI_CORE_IMAGE2D_INCLUDED
 | |
| #define GLI_CORE_IMAGE2D_INCLUDED
 | |
| 
 | |
| // STD
 | |
| #include <vector>
 | |
| #include <cassert>
 | |
| #include <cmath>
 | |
| #include <cstring>
 | |
| 
 | |
| // GLM
 | |
| #include <glm/glm.hpp>
 | |
| #include <glm/gtx/number_precision.hpp>
 | |
| #include <glm/gtx/raw_data.hpp>
 | |
| #include <glm/gtx/gradient_paint.hpp>
 | |
| #include <glm/gtx/component_wise.hpp>
 | |
| 
 | |
| namespace gli
 | |
| {
 | |
| 	enum format
 | |
| 	{
 | |
| 		FORMAT_NULL,
 | |
| 
 | |
| 		// Unsigned integer formats
 | |
| 		R8U,
 | |
| 		RG8U,
 | |
| 		RGB8U,
 | |
| 		RGBA8U,
 | |
| 
 | |
| 		R16U,
 | |
| 		RG16U,
 | |
| 		RGB16U,
 | |
| 		RGBA16U,
 | |
| 
 | |
| 		R32U,
 | |
| 		RG32U,
 | |
| 		RGB32U,
 | |
| 		RGBA32U,
 | |
| 
 | |
| 		// Signed integer formats
 | |
| 		R8I,
 | |
| 		RG8I,
 | |
| 		RGB8I,
 | |
| 		RGBA8I,
 | |
| 
 | |
| 		R16I,
 | |
| 		RG16I,
 | |
| 		RGB16I,
 | |
| 		RGBA16I,
 | |
| 
 | |
| 		R32I,
 | |
| 		RG32I,
 | |
| 		RGB32I,
 | |
| 		RGBA32I,
 | |
| 
 | |
| 		// Floating formats
 | |
| 		R16F,
 | |
| 		RG16F,
 | |
| 		RGB16F,
 | |
| 		RGBA16F,
 | |
| 
 | |
| 		R32F,
 | |
| 		RG32F,
 | |
| 		RGB32F,
 | |
| 		RGBA32F,
 | |
| 
 | |
| 		// Packed formats
 | |
| 		RGBE8,
 | |
| 		RGB9E5,
 | |
| 		RG11B10F,
 | |
| 		R5G6B5,
 | |
| 		RGBA4,
 | |
| 		RGB10A2,
 | |
| 
 | |
| 		// Depth formats
 | |
| 		D16,
 | |
| 		D24X8,
 | |
| 		D24S8,
 | |
| 		D32F,
 | |
| 		D32FS8X24,
 | |
| 
 | |
| 		// Compressed formats
 | |
| 		DXT1,
 | |
| 		DXT3,
 | |
| 		DXT5,
 | |
| 		ATI1N_UNORM,
 | |
| 		ATI1N_SNORM,
 | |
| 		ATI2N_UNORM,
 | |
| 		ATI2N_SNORM,
 | |
| 		BP_UF16,
 | |
| 		BP_SF16,
 | |
| 		BP,
 | |
| 
 | |
| 		FORMAT_MAX
 | |
| 	};
 | |
| 
 | |
| 	enum size_type
 | |
| 	{
 | |
| 		LINEAR_SIZE,
 | |
| 		BLOCK_SIZE,
 | |
| 		BIT_PER_PIXEL, 
 | |
| 		COMPONENT
 | |
| 	};
 | |
| 
 | |
| 	class image2D
 | |
| 	{
 | |
| 	public:
 | |
| 		typedef glm::uvec2 dimensions_type;
 | |
| 		typedef glm::vec2 texcoord_type;
 | |
| 		typedef glm::uint32 size_type;
 | |
| 		typedef glm::byte value_type;
 | |
| 		typedef gli::format format_type;
 | |
| 		typedef std::vector<value_type> data_type;
 | |
| 
 | |
| 	public:
 | |
| 		image2D();
 | |
| 		image2D(
 | |
| 			image2D const & Image);
 | |
| 
 | |
| 		explicit image2D(
 | |
| 			dimensions_type const & Dimensions,
 | |
| 			format_type const & Format);
 | |
| 
 | |
| 		template <typename genType>
 | |
| 		explicit image2D(
 | |
| 			dimensions_type const & Dimensions,
 | |
| 			format_type const & Format, 
 | |
| 			genType const & Value);
 | |
| 
 | |
| 		explicit image2D(
 | |
| 			dimensions_type const & Dimensions,
 | |
| 			format_type const & Format, 
 | |
| 			std::vector<value_type> const & Data);
 | |
| 
 | |
| 		~image2D();
 | |
| 
 | |
| 		template <typename genType>
 | |
| 		void setPixel(
 | |
| 			dimensions_type const & TexelCoord,
 | |
| 			genType const & TexelData);
 | |
| 
 | |
| 		size_type value_size() const;
 | |
| 		size_type capacity() const;
 | |
| 		dimensions_type dimensions() const;
 | |
| 		size_type components() const;
 | |
| 		format_type format() const;
 | |
| 			
 | |
| 		value_type * data();
 | |
| 		value_type const * const data() const;
 | |
| 
 | |
| 	private:
 | |
| 		data_type Data;
 | |
| 		dimensions_type Dimensions;
 | |
| 		format_type Format;
 | |
| 	};
 | |
| 
 | |
| }//namespace gli
 | |
| 
 | |
| #include "image2d.inl"
 | |
| 
 | |
| #endif//GLI_CORE_IMAGE2D_INCLUDED
 | 
