Browse Source

Add more buffer data type support

master
Riyyi 4 years ago
parent
commit
5f36f3d83a
  1. 117
      inferno/src/inferno/render/buffer.cpp
  2. 16
      inferno/src/inferno/render/buffer.h

117
inferno/src/inferno/render/buffer.cpp

@ -36,18 +36,33 @@ namespace Inferno {
uint32_t BufferElement::getTypeSize(const BufferElementType type) uint32_t BufferElement::getTypeSize(const BufferElementType type)
{ {
switch (type) { switch (type) {
case BufferElementType::None: return 0; case BufferElementType::None: return 0;
case BufferElementType::Bool: return sizeof(bool); case BufferElementType::Bool: return sizeof(bool);
case BufferElementType::Int: return sizeof(int32_t); case BufferElementType::Bool2: return sizeof(bool) * 2;
case BufferElementType::Int2: return sizeof(int32_t) * 2; case BufferElementType::Bool3: return sizeof(bool) * 3;
case BufferElementType::Int3: return sizeof(int32_t) * 3; case BufferElementType::Bool4: return sizeof(bool) * 4;
case BufferElementType::Int4: return sizeof(int32_t) * 4; case BufferElementType::Int: return sizeof(int32_t);
case BufferElementType::Mat3: return sizeof(float) * 3 * 3; case BufferElementType::Int2: return sizeof(int32_t) * 2;
case BufferElementType::Mat4: return sizeof(float) * 4 * 4; case BufferElementType::Int3: return sizeof(int32_t) * 3;
case BufferElementType::Vec: return sizeof(float); case BufferElementType::Int4: return sizeof(int32_t) * 4;
case BufferElementType::Vec2: return sizeof(float) * 2; case BufferElementType::Uint: return sizeof(uint32_t);
case BufferElementType::Vec3: return sizeof(float) * 3; case BufferElementType::Uint2: return sizeof(uint32_t) * 2;
case BufferElementType::Vec4: return sizeof(float) * 4; 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!"); ASSERT(false, "BufferElement unknown BufferElementType size!");
@ -57,18 +72,33 @@ namespace Inferno {
uint32_t BufferElement::getTypeCount(const BufferElementType type) uint32_t BufferElement::getTypeCount(const BufferElementType type)
{ {
switch (type) { switch (type) {
case BufferElementType::None: return 0; case BufferElementType::None: return 0;
case BufferElementType::Bool: return 1; case BufferElementType::Bool: return 1;
case BufferElementType::Int: return 1; case BufferElementType::Bool2: return 2;
case BufferElementType::Int2: return 2; case BufferElementType::Bool3: return 3;
case BufferElementType::Int3: return 3; case BufferElementType::Bool4: return 4;
case BufferElementType::Int4: return 4; case BufferElementType::Int: return 1;
case BufferElementType::Mat3: return 3 * 3; case BufferElementType::Int2: return 2;
case BufferElementType::Mat4: return 4 * 4; case BufferElementType::Int3: return 3;
case BufferElementType::Vec: return 1; case BufferElementType::Int4: return 4;
case BufferElementType::Vec2: return 2; case BufferElementType::Uint: return 1;
case BufferElementType::Vec3: return 3; case BufferElementType::Uint2: return 2;
case BufferElementType::Vec4: return 4; 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!"); ASSERT(false, "BufferElement unknown BufferElementType count!");
@ -78,18 +108,33 @@ namespace Inferno {
uint32_t BufferElement::getTypeGL(const BufferElementType type) uint32_t BufferElement::getTypeGL(const BufferElementType type)
{ {
switch (type) { switch (type) {
case BufferElementType::None: return GL_NONE; case BufferElementType::None: return GL_NONE;
case BufferElementType::Bool: return GL_BOOL; case BufferElementType::Bool: return GL_BOOL;
case BufferElementType::Int: return GL_INT; case BufferElementType::Bool2: return GL_BOOL;
case BufferElementType::Int2: return GL_INT; case BufferElementType::Bool3: return GL_BOOL;
case BufferElementType::Int3: return GL_INT; case BufferElementType::Bool4: return GL_BOOL;
case BufferElementType::Int4: return GL_INT; case BufferElementType::Int: return GL_INT;
case BufferElementType::Mat3: return GL_FLOAT; case BufferElementType::Int2: return GL_INT;
case BufferElementType::Mat4: return GL_FLOAT; case BufferElementType::Int3: return GL_INT;
case BufferElementType::Vec: return GL_FLOAT; case BufferElementType::Int4: return GL_INT;
case BufferElementType::Vec2: return GL_FLOAT; case BufferElementType::Uint: return GL_UNSIGNED_INT;
case BufferElementType::Vec3: return GL_FLOAT; case BufferElementType::Uint2: return GL_UNSIGNED_INT;
case BufferElementType::Vec4: return GL_FLOAT; 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!"); ASSERT(false, "BufferElement unknown BufferElementType GL!");

16
inferno/src/inferno/render/buffer.h

@ -1,20 +1,24 @@
#ifndef BUFFER_H #ifndef BUFFER_H
#define BUFFER_H #define BUFFER_H
#include <cstddef> // std::size_t #include <cstddef> // size_t
#include <cstdint> // std::uint32_t #include <cstdint> // int32_t, uint32_t
#include <memory> // std::shared_ptr #include <memory> // std::shared_ptr
#include <string> // std::string #include <string> // std::string
#include <vector> // std::vector #include <vector> // std::vector
namespace Inferno { namespace Inferno {
// https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)
enum class BufferElementType { enum class BufferElementType {
None = 0, None = 0,
Bool, Bool, Bool2, Bool3, Bool4, // bvec
Int, Int2, Int3, Int4, Int, Int2, Int3, Int4, // ivec
Mat3, Mat4, Uint, Uint2, Uint3, Uint4, // uvec
Vec, Vec2, Vec3, Vec4, Float, Vec2, Vec3, Vec4, // vec
Double, Double2, Double3, Double4, // dvec
Mat2, Mat3, Mat4, // mat
DoubleMat2, DoubleMat3, DoubleMat4, // dmat
}; };
// ----------------------------------------- // -----------------------------------------

Loading…
Cancel
Save