mirror of
https://github.com/love2d/love.git
synced 2026-08-17 11:00:31 +02:00
Move DataFormat enum to vertex.h
This commit is contained in:
@@ -26,13 +26,6 @@ namespace love
|
|||||||
namespace graphics
|
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);
|
love::Type Buffer::type("GraphicsBuffer", &Object::type);
|
||||||
|
|
||||||
Buffer::Buffer(size_t size, BufferTypeFlags typeflags, BufferUsage usage, uint32 mapflags)
|
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)
|
for (const auto &member : format)
|
||||||
{
|
{
|
||||||
DataType type = member.type;
|
DataFormat format = member.format;
|
||||||
const DataTypeInfo &info = getDataTypeInfo(type);
|
const DataFormatInfo &info = getDataFormatInfo(format);
|
||||||
|
|
||||||
if (indexbuffer)
|
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.");
|
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)
|
if (info.isMatrix)
|
||||||
throw love::Exception("matrix types are not supported in vertex buffers.");
|
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.");
|
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.");
|
throw love::Exception("Integer vertex attribute data types require GLSL 3 support.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,93 +54,10 @@ public:
|
|||||||
MAP_READ = (1 << 1),
|
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
|
struct DataMember
|
||||||
{
|
{
|
||||||
std::string name;
|
std::string name;
|
||||||
DataType type;
|
DataFormat format;
|
||||||
int arraySize;
|
int arraySize;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -219,10 +136,6 @@ public:
|
|||||||
|
|
||||||
}; // Mapper
|
}; // Mapper
|
||||||
|
|
||||||
// static size_t getDataTypeSize(DataType type, bool uniform)
|
|
||||||
|
|
||||||
const DataTypeInfo &getDataTypeInfo(DataType type);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
std::vector<DataMember> format;
|
std::vector<DataMember> format;
|
||||||
|
|||||||
@@ -101,6 +101,71 @@ int getFormatPositionComponents(CommonFormat format)
|
|||||||
return 0;
|
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)
|
size_t getIndexDataSize(IndexDataType type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
|||||||
@@ -131,6 +131,79 @@ enum DataType
|
|||||||
DATA_MAX_ENUM
|
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
|
enum Winding
|
||||||
{
|
{
|
||||||
WINDING_CW,
|
WINDING_CW,
|
||||||
@@ -161,6 +234,18 @@ enum class CommonFormat
|
|||||||
XYf_STPf_RGBAub,
|
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
|
struct STf_RGBAub
|
||||||
{
|
{
|
||||||
float s, t;
|
float s, t;
|
||||||
@@ -315,6 +400,8 @@ inline CommonFormat getSinglePositionFormat(bool is2D)
|
|||||||
return is2D ? CommonFormat::XYf : CommonFormat::XYZf;
|
return is2D ? CommonFormat::XYf : CommonFormat::XYZf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const DataFormatInfo &getDataFormatInfo(DataFormat format);
|
||||||
|
|
||||||
size_t getIndexDataSize(IndexDataType type);
|
size_t getIndexDataSize(IndexDataType type);
|
||||||
size_t getDataTypeSize(DataType datatype);
|
size_t getDataTypeSize(DataType datatype);
|
||||||
bool isDataTypeInteger(DataType datatype);
|
bool isDataTypeInteger(DataType datatype);
|
||||||
|
|||||||
Reference in New Issue
Block a user