mirror of
https://github.com/minetest/irrlicht.git
synced 2024-12-27 03:00:32 +01:00
OpenGL3: Make VertexType reference and not store the attribute list
This commit is contained in:
parent
3b198bdfda
commit
063079b372
@ -46,25 +46,21 @@ namespace video
|
|||||||
|
|
||||||
struct VertexType {
|
struct VertexType {
|
||||||
int VertexSize;
|
int VertexSize;
|
||||||
int AttributeCount;
|
std::initializer_list<VertexAttribute> Attributes; // Extends lifetime when used properly!
|
||||||
VertexAttribute Attributes[];
|
|
||||||
|
|
||||||
VertexType(const VertexType &) = delete;
|
|
||||||
VertexType &operator= (const VertexType &) = delete;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const VertexAttribute *begin(const VertexType &type)
|
static const VertexAttribute *begin(const VertexType &type)
|
||||||
{
|
{
|
||||||
return type.Attributes;
|
return type.Attributes.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
static const VertexAttribute *end(const VertexType &type)
|
static const VertexAttribute *end(const VertexType &type)
|
||||||
{
|
{
|
||||||
return type.Attributes + type.AttributeCount;
|
return type.Attributes.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr VertexType vtStandard = {
|
static constexpr VertexType vtStandard = {
|
||||||
sizeof(S3DVertex), 4, {
|
sizeof(S3DVertex), {
|
||||||
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, Pos)},
|
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, Pos)},
|
||||||
{EVA_NORMAL, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, Normal)},
|
{EVA_NORMAL, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, Normal)},
|
||||||
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertex, Color)},
|
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertex, Color)},
|
||||||
@ -76,7 +72,7 @@ namespace video
|
|||||||
#pragma GCC diagnostic ignored "-Winvalid-offsetof"
|
#pragma GCC diagnostic ignored "-Winvalid-offsetof"
|
||||||
|
|
||||||
static constexpr VertexType vt2TCoords = {
|
static constexpr VertexType vt2TCoords = {
|
||||||
sizeof(S3DVertex2TCoords), 5, {
|
sizeof(S3DVertex2TCoords), {
|
||||||
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex2TCoords, Pos)},
|
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex2TCoords, Pos)},
|
||||||
{EVA_NORMAL, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex2TCoords, Normal)},
|
{EVA_NORMAL, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex2TCoords, Normal)},
|
||||||
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertex2TCoords, Color)},
|
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertex2TCoords, Color)},
|
||||||
@ -86,7 +82,7 @@ namespace video
|
|||||||
};
|
};
|
||||||
|
|
||||||
static constexpr VertexType vtTangents = {
|
static constexpr VertexType vtTangents = {
|
||||||
sizeof(S3DVertexTangents), 6, {
|
sizeof(S3DVertexTangents), {
|
||||||
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertexTangents, Pos)},
|
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertexTangents, Pos)},
|
||||||
{EVA_NORMAL, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertexTangents, Normal)},
|
{EVA_NORMAL, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertexTangents, Normal)},
|
||||||
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertexTangents, Color)},
|
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertexTangents, Color)},
|
||||||
@ -109,7 +105,7 @@ namespace video
|
|||||||
}
|
}
|
||||||
|
|
||||||
static constexpr VertexType vt2DImage = {
|
static constexpr VertexType vt2DImage = {
|
||||||
sizeof(S3DVertex), 3, {
|
sizeof(S3DVertex), {
|
||||||
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, Pos)},
|
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, Pos)},
|
||||||
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertex, Color)},
|
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertex, Color)},
|
||||||
{EVA_TCOORD0, 2, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, TCoords)},
|
{EVA_TCOORD0, 2, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, TCoords)},
|
||||||
@ -117,7 +113,7 @@ namespace video
|
|||||||
};
|
};
|
||||||
|
|
||||||
static constexpr VertexType vtPrimitive = {
|
static constexpr VertexType vtPrimitive = {
|
||||||
sizeof(S3DVertex), 2, {
|
sizeof(S3DVertex), {
|
||||||
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, Pos)},
|
{EVA_POSITION, 3, GL_FLOAT, VertexAttribute::Mode::Regular, offsetof(S3DVertex, Pos)},
|
||||||
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertex, Color)},
|
{EVA_COLOR, 4, GL_UNSIGNED_BYTE, VertexAttribute::Mode::Normalized, offsetof(S3DVertex, Color)},
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user