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
|
/*
* PARSEC HEADER: e_shader.h
*/
#ifndef _E_SHADER_H_
#define _E_SHADER_H_
// shader spec
struct shader_s {
char* name;
word iter;
word flags;
texanim_s* texanim;
colrgba_s facecolor;
colanim_s* colanim;
dword colflags;
dword _pad32[ 2 ];
};
// special lod argument for SetFaceShader()
#define ACTIVE_LOD (~0)
// argument specification for face shader overriding
enum {
OVERRIDE_ARG_IDLIST,
OVERRIDE_ARG_TEXTURE,
OVERRIDE_ARG_GLOBAL,
OVERRIDE_ARG_NUM_ARGS
};
// external functions
int SetFaceShader( GenObject *obj, dword lod, dword faceid, shader_s *shader );
shader_s* FetchShaderByName( const char *name, dword *shaderid );
shader_s* FetchShaderById( dword shaderid );
int RegisterShader( shader_s *shader );
void OverrideShaderFaceByIdList( dword objclass, shader_s *shader, dword *faceids, int count );
void OverrideShaderFaceByTexture( dword objclass, shader_s *shader, char *texname );
void OverrideShaderFaceGlobal( dword objclass, shader_s *shader );
void OverrideShaderFaceGlobalInstanced( GenObject *gobj, shader_s *shader );
void OverrideShaderFaces( dword objclass, shader_s *shader, int arg );
void OverrideShaderLodFaces( dword objclass, shader_s *shader, int lod, int arg );
// external variables
extern int num_registered_shaders;
extern shader_s registered_shaders[];
extern dword* override_arg_faceids;
extern int override_arg_count;
extern char* override_arg_texname;
#endif // _E_SHADER_H_
|