Add support for signed and unsigned integer vertex attributes.

This commit is contained in:
Paul Chote
2023-10-23 18:58:12 +01:00
committed by Gustas
parent 4547f3c2b9
commit 143cd8f856
6 changed files with 30 additions and 10 deletions

View File

@@ -45,9 +45,9 @@ namespace OpenRA.Graphics
public override ShaderVertexAttribute[] Attributes { get; } = new[]
{
new ShaderVertexAttribute("aVertexPosition", 3, 0),
new ShaderVertexAttribute("aVertexTexCoord", 4, 12),
new ShaderVertexAttribute("aVertexTexMetadata", 2, 28),
new ShaderVertexAttribute("aVertexPosition", ShaderVertexAttributeType.Float, 3, 0),
new ShaderVertexAttribute("aVertexTexCoord", ShaderVertexAttributeType.Float, 4, 12),
new ShaderVertexAttribute("aVertexTexMetadata", ShaderVertexAttributeType.Float, 2, 28),
};
}
}

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Graphics
public override ShaderVertexAttribute[] Attributes { get; } = new[]
{
new ShaderVertexAttribute("aVertexPosition", 2, 0)
new ShaderVertexAttribute("aVertexPosition", ShaderVertexAttributeType.Float, 2, 0)
};
}
}

View File

@@ -14,15 +14,26 @@ using System.Linq;
namespace OpenRA.Graphics
{
public enum ShaderVertexAttributeType
{
// Assign the underlying OpenGL type values
// to simplify enum use in the shader
Float = 0x1406, // GL_FLOAT
Int = 0x1404, // GL_INT
UInt = 0x1405 // GL_UNSIGNED_INT
}
public readonly struct ShaderVertexAttribute
{
public readonly string Name;
public readonly ShaderVertexAttributeType Type;
public readonly int Components;
public readonly int Offset;
public ShaderVertexAttribute(string name, int components, int offset)
public ShaderVertexAttribute(string name, ShaderVertexAttributeType type, int components, int offset)
{
Name = name;
Type = type;
Components = components;
Offset = offset;
}

View File

@@ -55,10 +55,10 @@ namespace OpenRA.Graphics
public override ShaderVertexAttribute[] Attributes { get; } = new[]
{
new ShaderVertexAttribute("aVertexPosition", 3, 0),
new ShaderVertexAttribute("aVertexTexCoord", 4, 12),
new ShaderVertexAttribute("aVertexTexMetadata", 2, 28),
new ShaderVertexAttribute("aVertexTint", 4, 36)
new ShaderVertexAttribute("aVertexPosition", ShaderVertexAttributeType.Float, 3, 0),
new ShaderVertexAttribute("aVertexTexCoord", ShaderVertexAttributeType.Float, 4, 12),
new ShaderVertexAttribute("aVertexTexMetadata", ShaderVertexAttributeType.Float, 2, 28),
new ShaderVertexAttribute("aVertexTint", ShaderVertexAttributeType.Float, 4, 36)
};
}
}