#pragma once #include #include #include #include #include namespace Tags { /// Vertex element semantics, used to identify the meaning of vertex buffer contents enum VertexElementSemantic { // clang-format off BRUSSEL_ENUM(ToString, FromString, ExcludeHeuristics) // clang-format on /// Position, typically VET_Float3 VES_Position, /// Blending weights VES_BlendWeights, /// Blending indices VES_BlendIndices, /// Normal, typically VET_Float3 VES_Normal, /// Colour, typically VET_Ubyte4 VES_Color1, VES_Color2, VES_Color3, /// Texture coordinates, typically VET_Float2 VES_TexCoords1, VES_TexCoords2, VES_TexCoords3, /// Binormal (Y axis if normal is Z) VES_Binormal, /// Tangent (X axis if normal is Z) VES_Tangent, /// Default semantic VES_Generic, VES_COUNT, }; enum VertexElementType { // clang-format off BRUSSEL_ENUM(ToString, FromString, ExcludeHeuristics) // clang-format on VET_Float1, VET_Float2, VET_Float3, VET_Float4, VET_Short2, VET_Short4, VET_Ubyte4, // the following are not universally supported on all hardware: VET_Double1, VET_Double2, VET_Double3, VET_Double4, VET_Ushort2, VET_Ushort4, VET_Int1, VET_Int2, VET_Int3, VET_Int4, VET_Uint1, VET_Uint2, VET_Uint3, VET_Uint4, VET_Byte4, /// signed bytes VET_Byte4Norm, /// signed bytes (normalized to -1..1) VET_Ubyte4Norm, /// unsigned bytes (normalized to 0..1) VET_Short2Norm, /// signed shorts (normalized to -1..1) VET_Short4Norm, VET_Ushort2Norm, /// unsigned shorts (normalized to 0..1) VET_Ushort4Norm, }; constexpr auto VET_NORM_BEGIN = VET_Byte4Norm; constexpr auto VET_NORM_END = VET_Ushort4Norm; int SizeOf(VertexElementType type); int VectorLenOf(VertexElementType type); GLenum FindGLType(VertexElementType type); bool IsNormalized(VertexElementType type); enum IndexType { IT_16Bit, IT_32Bit, }; int SizeOf(IndexType type); GLenum FindGLType(IndexType type); enum TexFilter { // clang-format off BRUSSEL_ENUM(ToString, FromString, ExcludeHeuristics) // clang-format on TF_Linear, TF_Nearest, }; std::string_view GLTypeToString(GLenum); GLenum GLTypeFromString(std::string_view name); constexpr auto kInvalidLocation = std::numeric_limits::max(); } // namespace Tags #include