aboutsummaryrefslogtreecommitdiff
path: root/src/parsec/include/e_shader.h
blob: 4ca6b8f7682fb711de0a98bbe6c210dc9d03205c (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
/*
 * 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_