diff --git a/inferno/src/inferno/render/buffer.cpp b/inferno/src/inferno/render/buffer.cpp index 188e59f..500a042 100644 --- a/inferno/src/inferno/render/buffer.cpp +++ b/inferno/src/inferno/render/buffer.cpp @@ -36,18 +36,33 @@ namespace Inferno { uint32_t BufferElement::getTypeSize(const BufferElementType type) { switch (type) { - case BufferElementType::None: return 0; - case BufferElementType::Bool: return sizeof(bool); - case BufferElementType::Int: return sizeof(int32_t); - case BufferElementType::Int2: return sizeof(int32_t) * 2; - case BufferElementType::Int3: return sizeof(int32_t) * 3; - case BufferElementType::Int4: return sizeof(int32_t) * 4; - case BufferElementType::Mat3: return sizeof(float) * 3 * 3; - case BufferElementType::Mat4: return sizeof(float) * 4 * 4; - case BufferElementType::Vec: return sizeof(float); - case BufferElementType::Vec2: return sizeof(float) * 2; - case BufferElementType::Vec3: return sizeof(float) * 3; - case BufferElementType::Vec4: return sizeof(float) * 4; + case BufferElementType::None: return 0; + case BufferElementType::Bool: return sizeof(bool); + case BufferElementType::Bool2: return sizeof(bool) * 2; + case BufferElementType::Bool3: return sizeof(bool) * 3; + case BufferElementType::Bool4: return sizeof(bool) * 4; + case BufferElementType::Int: return sizeof(int32_t); + case BufferElementType::Int2: return sizeof(int32_t) * 2; + case BufferElementType::Int3: return sizeof(int32_t) * 3; + case BufferElementType::Int4: return sizeof(int32_t) * 4; + case BufferElementType::Uint: return sizeof(uint32_t); + case BufferElementType::Uint2: return sizeof(uint32_t) * 2; + case BufferElementType::Uint3: return sizeof(uint32_t) * 3; + case BufferElementType::Uint4: return sizeof(uint32_t) * 4; + case BufferElementType::Float: return sizeof(float); + case BufferElementType::Vec2: return sizeof(float) * 2; + case BufferElementType::Vec3: return sizeof(float) * 3; + case BufferElementType::Vec4: return sizeof(float) * 4; + case BufferElementType::Double: return sizeof(double); + case BufferElementType::Double2: return sizeof(double); + case BufferElementType::Double3: return sizeof(double); + case BufferElementType::Double4: return sizeof(double); + case BufferElementType::Mat2: return sizeof(float) * 2 * 2; + case BufferElementType::Mat3: return sizeof(float) * 3 * 3; + case BufferElementType::Mat4: return sizeof(float) * 4 * 4; + case BufferElementType::DoubleMat2: return sizeof(double) * 2 * 2; + case BufferElementType::DoubleMat3: return sizeof(double) * 3 * 3; + case BufferElementType::DoubleMat4: return sizeof(double) * 4 * 4; }; ASSERT(false, "BufferElement unknown BufferElementType size!"); @@ -57,18 +72,33 @@ namespace Inferno { uint32_t BufferElement::getTypeCount(const BufferElementType type) { switch (type) { - case BufferElementType::None: return 0; - case BufferElementType::Bool: return 1; - case BufferElementType::Int: return 1; - case BufferElementType::Int2: return 2; - case BufferElementType::Int3: return 3; - case BufferElementType::Int4: return 4; - case BufferElementType::Mat3: return 3 * 3; - case BufferElementType::Mat4: return 4 * 4; - case BufferElementType::Vec: return 1; - case BufferElementType::Vec2: return 2; - case BufferElementType::Vec3: return 3; - case BufferElementType::Vec4: return 4; + case BufferElementType::None: return 0; + case BufferElementType::Bool: return 1; + case BufferElementType::Bool2: return 2; + case BufferElementType::Bool3: return 3; + case BufferElementType::Bool4: return 4; + case BufferElementType::Int: return 1; + case BufferElementType::Int2: return 2; + case BufferElementType::Int3: return 3; + case BufferElementType::Int4: return 4; + case BufferElementType::Uint: return 1; + case BufferElementType::Uint2: return 2; + case BufferElementType::Uint3: return 3; + case BufferElementType::Uint4: return 4; + case BufferElementType::Float: return 1; + case BufferElementType::Vec2: return 2; + case BufferElementType::Vec3: return 3; + case BufferElementType::Vec4: return 4; + case BufferElementType::Double: return 1; + case BufferElementType::Double2: return 2; + case BufferElementType::Double3: return 3; + case BufferElementType::Double4: return 4; + case BufferElementType::Mat2: return 2 * 2; + case BufferElementType::Mat3: return 3 * 3; + case BufferElementType::Mat4: return 4 * 4; + case BufferElementType::DoubleMat2: return 2 * 2; + case BufferElementType::DoubleMat3: return 3 * 3; + case BufferElementType::DoubleMat4: return 4 * 4; }; ASSERT(false, "BufferElement unknown BufferElementType count!"); @@ -78,18 +108,33 @@ namespace Inferno { uint32_t BufferElement::getTypeGL(const BufferElementType type) { switch (type) { - case BufferElementType::None: return GL_NONE; - case BufferElementType::Bool: return GL_BOOL; - case BufferElementType::Int: return GL_INT; - case BufferElementType::Int2: return GL_INT; - case BufferElementType::Int3: return GL_INT; - case BufferElementType::Int4: return GL_INT; - case BufferElementType::Mat3: return GL_FLOAT; - case BufferElementType::Mat4: return GL_FLOAT; - case BufferElementType::Vec: return GL_FLOAT; - case BufferElementType::Vec2: return GL_FLOAT; - case BufferElementType::Vec3: return GL_FLOAT; - case BufferElementType::Vec4: return GL_FLOAT; + case BufferElementType::None: return GL_NONE; + case BufferElementType::Bool: return GL_BOOL; + case BufferElementType::Bool2: return GL_BOOL; + case BufferElementType::Bool3: return GL_BOOL; + case BufferElementType::Bool4: return GL_BOOL; + case BufferElementType::Int: return GL_INT; + case BufferElementType::Int2: return GL_INT; + case BufferElementType::Int3: return GL_INT; + case BufferElementType::Int4: return GL_INT; + case BufferElementType::Uint: return GL_UNSIGNED_INT; + case BufferElementType::Uint2: return GL_UNSIGNED_INT; + case BufferElementType::Uint3: return GL_UNSIGNED_INT; + case BufferElementType::Uint4: return GL_UNSIGNED_INT; + case BufferElementType::Float: return GL_FLOAT; + case BufferElementType::Vec2: return GL_FLOAT; + case BufferElementType::Vec3: return GL_FLOAT; + case BufferElementType::Vec4: return GL_FLOAT; + case BufferElementType::Double: return GL_DOUBLE; + case BufferElementType::Double2: return GL_DOUBLE; + case BufferElementType::Double3: return GL_DOUBLE; + case BufferElementType::Double4: return GL_DOUBLE; + case BufferElementType::Mat2: return GL_FLOAT; + case BufferElementType::Mat3: return GL_FLOAT; + case BufferElementType::Mat4: return GL_FLOAT; + case BufferElementType::DoubleMat2: return GL_DOUBLE; + case BufferElementType::DoubleMat3: return GL_DOUBLE; + case BufferElementType::DoubleMat4: return GL_DOUBLE; }; ASSERT(false, "BufferElement unknown BufferElementType GL!"); diff --git a/inferno/src/inferno/render/buffer.h b/inferno/src/inferno/render/buffer.h index 6216d47..85561f6 100644 --- a/inferno/src/inferno/render/buffer.h +++ b/inferno/src/inferno/render/buffer.h @@ -1,20 +1,24 @@ #ifndef BUFFER_H #define BUFFER_H -#include // std::size_t -#include // std::uint32_t +#include // size_t +#include // int32_t, uint32_t #include // std::shared_ptr #include // std::string #include // std::vector namespace Inferno { + // https://www.khronos.org/opengl/wiki/Data_Type_(GLSL) enum class BufferElementType { None = 0, - Bool, - Int, Int2, Int3, Int4, - Mat3, Mat4, - Vec, Vec2, Vec3, Vec4, + Bool, Bool2, Bool3, Bool4, // bvec + Int, Int2, Int3, Int4, // ivec + Uint, Uint2, Uint3, Uint4, // uvec + Float, Vec2, Vec3, Vec4, // vec + Double, Double2, Double3, Double4, // dvec + Mat2, Mat3, Mat4, // mat + DoubleMat2, DoubleMat3, DoubleMat4, // dmat }; // -----------------------------------------