mirror of
https://github.com/love2d/love.git
synced 2026-08-15 15:51:12 +02:00
Move DataFormat enum to vertex.h
This commit is contained in:
@@ -26,13 +26,6 @@ namespace love
|
||||
namespace graphics
|
||||
{
|
||||
|
||||
static const Buffer::DataTypeInfo dataTypeInfo[]
|
||||
{
|
||||
// baseType, isMatrix, components, rows, columns, componentSize, packedAlign, packedSize
|
||||
{ Buffer::DATA_BASE_FLOAT, false, 1, 0, 0, sizeof(float), 4, 4 }, // DATA_FLOAT
|
||||
|
||||
};
|
||||
|
||||
love::Type Buffer::type("GraphicsBuffer", &Object::type);
|
||||
|
||||
Buffer::Buffer(size_t size, BufferTypeFlags typeflags, BufferUsage usage, uint32 mapflags)
|
||||
@@ -65,12 +58,12 @@ Buffer::Buffer(Graphics *gfx, const Settings &settings, const std::vector<DataMe
|
||||
|
||||
for (const auto &member : format)
|
||||
{
|
||||
DataType type = member.type;
|
||||
const DataTypeInfo &info = getDataTypeInfo(type);
|
||||
DataFormat format = member.format;
|
||||
const DataFormatInfo &info = getDataFormatInfo(format);
|
||||
|
||||
if (indexbuffer)
|
||||
{
|
||||
if (type != DATA_UINT16 && type != DATA_UINT32)
|
||||
if (format != DATAFORMAT_UINT16 && format != DATAFORMAT_UINT32)
|
||||
throw love::Exception("Index buffers only support uint16 and uint32 data types.");
|
||||
}
|
||||
|
||||
@@ -79,10 +72,10 @@ Buffer::Buffer(Graphics *gfx, const Settings &settings, const std::vector<DataMe
|
||||
if (info.isMatrix)
|
||||
throw love::Exception("matrix types are not supported in vertex buffers.");
|
||||
|
||||
if (info.baseType == DATA_BASE_BOOL)
|
||||
if (info.baseType == DATA_BASETYPE_BOOL)
|
||||
throw love::Exception("bool types are not supported in vertex buffers.");
|
||||
|
||||
if ((info.baseType == DATA_BASE_INT || info.baseType == DATA_BASE_UINT) && !supportsGLSL3)
|
||||
if ((info.baseType == DATA_BASETYPE_INT || info.baseType == DATA_BASETYPE_UINT) && !supportsGLSL3)
|
||||
throw love::Exception("Integer vertex attribute data types require GLSL 3 support.");
|
||||
}
|
||||
|
||||
|
||||
@@ -54,93 +54,10 @@ public:
|
||||
MAP_READ = (1 << 1),
|
||||
};
|
||||
|
||||
enum DataType
|
||||
{
|
||||
DATA_FLOAT,
|
||||
DATA_FLOAT_VEC2,
|
||||
DATA_FLOAT_VEC3,
|
||||
DATA_FLOAT_VEC4,
|
||||
|
||||
DATA_FLOAT_MAT2X2,
|
||||
DATA_FLOAT_MAT2X3,
|
||||
DATA_FLOAT_MAT2X4,
|
||||
|
||||
DATA_FLOAT_MAT3X2,
|
||||
DATA_FLOAT_MAT3X3,
|
||||
DATA_FLOAT_MAT3X4,
|
||||
|
||||
DATA_FLOAT_MAT4X2,
|
||||
DATA_FLOAT_MAT4X3,
|
||||
DATA_FLOAT_MAT4X4,
|
||||
|
||||
DATA_INT32,
|
||||
DATA_INT32_VEC2,
|
||||
DATA_INT32_VEC3,
|
||||
DATA_INT32_VEC4,
|
||||
|
||||
DATA_UINT32,
|
||||
DATA_UINT32_VEC2,
|
||||
DATA_UINT32_VEC3,
|
||||
DATA_UINT32_VEC4,
|
||||
|
||||
DATA_SNORM8_VEC4,
|
||||
|
||||
DATA_UNORM8_VEC4,
|
||||
|
||||
DATA_INT8_VEC4,
|
||||
|
||||
DATA_UINT8_VEC4,
|
||||
|
||||
DATA_SNORM16,
|
||||
DATA_SNORM16_VEC2,
|
||||
DATA_SNORM16_VEC4,
|
||||
|
||||
DATA_UNORM16,
|
||||
DATA_UNORM16_VEC2,
|
||||
DATA_UNORM16_VEC4,
|
||||
|
||||
DATA_INT16,
|
||||
DATA_INT16_VEC2,
|
||||
DATA_INT16_VEC4,
|
||||
|
||||
DATA_UINT16,
|
||||
DATA_UINT16_VEC2,
|
||||
DATA_UINT16_VEC4,
|
||||
|
||||
DATA_BOOL,
|
||||
DATA_BOOL_VEC2,
|
||||
DATA_BOOL_VEC3,
|
||||
DATA_BOOL_VEC4,
|
||||
|
||||
DATA_MAX_ENUM
|
||||
};
|
||||
|
||||
enum DataTypeBase
|
||||
{
|
||||
DATA_BASE_FLOAT,
|
||||
DATA_BASE_INT,
|
||||
DATA_BASE_UINT,
|
||||
DATA_BASE_SNORM,
|
||||
DATA_BASE_UNORM,
|
||||
DATA_BASE_BOOL,
|
||||
};
|
||||
|
||||
struct DataTypeInfo
|
||||
{
|
||||
DataTypeBase baseType;
|
||||
bool isMatrix;
|
||||
int components;
|
||||
int matrixRows;
|
||||
int matrixColumns;
|
||||
size_t componentSize;
|
||||
size_t packedAlignment;
|
||||
size_t packedSize;
|
||||
};
|
||||
|
||||
struct DataMember
|
||||
{
|
||||
std::string name;
|
||||
DataType type;
|
||||
DataFormat format;
|
||||
int arraySize;
|
||||
};
|
||||
|
||||
@@ -219,10 +136,6 @@ public:
|
||||
|
||||
}; // Mapper
|
||||
|
||||
// static size_t getDataTypeSize(DataType type, bool uniform)
|
||||
|
||||
const DataTypeInfo &getDataTypeInfo(DataType type);
|
||||
|
||||
protected:
|
||||
|
||||
std::vector<DataMember> format;
|
||||
|
||||
@@ -101,6 +101,71 @@ int getFormatPositionComponents(CommonFormat format)
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Order here relies on order of DataFormat enum.
|
||||
static const DataFormatInfo dataFormatInfo[]
|
||||
{
|
||||
// baseType, isMatrix, components, rows, columns, componentSize, align, size
|
||||
{ DATA_BASETYPE_FLOAT, false, 1, 0, 0, 4, 4, 4 }, // DATAFORMAT_FLOAT
|
||||
{ DATA_BASETYPE_FLOAT, false, 2, 0, 0, 4, 4, 8 }, // DATAFORMAT_FLOAT_VEC2
|
||||
{ DATA_BASETYPE_FLOAT, false, 3, 0, 0, 4, 4, 12 }, // DATAFORMAT_FLOAT_VEC3
|
||||
{ DATA_BASETYPE_FLOAT, false, 4, 0, 0, 4, 4, 16 }, // DATAFORMAT_FLOAT_VEC4
|
||||
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 2, 2, 4, 4, 16 }, // DATAFORMAT_FLOAT_MAT2X2
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 2, 3, 4, 4, 24 }, // DATAFORMAT_FLOAT_MAT2X3
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 2, 4, 4, 4, 32 }, // DATAFORMAT_FLOAT_MAT2X4
|
||||
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 3, 2, 4, 4, 24 }, // DATAFORMAT_FLOAT_MAT3X2
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 3, 3, 4, 4, 36 }, // DATAFORMAT_FLOAT_MAT3X3
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 3, 4, 4, 4, 48 }, // DATAFORMAT_FLOAT_MAT3X4
|
||||
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 4, 2, 4, 4, 32 }, // DATAFORMAT_FLOAT_MAT4X2
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 4, 3, 4, 4, 48 }, // DATAFORMAT_FLOAT_MAT4X3
|
||||
{ DATA_BASETYPE_FLOAT, true, 0, 4, 4, 4, 4, 64 }, // DATAFORMAT_FLOAT_MAT4X4
|
||||
|
||||
{ DATA_BASETYPE_INT, false, 1, 0, 0, 4, 4, 4 }, // DATAFORMAT_INT32
|
||||
{ DATA_BASETYPE_INT, false, 2, 0, 0, 4, 4, 8 }, // DATAFORMAT_INT32_VEC2
|
||||
{ DATA_BASETYPE_INT, false, 3, 0, 0, 4, 4, 12 }, // DATAFORMAT_INT32_VEC3
|
||||
{ DATA_BASETYPE_INT, false, 4, 0, 0, 4, 4, 16 }, // DATAFORMAT_INT32_VEC4
|
||||
|
||||
{ DATA_BASETYPE_UINT, false, 1, 0, 0, 4, 4, 4 }, // DATAFORMAT_UINT32
|
||||
{ DATA_BASETYPE_UINT, false, 2, 0, 0, 4, 4, 8 }, // DATAFORMAT_UINT32_VEC2
|
||||
{ DATA_BASETYPE_UINT, false, 3, 0, 0, 4, 4, 12 }, // DATAFORMAT_UINT32_VEC3
|
||||
{ DATA_BASETYPE_UINT, false, 4, 0, 0, 4, 4, 16 }, // DATAFORMAT_UINT32_VEC4
|
||||
|
||||
{ DATA_BASETYPE_SNORM, false, 4, 0, 0, 1, 1, 4 }, // DATAFORMAT_SNORM8_VEC4
|
||||
{ DATA_BASETYPE_UNORM, false, 4, 0, 0, 1, 1, 4 }, // DATAFORMAT_UNORM8_VEC4
|
||||
{ DATA_BASETYPE_INT, false, 4, 0, 0, 1, 1, 4 }, // DATAFORMAT_INT8_VEC4
|
||||
{ DATA_BASETYPE_UINT, false, 4, 0, 0, 1, 1, 4 }, // DATAFORMAT_UINT8_VEC4
|
||||
|
||||
{ DATA_BASETYPE_SNORM, false, 1, 0, 0, 2, 2, 2 }, // DATAFORMAT_SNORM16
|
||||
{ DATA_BASETYPE_SNORM, false, 2, 0, 0, 2, 2, 4 }, // DATAFORMAT_SNORM16_VEC2
|
||||
{ DATA_BASETYPE_SNORM, false, 4, 0, 0, 2, 2, 8 }, // DATAFORMAT_SNORM16_VEC4
|
||||
|
||||
{ DATA_BASETYPE_UNORM, false, 1, 0, 0, 2, 2, 2 }, // DATAFORMAT_SNORM16
|
||||
{ DATA_BASETYPE_UNORM, false, 2, 0, 0, 2, 2, 4 }, // DATAFORMAT_SNORM16_VEC2
|
||||
{ DATA_BASETYPE_UNORM, false, 4, 0, 0, 2, 2, 8 }, // DATAFORMAT_SNORM16_VEC4
|
||||
|
||||
{ DATA_BASETYPE_INT, false, 1, 0, 0, 2, 2, 2 }, // DATAFORMAT_SNORM16
|
||||
{ DATA_BASETYPE_INT, false, 2, 0, 0, 2, 2, 4 }, // DATAFORMAT_SNORM16_VEC2
|
||||
{ DATA_BASETYPE_INT, false, 4, 0, 0, 2, 2, 8 }, // DATAFORMAT_SNORM16_VEC4
|
||||
|
||||
{ DATA_BASETYPE_UINT, false, 1, 0, 0, 2, 2, 2 }, // DATAFORMAT_SNORM16
|
||||
{ DATA_BASETYPE_UINT, false, 2, 0, 0, 2, 2, 4 }, // DATAFORMAT_SNORM16_VEC2
|
||||
{ DATA_BASETYPE_UINT, false, 4, 0, 0, 2, 2, 8 }, // DATAFORMAT_SNORM16_VEC4
|
||||
|
||||
{ DATA_BASETYPE_BOOL, false, 1, 0, 0, 4, 4, 4 }, // DATAFORMAT_BOOL
|
||||
{ DATA_BASETYPE_BOOL, false, 2, 0, 0, 4, 4, 8 }, // DATAFORMAT_BOOL_VEC2
|
||||
{ DATA_BASETYPE_BOOL, false, 3, 0, 0, 4, 4, 12 }, // DATAFORMAT_BOOL_VEC3
|
||||
{ DATA_BASETYPE_BOOL, false, 4, 0, 0, 4, 4, 16 }, // DATAFORMAT_BOOL_VEC4
|
||||
};
|
||||
|
||||
static_assert((sizeof(dataFormatInfo) / sizeof(DataFormatInfo)) == DATAFORMAT_MAX_ENUM, "dataFormatInfo array size must match number of DataFormat enum values.");
|
||||
|
||||
const DataFormatInfo &getDataFormatInfo(DataFormat format)
|
||||
{
|
||||
return dataFormatInfo[format];
|
||||
}
|
||||
|
||||
size_t getIndexDataSize(IndexDataType type)
|
||||
{
|
||||
switch (type)
|
||||
|
||||
@@ -131,6 +131,79 @@ enum DataType
|
||||
DATA_MAX_ENUM
|
||||
};
|
||||
|
||||
// The order of this enum affects the dataFormatInfo array.
|
||||
enum DataFormat
|
||||
{
|
||||
DATAFORMAT_FLOAT,
|
||||
DATAFORMAT_FLOAT_VEC2,
|
||||
DATAFORMAT_FLOAT_VEC3,
|
||||
DATAFORMAT_FLOAT_VEC4,
|
||||
|
||||
DATAFORMAT_FLOAT_MAT2X2,
|
||||
DATAFORMAT_FLOAT_MAT2X3,
|
||||
DATAFORMAT_FLOAT_MAT2X4,
|
||||
|
||||
DATAFORMAT_FLOAT_MAT3X2,
|
||||
DATAFORMAT_FLOAT_MAT3X3,
|
||||
DATAFORMAT_FLOAT_MAT3X4,
|
||||
|
||||
DATAFORMAT_FLOAT_MAT4X2,
|
||||
DATAFORMAT_FLOAT_MAT4X3,
|
||||
DATAFORMAT_FLOAT_MAT4X4,
|
||||
|
||||
DATAFORMAT_INT32,
|
||||
DATAFORMAT_INT32_VEC2,
|
||||
DATAFORMAT_INT32_VEC3,
|
||||
DATAFORMAT_INT32_VEC4,
|
||||
|
||||
DATAFORMAT_UINT32,
|
||||
DATAFORMAT_UINT32_VEC2,
|
||||
DATAFORMAT_UINT32_VEC3,
|
||||
DATAFORMAT_UINT32_VEC4,
|
||||
|
||||
DATAFORMAT_SNORM8_VEC4,
|
||||
|
||||
DATAFORMAT_UNORM8_VEC4,
|
||||
|
||||
DATAFORMAT_INT8_VEC4,
|
||||
|
||||
DATAFORMAT_UINT8_VEC4,
|
||||
|
||||
DATAFORMAT_SNORM16,
|
||||
DATAFORMAT_SNORM16_VEC2,
|
||||
DATAFORMAT_SNORM16_VEC4,
|
||||
|
||||
DATAFORMAT_UNORM16,
|
||||
DATAFORMAT_UNORM16_VEC2,
|
||||
DATAFORMAT_UNORM16_VEC4,
|
||||
|
||||
DATAFORMAT_INT16,
|
||||
DATAFORMAT_INT16_VEC2,
|
||||
DATAFORMAT_INT16_VEC4,
|
||||
|
||||
DATAFORMAT_UINT16,
|
||||
DATAFORMAT_UINT16_VEC2,
|
||||
DATAFORMAT_UINT16_VEC4,
|
||||
|
||||
DATAFORMAT_BOOL,
|
||||
DATAFORMAT_BOOL_VEC2,
|
||||
DATAFORMAT_BOOL_VEC3,
|
||||
DATAFORMAT_BOOL_VEC4,
|
||||
|
||||
DATAFORMAT_MAX_ENUM
|
||||
};
|
||||
|
||||
enum DataBaseType
|
||||
{
|
||||
DATA_BASETYPE_FLOAT,
|
||||
DATA_BASETYPE_INT,
|
||||
DATA_BASETYPE_UINT,
|
||||
DATA_BASETYPE_SNORM,
|
||||
DATA_BASETYPE_UNORM,
|
||||
DATA_BASETYPE_BOOL,
|
||||
DATA_BASETYPE_MAX_ENUM
|
||||
};
|
||||
|
||||
enum Winding
|
||||
{
|
||||
WINDING_CW,
|
||||
@@ -161,6 +234,18 @@ enum class CommonFormat
|
||||
XYf_STPf_RGBAub,
|
||||
};
|
||||
|
||||
struct DataFormatInfo
|
||||
{
|
||||
DataBaseType baseType;
|
||||
bool isMatrix;
|
||||
int components;
|
||||
int matrixRows;
|
||||
int matrixColumns;
|
||||
size_t componentSize;
|
||||
size_t alignment;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
struct STf_RGBAub
|
||||
{
|
||||
float s, t;
|
||||
@@ -315,6 +400,8 @@ inline CommonFormat getSinglePositionFormat(bool is2D)
|
||||
return is2D ? CommonFormat::XYf : CommonFormat::XYZf;
|
||||
}
|
||||
|
||||
const DataFormatInfo &getDataFormatInfo(DataFormat format);
|
||||
|
||||
size_t getIndexDataSize(IndexDataType type);
|
||||
size_t getDataTypeSize(DataType datatype);
|
||||
bool isDataTypeInteger(DataType datatype);
|
||||
|
||||
Reference in New Issue
Block a user