mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 01:41:10 +00:00
Use the new shader system for 2d drawing.
This commit is contained in:
parent
c89e612cd4
commit
385175ca65
5 changed files with 62 additions and 49 deletions
|
@ -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 \
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in a new issue