From 5424a1d5434e3ddd911a504719918c2df027e2fd Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sun, 17 Apr 2022 20:08:57 -0700 Subject: Changeset: 8 Initial work on sprites and texture system --- source/GraphicsTags.cpp | 105 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 99 insertions(+), 6 deletions(-) (limited to 'source/GraphicsTags.cpp') diff --git a/source/GraphicsTags.cpp b/source/GraphicsTags.cpp index d2da091..b389acf 100644 --- a/source/GraphicsTags.cpp +++ b/source/GraphicsTags.cpp @@ -1,6 +1,6 @@ #include "GraphicsTags.hpp" -#include +#include #include #include @@ -14,7 +14,10 @@ std::string_view Tags::NameOf(VertexElementSemantic semantic) { case VES_Normal: return "Normal"sv; case VES_Color1: return "Color1"sv; case VES_Color2: return "Color2"sv; - case VES_Texture_coordinates: return "Texture_coordinates"sv; + case VES_Color3: return "Color3"sv; + case VES_TexCoords1: return "TexCoords1"sv; + case VES_TexCoords2: return "TexCoords2"sv; + case VES_TexCoords3: return "TexCoords3"sv; case VES_Binormal: return "Binormal"sv; case VES_Tangent: return "Tangent"sv; case VES_Generic: return "Generic"sv; @@ -30,7 +33,10 @@ Tags::VertexElementSemantic Tags::FindVertexElementSemantic(std::string_view nam if (name == "Normal"sv) return VES_Normal; if (name == "Color1"sv) return VES_Color1; if (name == "Color2"sv) return VES_Color2; - if (name == "Texture_coordinates"sv) return VES_Texture_coordinates; + if (name == "Color3"sv) return VES_Color3; + if (name == "TexCoords1"sv) return VES_TexCoords1; + if (name == "TexCoords2"sv) return VES_TexCoords2; + if (name == "TexCoords3"sv) return VES_TexCoords3; if (name == "Binormal"sv) return VES_Binormal; if (name == "Tangent"sv) return VES_Tangent; if (name == "Generic"sv) return VES_Generic; @@ -86,6 +92,86 @@ int Tags::SizeOf(VertexElementType type) { return 0; } +int Tags::VectorLenOf(VertexElementType type) { + switch (type) { + case VET_Float1: + case VET_Double1: + case VET_Int1: + case VET_Uint1: + return 1; + case VET_Float2: + case VET_Double2: + case VET_Short2: + case VET_Short2Norm: + case VET_Ushort2: + case VET_Ushort2Norm: + case VET_Int2: + case VET_Uint2: + return 2; + case VET_Float3: + case VET_Double3: + case VET_Int3: + case VET_Uint3: + return 3; + case VET_Float4: + case VET_Double4: + case VET_Short4: + case VET_Short4Norm: + case VET_Ushort4: + case VET_Ushort4Norm: + case VET_Int4: + case VET_Uint4: + case VET_Byte4: + case VET_Byte4Norm: + case VET_Ubyte4: + case VET_Ubyte4Norm: + return 4; + } + return 0; +} + +GLenum Tags::FindGLType(VertexElementType type) { + switch (type) { + case VET_Float1: + case VET_Float2: + case VET_Float3: + case VET_Float4: + return GL_FLOAT; + case VET_Double1: + case VET_Double2: + case VET_Double3: + case VET_Double4: + return GL_DOUBLE; + case VET_Short2: + case VET_Short2Norm: + case VET_Short4: + case VET_Short4Norm: + return GL_SHORT; + case VET_Ushort2: + case VET_Ushort2Norm: + case VET_Ushort4: + case VET_Ushort4Norm: + return GL_UNSIGNED_SHORT; + case VET_Int1: + case VET_Int2: + case VET_Int3: + case VET_Int4: + return GL_INT; + case VET_Uint1: + case VET_Uint2: + case VET_Uint3: + case VET_Uint4: + return GL_UNSIGNED_INT; + case VET_Byte4: + case VET_Byte4Norm: + return GL_BYTE; + case VET_Ubyte4: + case VET_Ubyte4Norm: + return GL_UNSIGNED_BYTE; + } + return 0; +} + bool Tags::IsNormalized(VertexElementType type) { return type >= VET_NORM_BEGIN && type <= VET_NORM_END; } @@ -98,11 +184,18 @@ int Tags::SizeOf(IndexType type) { return 0; } -namespace ProjectBrussel_UNITY_ID { +GLenum Tags::FindGLType(IndexType type) { + switch (type) { + case IT_16Bit: return GL_UNSIGNED_SHORT; + case IT_32Bit: return GL_UNSIGNED_BYTE; + } + return GL_NONE; +} +namespace ProjectBrussel_UNITY_ID { struct GLTypeInfo { - absl::flat_hash_map enum2Name; - absl::flat_hash_map name2Enum; + robin_hood::unordered_flat_map enum2Name; + robin_hood::unordered_flat_map name2Enum; GLTypeInfo() { InsertEntry("float"sv, GL_FLOAT); -- cgit v1.2.3-70-g09d2