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.
		
		
		
		
		
			
		
			
				
					
					
						
							169 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							169 lines
						
					
					
						
							2.8 KiB
						
					
					
				/////////////////////////////////////////////////////////////////////////////////////////////////// | 
						|
// 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
 | 
						|
 |