-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathShaderMacros.h
More file actions
47 lines (35 loc) · 1.37 KB
/
ShaderMacros.h
File metadata and controls
47 lines (35 loc) · 1.37 KB
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
#pragma once
#define L(X) (sizeof(X)/sizeof(void*))
#define START_SHADER(NAME)\
namespace NAME\
{\
extern int uniformloc[];\
inline void Use(){ glUseProgram(shaders[SP_##NAME]); }
#define DEF_SHADER(NAME, ...)\
namespace NAME\
{\
static const char *uniforms[] = { __VA_ARGS__ };\
int uniformloc[L(uniforms)];\
inline void InitUniforms()\
{\
for(unsigned i=0; i<L(uniforms); ++i)\
uniformloc[i] = glGetUniformLocation(shaders[SP_##NAME], uniforms[i]);\
}\
}
#define END_SHADER()\
}
#define SAMPLER(NAME, ID)\
inline void NAME(const int &a){ glUniform1i(uniformloc[ID], a); }
#define FLOAT(NAME, ID)\
inline void NAME(const float &a){ glUniform1f(uniformloc[ID], a); }
#define VEC2(NAME, ID)\
inline void NAME(const float &a, const float &b){ glUniform2f(uniformloc[ID], a, b); }\
inline void NAME(const float *a){ glUniform2fv(uniformloc[ID], 1, a); }
#define VEC3(NAME, ID)\
inline void NAME(const float &a, const float &b, const float &c){ glUniform3f(uniformloc[ID], a, b, c); }\
inline void NAME(const float *a){ glUniform3fv(uniformloc[ID], 1, a); }
#define VEC4(NAME, ID)\
inline void NAME(const float &a, const float &b, const float &c, const float &d){ glUniform4f(uniformloc[ID], a, b, c, d); }\
inline void NAME(const float *a){ glUniform4fv(uniformloc[ID], 1, a); }
#define MAT4(NAME, ID)\
inline void NAME(const float *a){ glUniformMatrix4fv(uniformloc[ID], 1, 0, a); }