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