VertexLayout

- Added Byte and UByte types to VertexLayout
- Changed sizeof(int/float...) to sizeof(GLint, GLfloat...) in glVertexLayout
This commit is contained in:
Light 2021-07-29 09:16:30 +04:30
parent 40355ebfc2
commit ec8669d3fe
3 changed files with 45 additions and 36 deletions

View file

@ -11,10 +11,11 @@ namespace Light {
enum class VertexElementType
{
Int1 , Int2 , Int3 , Int4,
UInt1 , UInt2 , UInt3 , UInt4,
Float1 , Float2 , Float3 , Float4,
Double1, Double2, Double3, Double4
Byte1 , Byte2 , Byte4 ,
UByte1 , UByte2 , UByte4 ,
Int1 , Int2 , Int3 , Int4 ,
UInt1 , UInt2 , UInt3 , UInt4 ,
Float1 , Float2 , Float3 , Float4 ,
};
class VertexLayout

View file

@ -53,32 +53,37 @@ namespace Light {
{
switch (type)
{
// #todo: add char
// int
/* byte */
case Light::VertexElementType::Byte1: return DXGI_FORMAT_R8_SINT;
case Light::VertexElementType::Byte2: return DXGI_FORMAT_R8G8_SINT;
case Light::VertexElementType::Byte4: return DXGI_FORMAT_R8_SINT;
/* ubyte */
case Light::VertexElementType::UByte1: return DXGI_FORMAT_R8_UINT;
case Light::VertexElementType::UByte2: return DXGI_FORMAT_R8G8_UINT;
case Light::VertexElementType::UByte4: return DXGI_FORMAT_R8G8B8A8_UINT;
/* int */
case Light::VertexElementType::Int1: return DXGI_FORMAT_R32_SINT;
case Light::VertexElementType::Int2: return DXGI_FORMAT_R32G32_SINT;
case Light::VertexElementType::Int3: return DXGI_FORMAT_R32G32B32_SINT;
case Light::VertexElementType::Int4: return DXGI_FORMAT_R32G32B32A32_SINT;
// uint
/* uint */
case Light::VertexElementType::UInt1: return DXGI_FORMAT_R32_UINT;
case Light::VertexElementType::UInt2: return DXGI_FORMAT_R32G32_UINT;
case Light::VertexElementType::UInt3: return DXGI_FORMAT_R32G32B32_UINT;
case Light::VertexElementType::UInt4: return DXGI_FORMAT_R32G32B32A32_UINT;
// float
/* float */
case Light::VertexElementType::Float1: return DXGI_FORMAT_R32_FLOAT;
case Light::VertexElementType::Float2: return DXGI_FORMAT_R32G32_FLOAT;
case Light::VertexElementType::Float3: return DXGI_FORMAT_R32G32B32_FLOAT;
case Light::VertexElementType::Float4: return DXGI_FORMAT_R32G32B32A32_FLOAT;
// #todo:
case Light::VertexElementType::Double1:
case Light::VertexElementType::Double2:
case Light::VertexElementType::Double3:
case Light::VertexElementType::Double4:
default: LT_ENGINE_ASSERT(false, "dxVertexLayout::GetDxgiFormat: invalid 'VertexElementType'");
default:
LT_ENGINE_ASSERT(false, "dxVertexLayout::GetDxgiFormat: invalid 'VertexElementType'");
return DXGI_FORMAT_UNKNOWN;
}
}

View file

@ -60,30 +60,33 @@ namespace Light {
{
switch (type)
{
// #todo: add char
// int
case VertexElementType::Int1: return { GL_INT, 1u, sizeof(int), offset };
case VertexElementType::Int2: return { GL_INT, 2u, sizeof(int), offset };
case VertexElementType::Int3: return { GL_INT, 3u, sizeof(int), offset };
case VertexElementType::Int4: return { GL_INT, 4u, sizeof(int), offset };
/* byte */
case Light::VertexElementType::Byte1: return { GL_BYTE, 1u, sizeof(GLbyte), offset };
case Light::VertexElementType::Byte2: return { GL_BYTE, 1u, sizeof(GLbyte), offset };
case Light::VertexElementType::Byte4: return { GL_BYTE, 1u, sizeof(GLbyte), offset };
// uint
case VertexElementType::UInt1: return { GL_UNSIGNED_INT, 1u, sizeof(unsigned int), offset };
case VertexElementType::UInt2: return { GL_UNSIGNED_INT, 2u, sizeof(unsigned int), offset };
case VertexElementType::UInt3: return { GL_UNSIGNED_INT, 3u, sizeof(unsigned int), offset };
case VertexElementType::UInt4: return { GL_UNSIGNED_INT, 4u, sizeof(unsigned int), offset };
/* ubyte */
case Light::VertexElementType::UByte1: return { GL_UNSIGNED_BYTE, 1u, sizeof(GLubyte), offset };
case Light::VertexElementType::UByte2: return { GL_UNSIGNED_BYTE, 2u, sizeof(GLubyte), offset };
case Light::VertexElementType::UByte4: return { GL_UNSIGNED_BYTE, 4u, sizeof(GLubyte), offset };
// float
case VertexElementType::Float1: return { GL_FLOAT, 1u, sizeof(float), offset };
case VertexElementType::Float2: return { GL_FLOAT, 2u, sizeof(float), offset };
case VertexElementType::Float3: return { GL_FLOAT, 3u, sizeof(float), offset };
case VertexElementType::Float4: return { GL_FLOAT, 4u, sizeof(float), offset };
/* int */
case VertexElementType::Int1: return { GL_INT, 1u, sizeof(GLint), offset };
case VertexElementType::Int2: return { GL_INT, 2u, sizeof(GLint), offset };
case VertexElementType::Int3: return { GL_INT, 3u, sizeof(GLint), offset };
case VertexElementType::Int4: return { GL_INT, 4u, sizeof(GLint), offset };
// double
case VertexElementType::Double1: return { GL_DOUBLE, 1, sizeof(float), offset };
case VertexElementType::Double2: return { GL_DOUBLE, 2, sizeof(float), offset };
case VertexElementType::Double3: return { GL_DOUBLE, 3, sizeof(float), offset };
case VertexElementType::Double4: return { GL_DOUBLE, 4, sizeof(float), offset };
/* uint */
case VertexElementType::UInt1: return { GL_UNSIGNED_INT, 1u, sizeof(GLuint), offset };
case VertexElementType::UInt2: return { GL_UNSIGNED_INT, 2u, sizeof(GLuint), offset };
case VertexElementType::UInt3: return { GL_UNSIGNED_INT, 3u, sizeof(GLuint), offset };
case VertexElementType::UInt4: return { GL_UNSIGNED_INT, 4u, sizeof(GLuint), offset };
/* float */
case VertexElementType::Float1: return { GL_FLOAT, 1u, sizeof(GLfloat), offset };
case VertexElementType::Float2: return { GL_FLOAT, 2u, sizeof(GLfloat), offset };
case VertexElementType::Float3: return { GL_FLOAT, 3u, sizeof(GLfloat), offset };
case VertexElementType::Float4: return { GL_FLOAT, 4u, sizeof(GLfloat), offset };
default:
LT_ENGINE_ASSERT(false, "glVertexLayout::GetElementDesc: invalid 'VertexElementType'");