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"
|
|
|