aboutsummaryrefslogtreecommitdiff
path: root/source/GraphicsTags.hpp
blob: 34c08850c64ba52c4b34e6e482ef4ac19004bfed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#pragma once

#include <glad/glad.h>
#include <limits>
#include <string>
#include <string_view>

namespace Tags {
/// Vertex element semantics, used to identify the meaning of vertex buffer contents
enum VertexElementSemantic {
	/// 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,
};

std::string_view NameOf(VertexElementSemantic semantic);
VertexElementSemantic FindVertexElementSemantic(std::string_view name);

enum VertexElementType {
	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_NORM_BEGIN,
	VET_Byte4Norm = VET_NORM_BEGIN, /// 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,
	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 {
	TF_Linear,
	TF_Nearest,
};

std::string_view NameOfGLType(GLenum);
GLenum FindGLType(std::string_view name);

constexpr GLuint kInvalidLocation = std::numeric_limits<GLuint>::max();
} // namespace Tags