Use the new shader system for 2d drawing.

This commit is contained in:
Bill Currie 2014-01-28 13:10:56 +09:00
parent c89e612cd4
commit 385175ca65
5 changed files with 62 additions and 49 deletions

View file

@ -4,11 +4,9 @@ AM_CFLAGS= @PREFER_PIC@
AM_CPPFLAGS= -I$(top_srcdir)/include $(GLX_CFLAGS)
shader_src= quakeforge.glsl \
iqm.frag iqm.vert \
quake2d.frag quakeico.vert
iqm.frag iqm.vert
shader_gen= quakeforge.slc \
iqm.fc iqm.vc \
quake2d.fc quakeico.vc
iqm.fc iqm.vc
glsl_src = \
glsl_alias.c glsl_bsp.c glsl_draw.c glsl_fog.c glsl_iqm.c glsl_lightmap.c \

View file

@ -72,13 +72,18 @@ typedef struct {
float color[4];
} drawvert_t;
static const char quakeicon_vert[] =
#include "quakeico.vc"
;
static const char *twod_vert_effects[] =
{
"QuakeForge.Vertex.2d",
0
};
static const char quake2d_frag[] =
#include "quake2d.fc"
;
static const char *twod_frag_effects[] =
{
"QuakeForge.Fragment.palette",
"QuakeForge.Fragment.2d",
0
};
static float proj_matrix[16];
@ -364,6 +369,7 @@ Draw_ClearCache (int phase)
void
glsl_Draw_Init (void)
{
shader_t *vert_shader, *frag_shader;
int i;
int frag, vert;
qpic_t *pic;
@ -377,9 +383,11 @@ glsl_Draw_Init (void)
draw_queue = dstring_new ();
vert = GLSL_CompileShaderS ("quakeico.vert", quakeicon_vert,
vert_shader = GLSL_BuildShader (twod_vert_effects);
frag_shader = GLSL_BuildShader (twod_frag_effects);
vert = GLSL_CompileShader ("quakeico.vert", vert_shader,
GL_VERTEX_SHADER);
frag = GLSL_CompileShaderS ("quake2d.frag", quake2d_frag,
frag = GLSL_CompileShader ("quake2d.frag", frag_shader,
GL_FRAGMENT_SHADER);
quake_2d.program = GLSL_LinkProgram ("quake2d", vert, frag);
GLSL_ResolveShaderParam (quake_2d.program, &quake_2d.texture);
@ -387,6 +395,8 @@ glsl_Draw_Init (void)
GLSL_ResolveShaderParam (quake_2d.program, &quake_2d.matrix);
GLSL_ResolveShaderParam (quake_2d.program, &quake_2d.vertex);
GLSL_ResolveShaderParam (quake_2d.program, &quake_2d.color);
GLSL_FreeShader (vert_shader);
GLSL_FreeShader (frag_shader);
draw_scrap = GLSL_CreateScrap (2048, GL_LUMINANCE, 0);

View file

@ -1,16 +0,0 @@
//precision mediump float;
uniform sampler2D texture;
uniform sampler2D palette;
varying vec4 color;
varying vec2 st;
void
main (void)
{
float pix;
pix = texture2D (texture, st).r;
if (pix == 1.0)
discard;
gl_FragColor = texture2D (palette, vec2 (pix, 0.0)) * color;
}

View file

@ -389,3 +389,45 @@ main (void)
discard;
gl_FragColor = fogBlend (col);
}
-- Vertex.2d
uniform mat4 mvp_mat;
attribute vec4 vcolor;
/** Vertex position.
x, y, s, t
\a vertex provides the onscreen location at which to draw the icon
(\a x, \a y) and texture coordinate for the icon (\a s=z, \a t=w).
*/
attribute vec4 vertex;
varying vec4 color;
varying vec2 st;
void
main (void)
{
gl_Position = mvp_mat * vec4 (vertex.xy, 0.0, 1.0);
st = vertex.zw;
color = vcolor;
}
-- Fragment.2d
//precision mediump float;
uniform sampler2D texture;
varying vec4 color;
varying vec2 st;
void
main (void)
{
float pix;
pix = texture2D (texture, st).r;
if (pix == 1.0)
discard;
gl_FragColor = palettedColor (pix) * color;
}

View file

@ -1,21 +0,0 @@
uniform mat4 mvp_mat;
attribute vec4 vcolor;
/** Vertex position.
x, y, s, t
\a vertex provides the onscreen location at which to draw the icon
(\a x, \a y) and texture coordinate for the icon (\a s=z, \a t=w).
*/
attribute vec4 vertex;
varying vec4 color;
varying vec2 st;
void
main (void)
{
gl_Position = mvp_mat * vec4 (vertex.xy, 0.0, 1.0);
st = vertex.zw;
color = vcolor;
}