mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-14 08:21:05 +00:00
140 lines
2.9 KiB
C
140 lines
2.9 KiB
C
|
#define SHADER_PASS_MAX 8
|
||
|
#define SHADER_MAX_TC_MODS 8
|
||
|
#define SHADER_DEFORM_MAX 8
|
||
|
#define SHADER_MAX_ANIMFRAMES 8
|
||
|
|
||
|
//colour manipulation
|
||
|
typedef struct
|
||
|
{
|
||
|
enum {
|
||
|
SHADER_FUNC_SIN,
|
||
|
SHADER_FUNC_TRIANGLE,
|
||
|
SHADER_FUNC_SQUARE,
|
||
|
SHADER_FUNC_SAWTOOTH,
|
||
|
SHADER_FUNC_INVERSESAWTOOTH,
|
||
|
SHADER_FUNC_NOISE
|
||
|
} type; // SHADER_FUNC enum
|
||
|
float args[4]; // offset, amplitude, phase_offset, rate
|
||
|
} shaderfunc_t;
|
||
|
|
||
|
//tecture coordinate manipulation
|
||
|
typedef struct
|
||
|
{
|
||
|
enum {
|
||
|
SHADER_TCMOD_NONE, //bug
|
||
|
SHADER_TCMOD_SCALE, //some sorta tabled deformation
|
||
|
SHADER_TCMOD_SCROLL, //boring moving texcoords with time
|
||
|
SHADER_TCMOD_STRETCH, //constant factor
|
||
|
SHADER_TCMOD_ROTATE
|
||
|
} type;
|
||
|
float args[6];
|
||
|
} tcmod_t;
|
||
|
|
||
|
//vertex positioning manipulation.
|
||
|
typedef struct
|
||
|
{
|
||
|
enum {
|
||
|
DEFORMV_NONE, //bug
|
||
|
DEFORMV_MOVE,
|
||
|
DEFORMV_WAVE,
|
||
|
DEFORMV_NORMAL,
|
||
|
DEFORMV_BULGE,
|
||
|
DEFORMV_AUTOSPRITE,
|
||
|
DEFORMV_AUTOSPRITE2,
|
||
|
DEFORMV_PROJECTION_SHADOW
|
||
|
} type;
|
||
|
float args[4];
|
||
|
shaderfunc_t func;
|
||
|
} deformv_t;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
int mergedpasses;
|
||
|
|
||
|
shaderfunc_t rgbgen_func;
|
||
|
shaderfunc_t alphagen_func;
|
||
|
|
||
|
|
||
|
unsigned int blendsrc, blenddst; // glBlendFunc args
|
||
|
unsigned int blendmode, envmode;
|
||
|
|
||
|
unsigned int combinesrc0, combinesrc1, combinemode;
|
||
|
|
||
|
unsigned int depthfunc; // glDepthFunc arg
|
||
|
enum {
|
||
|
SHADER_ALPHA_GT0,
|
||
|
SHADER_ALPHA_LT128,
|
||
|
SHADER_ALPHA_GE128
|
||
|
} alphafunc;
|
||
|
|
||
|
enum {
|
||
|
TC_GEN_BASE, //basic specified texture coords
|
||
|
TC_GEN_LIGHTMAP, //use loaded lightmap coords
|
||
|
TC_GEN_ENVIRONMENT,
|
||
|
TC_GEN_DOTPRODUCT
|
||
|
} tcgen;
|
||
|
enum {
|
||
|
RGB_GEN_WAVE,
|
||
|
RGB_GEN_ENTITY,
|
||
|
RGB_GEN_ONE_MINUS_ENTITY,
|
||
|
RGB_GEN_VERTEX,
|
||
|
RGB_GEN_EXACT_VERTEX,
|
||
|
RGB_GEN_ONE_MINUS_VERTEX,
|
||
|
RGB_GEN_IDENTITY_LIGHTING,
|
||
|
RGB_GEN_IDENTITY,
|
||
|
RGB_GEN_CONST
|
||
|
} rgbgen;
|
||
|
enum {
|
||
|
ALPHA_GEN_ENTITY,
|
||
|
ALPHA_GEN_WAVE,
|
||
|
ALPHA_GEN_PORTAL,
|
||
|
ALPHA_GEN_SPECULAR,
|
||
|
ALPHA_GEN_IDENTITY
|
||
|
} alphagen;
|
||
|
|
||
|
int numtcmods;
|
||
|
tcmod_t tcmod[SHADER_MAX_TC_MODS];
|
||
|
|
||
|
int anim_numframes;
|
||
|
int anim_frames[SHADER_MAX_ANIMFRAMES];
|
||
|
float fps;
|
||
|
unsigned int texturetype;
|
||
|
|
||
|
enum {
|
||
|
SHADER_PASS_BLEND = 1 << 0,
|
||
|
SHADER_PASS_ALPHAFUNC = 1 << 1,
|
||
|
SHADER_PASS_DEPTHWRITE = 1 << 2
|
||
|
} flags;
|
||
|
} shaderpass_t;
|
||
|
|
||
|
typedef struct shader_s {
|
||
|
int numpasses; //careful... 0 means it's not loaded... and not actually a proper shader.
|
||
|
struct shader_s *next;
|
||
|
char name[MAX_QPATH];
|
||
|
//end of shared fields.
|
||
|
|
||
|
byte_vec4_t fog_color;
|
||
|
|
||
|
int numdeforms;
|
||
|
deformv_t deforms[SHADER_DEFORM_MAX];
|
||
|
|
||
|
enum {
|
||
|
SHADER_SKY = 1 << 0,
|
||
|
SHADER_NOMIPMAPS = 1 << 1,
|
||
|
SHADER_NOPICMIP = 1 << 2,
|
||
|
SHADER_CULL_FRONT = 1 << 3,
|
||
|
SHADER_CULL_BACK = 1 << 4,
|
||
|
SHADER_DEFORMV_BULGE = 1 << 5,
|
||
|
SHADER_AUTOSPRITE = 1 << 5
|
||
|
} flags;
|
||
|
|
||
|
shaderpass_t pass[SHADER_PASS_MAX];
|
||
|
} shader_t;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
void GLR_MeshInit(void);
|
||
|
void GL_DrawMesh(mesh_t *mesh, shader_t *shader, int texturenum, int lmtexturenum);
|
||
|
void GL_DrawMeshBump(mesh_t *mesh, int texturenum, int lmtexturenum, int bumpnum, int deluxnum);
|