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.
		
		
		
		
		
			
		
			
				
					
					
						
							92 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							92 lines
						
					
					
						
							2.2 KiB
						
					
					
				#pragma once | 
						|
 | 
						|
// STD | 
						|
#include <vector> | 
						|
#include <queue> | 
						|
#include <string> | 
						|
#include <cassert> | 
						|
#include <cmath> | 
						|
#include <cstring> | 
						|
#include <memory> | 
						|
 | 
						|
#include "../type.hpp" | 
						|
#include "../format.hpp" | 
						|
 | 
						|
// GLM | 
						|
#include <glm/gtc/round.hpp> | 
						|
#include <glm/gtx/component_wise.hpp> | 
						|
#include <glm/gtx/integer.hpp> | 
						|
#include <glm/gtx/bit.hpp> | 
						|
#include <glm/gtx/raw_data.hpp> | 
						|
#include <glm/gtx/wrap.hpp> | 
						|
 | 
						|
static_assert(GLM_VERSION >= 97, "GLI requires at least GLM 0.9.7"); | 
						|
 | 
						|
namespace gli | 
						|
{ | 
						|
	class storage_linear | 
						|
	{ | 
						|
	public: | 
						|
		typedef extent3d extent_type; | 
						|
		typedef size_t size_type; | 
						|
		typedef gli::format format_type; | 
						|
		typedef glm::byte data_type; | 
						|
 | 
						|
	public: | 
						|
		storage_linear(); | 
						|
 | 
						|
		storage_linear( | 
						|
			format_type Format, | 
						|
			extent_type const & Extent, | 
						|
			size_type Layers, | 
						|
			size_type Faces, | 
						|
			size_type Levels); | 
						|
 | 
						|
		bool empty() const; | 
						|
		size_type size() const; // Express is bytes | 
						|
		size_type layers() const; | 
						|
		size_type levels() const; | 
						|
		size_type faces() const; | 
						|
 | 
						|
		size_type block_size() const; | 
						|
		extent_type block_extent() const; | 
						|
		extent_type block_count(size_type Level) const; | 
						|
		extent_type extent(size_type Level) const; | 
						|
 | 
						|
		data_type* data(); | 
						|
		data_type const* const data() const; | 
						|
 | 
						|
		/// Compute the relative memory offset to access the data for a specific layer, face and level | 
						|
		size_type base_offset( | 
						|
			size_type Layer, | 
						|
			size_type Face, | 
						|
			size_type Level) const; | 
						|
 | 
						|
		/// Copy a subset of a specific image of a texture  | 
						|
		void copy( | 
						|
			storage_linear const& StorageSrc, | 
						|
			size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, extent_type const& BlockIndexSrc, | 
						|
			size_t LayerDst, size_t FaceDst, size_t LevelDst, extent_type const& BlockIndexDst, | 
						|
			extent_type const& BlockCount); | 
						|
 | 
						|
		size_type level_size( | 
						|
			size_type Level) const; | 
						|
		size_type face_size( | 
						|
			size_type BaseLevel, size_type MaxLevel) const; | 
						|
		size_type layer_size( | 
						|
			size_type BaseFace, size_type MaxFace, | 
						|
			size_type BaseLevel, size_type MaxLevel) const; | 
						|
 | 
						|
	private: | 
						|
		size_type const Layers; | 
						|
		size_type const Faces; | 
						|
		size_type const Levels; | 
						|
		size_type const BlockSize; | 
						|
		extent_type const BlockCount; | 
						|
		extent_type const BlockExtent; | 
						|
		extent_type const Extent; | 
						|
		std::vector<data_type> Data; | 
						|
	}; | 
						|
}//namespace gli | 
						|
 | 
						|
#include "storage_linear.inl"
 | 
						|
 |