Load the alias model shaders.

This commit is contained in:
Bill Currie 2012-01-02 11:18:34 +09:00
parent df3d9fe4df
commit fd67f3500b
5 changed files with 70 additions and 6 deletions

View file

@ -3,8 +3,12 @@ AUTOMAKE_OPTIONS= foreign
AM_CFLAGS= @PREFER_PIC@
INCLUDES= -I$(top_srcdir)/include $(GLX_CFLAGS)
shader_src= quake2d.frag quakeico.vert quakespr.frag quakespr.vert quaketxt.vert
shader_gen= quake2d.fc quakeico.vc quakespr.fc quakespr.vc quaketxt.vc
shader_src= \
quake2d.frag quakeico.vert quakemdl.frag quakemdl.vert quakespr.frag \
quakespr.vert quaketxt.vert
shader_gen= \
quake2d.fc quakeico.vc quakemdl.fc quakemdl.vc quakespr.fc quakespr.vc \
quaketxt.vc
glsl_src = \
glsl_alias.c glsl_draw.c glsl_main.c glsl_particles.c glsl_screen.c \

View file

@ -43,8 +43,65 @@ static __attribute__ ((used)) const char rcsid[] = "$Id$";
#include "QF/GLSL/defines.h"
#include "QF/GLSL/funcs.h"
#include "QF/GLSL/qf_alias.h"
#include "QF/GLSL/qf_vid.h"
static const char quakemdl_vert[] =
#include "quakemdl.vc"
;
static const char quakemdl_frag[] =
#include "quakemdl.fc"
;
static struct {
int program;
shaderparam_t normals;
shaderparam_t mvp_matrix;
shaderparam_t norm_matrix;
shaderparam_t color;
shaderparam_t stn;
shaderparam_t vertex;
shaderparam_t palette;
shaderparam_t colormap;
shaderparam_t skin;
shaderparam_t ambient;
shaderparam_t shadelight;
shaderparam_t lightvec;
} quake_mdl = {
0,
{"normals", 1},
{"mvp_mat", 1},
{"norm_mat", 1},
{"vcolor", 0},
{"stn", 0},
{"vertex", 0},
{"palette", 1},
{"colormap", 1},
{"skin", 1},
{"ambient", 1},
{"shadelight", 1},
{"lightvec", 1},
};
VISIBLE void
R_InitAlias (void)
{
int vert;
int frag;
vert = GL_CompileShader ("quakemdl.vert", quakemdl_vert, GL_VERTEX_SHADER);
frag = GL_CompileShader ("quakemdl.frag", quakemdl_frag,
GL_FRAGMENT_SHADER);
quake_mdl.program = GL_LinkProgram ("quakemdl", vert, frag);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.normals);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.mvp_matrix);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.norm_matrix);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.color);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.stn);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.vertex);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.palette);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.colormap);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.skin);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.ambient);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.shadelight);
GL_ResolveShaderParam (quake_mdl.program, &quake_mdl.lightvec);
}

View file

@ -48,6 +48,7 @@ static __attribute__ ((used)) const char rcsid[] = "$Id$";
#include "QF/sys.h"
#include "QF/GLSL/funcs.h"
#include "QF/GLSL/qf_alias.h"
#include "QF/GLSL/qf_textures.h"
#include "gl_draw.h"
@ -301,6 +302,7 @@ VISIBLE void
R_Init (void)
{
R_InitParticles ();
R_InitAlias ();
R_InitSprites ();
}

View file

@ -14,7 +14,7 @@ main (void)
{
float pix = texture2D (skin, st).r;
float light = ambient;
float d;
float d, col;
d = dot (normal, lightvec);
d = min (d, 0.0);

View file

@ -1,5 +1,6 @@
uniform sampler2D normals;
uniform mat4 mvp_mat;
uniform mat3 norm_mat;
attribute vec4 vcolor;
attribute vec3 stn;
@ -17,8 +18,8 @@ main (void)
gl_Position = mvp_mat * vec4 (vertex, 1.0);
st = stn.st;
nind = stn.p;
norma = texture2D (normals, vec2 (nind, 0.0));
normb = texture2D (normals, vec2 (nind, 1.0));
normal = norma + normb / 256.0;
norma = texture2D (normals, vec2 (nind, 0.0)).xyz;
normb = texture2D (normals, vec2 (nind, 1.0)).xyz;
normal = norm_mat * (norma + normb / 256.0);
color = vcolor;
}