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
|