lol/include/lol/util/Enums.hpp
2021-12-26 21:32:17 +01:00

404 lines
15 KiB
C++

#pragma once
#include <assert.h>
#include <glad/glad.h>
#define NATIVE(x) static_cast<GLenum>(x)
namespace lol
{
/**
* @brief OpenGL datatypes
*/
enum class Type : GLenum
{
Byte = GL_BYTE, ///< Signed 8 bit integer
UByte = GL_UNSIGNED_BYTE, ///< Unsigned 8 bit integer
Short = GL_SHORT, ///< Signed 16 bit integer
UShort = GL_UNSIGNED_SHORT, ///< Unsigned 16 bit integer
Int = GL_INT, ///< Signed 32 bit integer
UInt = GL_UNSIGNED_INT, ///< Unsigned 32 bit integer
Half = GL_HALF_FLOAT, ///< 16 bit half-precision floating point number
Float = GL_FLOAT, ///< 32 bit single-precision floating point number
Double = GL_DOUBLE, ///< 64 bit double-precision floating point number
Fixed = GL_FIXED ///< 32 bit 16.16 fixed decimal number
};
/**
* @brief Get size of OpenGL datatype in Bytes
*/
constexpr size_t SizeOf(Type type)
{
switch (type)
{
case Type::Byte: return sizeof(GLbyte);
case Type::UByte: return sizeof(GLubyte);
case Type::Short: return sizeof(GLshort);
case Type::Int: return sizeof(GLint);
case Type::UInt: return sizeof(GLuint);
case Type::Half: return sizeof(GLhalf);
case Type::Float: return sizeof(GLfloat);
case Type::Double: return sizeof(GLdouble);
case Type::Fixed: return sizeof(GLfixed);
default:
assert(false && "lol::SizeOf(Type) did not implement every datatype");
return 0;
}
}
/**
* @brief Datatypes in GLSL
*/
enum class GLSLType : GLenum
{
Float = GL_FLOAT, ///< `float`
Float2 = GL_FLOAT_VEC2, ///< `vec2`
Float3 = GL_FLOAT_VEC3, ///< `vec3`
Float4 = GL_FLOAT_VEC4, ///< `vec4`
Double = GL_DOUBLE, ///< `double`
Double2 = GL_DOUBLE_VEC2, ///< `dvec2`
Double3 = GL_DOUBLE_VEC3, ///< `dvec3`
Double4 = GL_DOUBLE_VEC4, ///< `dvec4`
Int = GL_INT, ///< `int`
Int2 = GL_INT_VEC2, ///< `ivec2`
Int3 = GL_INT_VEC3, ///< `ivec3`
Int4 = GL_INT_VEC4, ///< `ivec4`
UInt = GL_UNSIGNED_INT, ///< `uint`
UInt2 = GL_UNSIGNED_INT_VEC2, ///< `uvec2`
UInt3 = GL_UNSIGNED_INT_VEC3, ///< `uvec3`
UInt4 = GL_UNSIGNED_INT_VEC4, ///< `uvec4`
Bool = GL_BOOL, ///< `bool`
Bool2 = GL_BOOL_VEC2, ///< `bvec2`
Bool3 = GL_BOOL_VEC3, ///< `bvec3`
Bool4 = GL_BOOL_VEC4, ///< `bvec4`
Mat2 = GL_FLOAT_MAT2, ///< `mat2`
Mat3 = GL_FLOAT_MAT3, ///< `mat3`
Mat4 = GL_FLOAT_MAT4, ///< `mat4`
Mat2x3 = GL_FLOAT_MAT2x3, ///< `mat2x3`
Mat2x4 = GL_FLOAT_MAT2x4, ///< `mat2x4`
Mat3x2 = GL_FLOAT_MAT3x2, ///< `mat3x2`
Mat3x4 = GL_FLOAT_MAT3x4, ///< `mat3x4`
Mat4x2 = GL_FLOAT_MAT4x2, ///< `mat4x2`
Mat4x3 = GL_FLOAT_MAT4x3, ///< `mat4x3`
DMat2 = GL_DOUBLE_MAT2, ///< `dmat2`
DMat3 = GL_DOUBLE_MAT3, ///< `dmat3`
DMat4 = GL_DOUBLE_MAT4, ///< `dmat4`
DMat2x3 = GL_DOUBLE_MAT2x3, ///< `dmat2x3`
DMat2x4 = GL_DOUBLE_MAT2x4, ///< `dmat2x4`
DMat3x2 = GL_DOUBLE_MAT3x2, ///< `dmat3x2`
DMat3x4 = GL_DOUBLE_MAT3x4, ///< `dmat3x4`
DMat4x2 = GL_DOUBLE_MAT4x2, ///< `dmat4x2`
DMat4x3 = GL_DOUBLE_MAT4x3, ///< `dmat4x3`
Sampler1D = GL_SAMPLER_1D, ///< `sampler1D`
Sampler2D = GL_SAMPLER_2D, ///< `sampler2D`
Sampler3D = GL_SAMPLER_3D, ///< `sampler3D`
SamplerCube = GL_SAMPLER_CUBE, ///< `samplerCube`
Sampler1DArray = GL_SAMPLER_1D_ARRAY, ///< `sampler1DArray`
Sampler2DArray = GL_SAMPLER_2D_ARRAY, ///< `sampler2DArray`
Sampler2DMS = GL_SAMPLER_2D_MULTISAMPLE, ///< `sampler2DMS`
Sampler2DMSArray = GL_SAMPLER_2D_MULTISAMPLE_ARRAY, ///< `sampler2DMSArray`
SamplerBuffer = GL_SAMPLER_BUFFER, ///< `samplerBuffer`
Sampler2DRect = GL_SAMPLER_2D_RECT, ///< `sampler2DRect`
Sampler1DShadow = GL_SAMPLER_1D_SHADOW, ///< `sampler1DShadow`
Sampler2DShadow = GL_SAMPLER_2D_SHADOW, ///< `sampler2DShadow`
Sampler1DArrayShadow = GL_SAMPLER_1D_ARRAY_SHADOW, ///< `sampler1DArrayShadow`
Sampler2DArrayShadow = GL_SAMPLER_2D_ARRAY_SHADOW, ///< `sampler2DArrayShadow`
SamplerCubeShadow = GL_SAMPLER_CUBE_SHADOW, ///< `samplerCubeShadow`
Sampler2DRectShadow = GL_SAMPLER_2D_RECT_SHADOW, ///< `sampler2DRectShadow`
ISampler1D = GL_INT_SAMPLER_1D, ///< `isampler1D`
ISampler2D = GL_INT_SAMPLER_2D, ///< `isampler2D`
ISampler3D = GL_INT_SAMPLER_3D, ///< `isampler3D`
ISamplerCube = GL_INT_SAMPLER_CUBE, ///< `isamplerCube`
ISampler1DArray = GL_INT_SAMPLER_1D_ARRAY, ///< `isampler1DArray`
ISampler2DArray = GL_INT_SAMPLER_2D_ARRAY, ///< `isampler2DArray`
ISampler2DMS = GL_INT_SAMPLER_2D_MULTISAMPLE, ///< `isampler2DMS`
ISampler2DMSArray = GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, ///< `isampler2DMSArray`
ISamplerBuffer = GL_INT_SAMPLER_BUFFER, ///< `isamplerBuffer`
ISampler2DRect = GL_INT_SAMPLER_2D_RECT, ///< `isampler2DRect`
USampler1D = GL_UNSIGNED_INT_SAMPLER_1D, ///< `usampler1D`
USampler2D = GL_UNSIGNED_INT_SAMPLER_2D, ///< `usampler2D`
USampler3D = GL_UNSIGNED_INT_SAMPLER_3D, ///< `usampler3D`
USamplerCube = GL_UNSIGNED_INT_SAMPLER_CUBE, ///< `usamplerCube`
USampler1DArray = GL_UNSIGNED_INT_SAMPLER_1D_ARRAY, ///< `usampler1DArray`
USampler2DArray = GL_UNSIGNED_INT_SAMPLER_2D_ARRAY, ///< `usampler2DArray`
USampler2DMS = GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE, ///< `usampler2DMS`
USampler2DMSArray = GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, ///< `usampler2DMSArray`
USamplerBuffer = GL_UNSIGNED_INT_SAMPLER_BUFFER, ///< `usamplerBuffer`
USampler2DRect = GL_UNSIGNED_INT_SAMPLER_2D_RECT, ///< `usampler2DRect`
Image1D = GL_IMAGE_1D, ///< `image1D`
Image2D = GL_IMAGE_2D, ///< `image2D`
Image3D = GL_IMAGE_3D, ///< `image3D`
ImageCube = GL_IMAGE_CUBE, ///< `imageCube`
ImageBuffer = GL_IMAGE_BUFFER, ///< `imageBuffer`
Image1DArray = GL_IMAGE_1D_ARRAY, ///< `image1DArray`
Image2DArray = GL_IMAGE_2D_ARRAY, ///< `image2DArray`
Image2DMS = GL_IMAGE_2D_MULTISAMPLE, ///< `image2DMS`
Image2DMSArray = GL_IMAGE_2D_MULTISAMPLE_ARRAY, ///< `image2DMSArray`
Image2DRect = GL_IMAGE_2D_RECT, ///< `image2DRect`
IImage1D = GL_INT_IMAGE_1D, ///< `iimage1D`
IImage2D = GL_INT_IMAGE_2D, ///< `iimage2D`
IImage3D = GL_INT_IMAGE_3D, ///< `iimage3D`
IImage2DRect = GL_INT_IMAGE_2D_RECT, ///< `iimageCube`
IImageCube = GL_INT_IMAGE_CUBE, ///< `iimageBuffer`
IImageBuffer = GL_INT_IMAGE_BUFFER, ///< `iimage1DArray`
IImage1DArray = GL_INT_IMAGE_1D_ARRAY, ///< `iimage2DArray`
IImage2DArray = GL_INT_IMAGE_2D_ARRAY, ///< `iimage2DMS`
IImage2DMS = GL_INT_IMAGE_2D_MULTISAMPLE, ///< `iimage2DMSArray`
IImage2DMSArray = GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY, ///< `iimage2DRect`
UImage1D = GL_UNSIGNED_INT_IMAGE_1D, ///< `uimage1D`
UImage2D = GL_UNSIGNED_INT_IMAGE_2D, ///< `uimage2D`
UImage3D = GL_UNSIGNED_INT_IMAGE_3D, ///< `uimage3D`
UImage2DRect = GL_UNSIGNED_INT_IMAGE_2D_RECT, ///< `uimageCube`
UImageCube = GL_UNSIGNED_INT_IMAGE_CUBE, ///< `uimageBuffer`
UImageBuffer = GL_UNSIGNED_INT_IMAGE_BUFFER, ///< `uimage1DArray`
UImage1DArray = GL_UNSIGNED_INT_IMAGE_1D_ARRAY, ///< `uimage2DArray`
UImage2DArray = GL_UNSIGNED_INT_IMAGE_2D_ARRAY, ///< `uimage2DMS`
UImage2DMS = GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE, ///< `uimage2DMSArray`
UImage2DMSArray = GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY, ///< `uimage2DRect`
AtomicUnit = GL_UNSIGNED_INT_ATOMIC_COUNTER ///< `atomic_uint`
};
/**
* @brief OpenGL buffer binding targets
*/
enum class BufferType : GLenum
{
Array = GL_ARRAY_BUFFER, ///< Vertex attributes
AtomicCounter = GL_ATOMIC_COUNTER_BUFFER, ///< Atomic counter storage
CopyRead = GL_COPY_READ_BUFFER, ///< Buffer copy source
CopyWrite = GL_COPY_WRITE_BUFFER, ///< Buffer copy destination
DispatchIndirect = GL_DISPATCH_INDIRECT_BUFFER, ///< Indirect compute dispatch commands
DrawIndirect = GL_DRAW_INDIRECT_BUFFER, ///< Indirect command arguments
ElementArray = GL_ELEMENT_ARRAY_BUFFER, ///< Vertex array indices
PixelPack = GL_PIXEL_PACK_BUFFER, ///< Pixel read target
PixelUnpack = GL_PIXEL_UNPACK_BUFFER, ///< Texture data source
Query = GL_QUERY_BUFFER, ///< Query result buffer
ShaderStorage = GL_SHADER_STORAGE_BUFFER, ///< Read-write storage for shaders
Texture = GL_TEXTURE_BUFFER, ///< Texture data buffer
TransformFeedback = GL_TRANSFORM_FEEDBACK_BUFFER, ///< Transform feedback buffer
Uniform = GL_UNIFORM_BUFFER ///< Uniform block storage
};
/**
* @brief OpenGL buffer usage types
*/
enum class Usage : GLenum
{
StaticDraw = GL_STATIC_DRAW,
StaticRead = GL_STATIC_READ,
StaticCopy = GL_STATIC_COPY,
StreamDraw = GL_STREAM_DRAW,
StreamRead = GL_STREAM_READ,
StreamCopy = GL_STREAM_COPY,
DynamicDraw = GL_DYNAMIC_DRAW,
DynamicRead = GL_DYNAMIC_READ,
DynamicCopy = GL_DYNAMIC_COPY
};
/**
* @brief OpenGL glDraw* modes. Primitives OpenGL can render
*/
enum class DrawMode : GLenum
{
Points = GL_POINTS,
Lines = GL_LINES,
LineStrip = GL_LINE_STRIP,
LineLoop = GL_LINE_LOOP,
LineStripAdjacency = GL_LINE_STRIP_ADJACENCY,
LinesAdjacency = GL_LINES_ADJACENCY,
Triangles = GL_TRIANGLES,
TriangleStrip = GL_TRIANGLE_STRIP,
TriangleFan = GL_TRIANGLE_FAN,
TriangleStripAdjacency = GL_TRIANGLE_STRIP_ADJACENCY,
TrianglesAdjacency = GL_TRIANGLES_ADJACENCY,
Patches = GL_PATCHES
};
/**
* @brief OpenGL buffer access modes
*/
enum class Access : GLenum
{
ReadOnly = GL_READ_ONLY,
WriteOnly = GL_WRITE_ONLY,
ReadWrite = GL_READ_WRITE
};
/**
* @brief OpenGL target texture
*/
enum class TargetTexture : GLenum
{
Texture1D = GL_TEXTURE_1D,
Texture2D = GL_TEXTURE_2D,
Texture3D = GL_TEXTURE_3D,
Array1D = GL_TEXTURE_1D_ARRAY,
Array2D = GL_TEXTURE_2D_ARRAY,
Rectangle = GL_TEXTURE_RECTANGLE,
Cubemap = GL_TEXTURE_CUBE_MAP,
CubemapArray = GL_TEXTURE_CUBE_MAP_ARRAY,
Buffer = GL_TEXTURE_BUFFER,
Multisample = GL_TEXTURE_2D_MULTISAMPLE,
MultisampleArra = GL_TEXTURE_2D_MULTISAMPLE_ARRAY
};
/**
* @brief OpenGL internal texture formats
*/
enum class TextureFormat : GLenum
{
DepthComponent = GL_DEPTH_COMPONENT,
DepthStencil = GL_DEPTH_STENCIL,
R = GL_RED,
RG = GL_RG,
RGB = GL_RGB,
RGBA = GL_RGBA,
R8 = GL_R8, R8S = GL_R8_SNORM, R16 = GL_R16, R16S = GL_R16_SNORM,
RG8 = GL_RG8, RG8S = GL_RG8_SNORM, RG16 = GL_RG16, RG16S = GL_RG16_SNORM,
R3G3B2 = GL_R3_G3_B2, RGB4 = GL_RGB4, RGB5 = GL_RGB5, RGB8 = GL_RGB8,
RGB8S = GL_RGB8_SNORM, RGB10 = GL_RGB10, RGB12 = GL_RGB12, RGB16S = GL_RGB16_SNORM,
RGBA2 = GL_RGBA2, RGBA4 = GL_RGBA4, RGB5A1 = GL_RGB5_A1, RGBA8 = GL_RGBA8,
RGBA8S = GL_RGBA8_SNORM, RGB10A2 = GL_RGB10_A2, RGB10A2UI = GL_RGB10_A2UI, RGBA12 = GL_RGBA12,
RGBA16 = GL_RGBA16, SRGB8 = GL_SRGB8, SRGB8A8 = GL_SRGB8_ALPHA8, R16F = GL_R16F,
RG16F = GL_RG16F, RGB16F = GL_RGB16F, RGBA16F = GL_RGBA16F, R32F = GL_R32F,
RG32F = GL_RG32F, RGB32F = GL_RGB32F, RGBA32F = GL_RGBA32F, R11FG11FB10F = GL_R11F_G11F_B10F,
RGB9E5 = GL_RGB9_E5, R8I = GL_R8I, R8UI = GL_R8UI, R16I = GL_R16I,
R16UI = GL_R16UI, R32I = GL_R32I, R32UI = GL_R32UI, RG8I = GL_RG8I,
RG8UI = GL_RG8UI, RG16I = GL_RG16I, RG16UI = GL_RG16UI, RG32I = GL_RG32I,
RG32UI = GL_RG32UI, RGB8I = GL_RGB8I, RGB8UI = GL_RGB8UI, RGB16I = GL_RGB16I,
RGB16UI = GL_RGB16UI, RGB32I = GL_RGB32I, RGB32UI = GL_RGB32UI, RGBA8I = GL_RGBA8I,
RGBA8UI = GL_RGBA8UI, RGBA16I = GL_RGBA16I, RGBA16UI = GL_RGBA16UI, RGBA32I = GL_RGBA32I,
RGBA32UI = GL_RGBA32UI,
CR = GL_COMPRESSED_RED,
CRG = GL_COMPRESSED_RG,
CRGB = GL_COMPRESSED_RGB,
CRGBA = GL_COMPRESSED_RGBA,
CSRGB = GL_COMPRESSED_SRGB,
CSRGBA = GL_COMPRESSED_SRGB_ALPHA,
CR_RGTC1 = GL_COMPRESSED_RED_RGTC1,
CRS_RGTC1 = GL_COMPRESSED_SIGNED_RED_RGTC1,
CRG_RGTC2 = GL_COMPRESSED_RG_RGTC2,
CRGS_RGTC2 = GL_COMPRESSED_SIGNED_RG_RGTC2,
CRGBA_BPTC = GL_COMPRESSED_RGBA_BPTC_UNORM,
CSRGBA_BPTC = GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM,
CRGB_BPTC_SF = GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT,
CRGB_BPTC_UF = GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT,
};
/**
* @brief OpenGL internal pixel formats
*/
enum class PixelFormat : GLenum
{
R = GL_RED,
RG = GL_RG,
RGB = GL_RGB,
BGR = GL_BGR,
RGBA = GL_RGBA,
BGRA = GL_BGRA,
RI = GL_RED_INTEGER,
RGI = GL_RG_INTEGER,
RGBI = GL_RGB_INTEGER,
BGRI = GL_BGR_INTEGER,
RGBAI = GL_RGBA_INTEGER,
BGRAI = GL_BGRA_INTEGER,
StencilIndex = GL_STENCIL_INDEX,
DepthComponent = GL_DEPTH_COMPONENT,
DepthStencil = GL_DEPTH_STENCIL,
};
/**
* @brief OpenGL Pixel datatypes
*/
enum class PixelType : GLenum
{
UByte = GL_UNSIGNED_BYTE, Byte = GL_BYTE,
UShort = GL_UNSIGNED_SHORT, Short = GL_SHORT,
UInt = GL_UNSIGNED_INT, Int = GL_INT,
Float = GL_FLOAT,
UByte332 = GL_UNSIGNED_BYTE_3_3_2, UByte233Rev = GL_UNSIGNED_BYTE_2_3_3_REV,
UShort565 = GL_UNSIGNED_SHORT_5_6_5, UShort565Rev = GL_UNSIGNED_SHORT_5_6_5_REV,
UShort4444 = GL_UNSIGNED_SHORT_4_4_4_4, UShort4444Rev = GL_UNSIGNED_SHORT_4_4_4_4_REV,
UShort5551 = GL_UNSIGNED_SHORT_5_5_5_1, UShort1555Rev = GL_UNSIGNED_SHORT_1_5_5_5_REV,
UInt8888 = GL_UNSIGNED_INT_8_8_8_8, UInt8888Rev = GL_UNSIGNED_INT_8_8_8_8_REV,
UInt1010102 = GL_UNSIGNED_INT_10_10_10_2, UInt1010102Rev = GL_UNSIGNED_INT_2_10_10_10_REV
};
/**
* @brief Get size of OpenGL datatype in Bytes
*/
constexpr size_t SizeOf(PixelType type)
{
switch (type)
{
case PixelType::UByte332:
case PixelType::UByte233Rev:
case PixelType::Byte:
return sizeof(GLbyte);
case PixelType::UByte:
return sizeof(GLubyte);
case PixelType::Short:
return sizeof(GLshort);
case PixelType::UShort565:
case PixelType::UShort565Rev:
case PixelType::UShort4444:
case PixelType::UShort4444Rev:
case PixelType::UShort5551:
case PixelType::UShort1555Rev:
case PixelType::UShort:
return sizeof(GLushort);
case PixelType::Int:
return sizeof(GLint);
case PixelType::UInt8888:
case PixelType::UInt8888Rev:
case PixelType::UInt1010102:
case PixelType::UInt1010102Rev:
case PixelType::UInt:
return sizeof(GLuint);
case PixelType::Float:
return sizeof(GLfloat);
default:
assert(false && "lol::SizeOf(PixelType) did not implement every datatype");
return 0;
}
}
enum class TextureWrap : GLenum
{
ClampToEdge = GL_CLAMP_TO_EDGE,
ClampToBorder = GL_CLAMP_TO_BORDER,
MirroredRepeat = GL_MIRRORED_REPEAT,
Repeat = GL_REPEAT,
MirrorClampToEdge = GL_MIRROR_CLAMP_TO_EDGE
};
}