summaryrefslogtreecommitdiff
path: root/includes/graphics.h
diff options
context:
space:
mode:
Diffstat (limited to 'includes/graphics.h')
-rw-r--r--includes/graphics.h100
1 files changed, 95 insertions, 5 deletions
diff --git a/includes/graphics.h b/includes/graphics.h
index 66b2903..57d2358 100644
--- a/includes/graphics.h
+++ b/includes/graphics.h
@@ -2,7 +2,6 @@
#define GRAPHICS_H
#include <SDL/SDL.h>
#include "defines.h"
-#include "hmap.h"
#ifdef PIX16
#define PIXELSIZE 2
@@ -26,6 +25,14 @@
#define PIXR(x) (((x)>>8)&0xFF)
#define PIXG(x) (((x)>>16)&0xFF)
#define PIXB(x) (((x)>>24))
+#elif defined(PIX32OGL)
+#define PIXPACK(x) (0xFF000000|((x)&0xFFFFFF))
+#define PIXRGB(r,g,b) (0xFF000000|((r)<<16)|((g)<<8)|((b)))// (((b)<<16)|((g)<<8)|(r))
+#define PIXRGBA(r,g,b,a) (((a)<<24)|((r)<<16)|((g)<<8)|((b)))// (((b)<<16)|((g)<<8)|(r))
+#define PIXA(x) (((x)>>24)&0xFF)
+#define PIXR(x) (((x)>>16)&0xFF)
+#define PIXG(x) (((x)>>8)&0xFF)
+#define PIXB(x) ((x)&0xFF)
#else
#define PIXPACK(x) (x)
#define PIXRGB(r,g,b) (((r)<<16)|((g)<<8)|(b))
@@ -54,6 +61,33 @@ extern unsigned char fire_b[YRES/CELL][XRES/CELL];
extern unsigned int fire_alpha[CELL*3][CELL*3];
extern pixel *pers_bg;
+extern char * flm_data;
+extern int flm_data_points;
+extern pixel flm_data_colours[];
+extern float flm_data_pos[];
+
+extern char * plasma_data;
+extern int plasma_data_points;
+extern pixel plasma_data_colours[];
+extern float plasma_data_pos[];
+
+struct gcache_item
+{
+ int isready;
+ int pixel_mode;
+ int colr, colg, colb;
+ int firea, firer, fireg, fireb;
+};
+typedef struct gcache_item gcache_item;
+
+gcache_item *graphicscache;
+
+int graphics_DEFAULT(GRAPHICS_FUNC_ARGS);
+
+void prepare_graphicscache();
+
+char * generate_gradient(pixel * colours, float * points, int pointcount, int size);
+
void draw_other(pixel *vid);
void draw_rgba_image(pixel *vid, unsigned char *data, int x, int y, float a);
@@ -138,6 +172,8 @@ void xor_rect(pixel *vid, int x, int y, int w, int h);
void blend_line(pixel *vid, int x1, int y1, int x2, int y2, int r, int g, int b, int a);
+void render_parts(pixel *vid);
+
void draw_parts(pixel *vid);
void draw_walls(pixel *vid);
@@ -178,10 +214,64 @@ int sdl_open(void);
int draw_debug_info(pixel* vid, int lm, int lx, int ly, int cx, int cy, int line_x, int line_y);
-#ifdef OpenGL
-void Enable2D ();
-void RenderScene ();
-void ClearScreen();
+#ifdef OGLR
+void clearScreen(float alpha);
+void ogl_blit(int x, int y, int w, int h, pixel *src, int pitch, int scale);
#endif
#endif
+
+#ifdef INCLUDE_SHADERS
+#ifndef SHADERS_H
+#define SHADERS_H
+const char * fireFragment = "uniform sampler2D fireAlpha;\
+void main () {\
+ vec4 texColor = texture2D(fireAlpha, gl_PointCoord);\
+ gl_FragColor = vec4(gl_Color.rgb, texColor.a*gl_Color.a);\
+}";
+const char * fireVertex = "void main(void)\
+{\
+ gl_Position = ftransform();;\
+ gl_FrontColor = gl_Color;\
+}";
+const char * lensFragment = "uniform sampler2D pTex;\
+uniform sampler2D tfX;\
+uniform sampler2D tfY;\
+uniform float xres = 612.0;\
+uniform float yres = 384.0;\
+void main () {\
+ vec4 transformX = texture2D(tfX, vec2(gl_TexCoord[0].s, -gl_TexCoord[0].t));\
+ vec4 transformY = -texture2D(tfY, vec2(gl_TexCoord[0].s, -gl_TexCoord[0].t));\
+ transformX.r /= xres;\
+ transformY.g /= yres;\
+ vec4 texColor = vec4(\
+ texture2D(pTex, gl_TexCoord[0].st-vec2(transformX.r*0.75, transformY.g*0.75)).r,\
+ texture2D(pTex, gl_TexCoord[0].st-vec2(transformX.r*0.875, transformY.g*0.875)).g,\
+ texture2D(pTex, gl_TexCoord[0].st-vec2(transformX.r, transformY.g)).b,\
+ 1.0\
+ );\
+ gl_FragColor = texColor;\
+}";
+const char * lensVertex = "void main(void)\
+{\
+ gl_TexCoord[0] = gl_MultiTexCoord0;\
+ gl_Position = ftransform();;\
+ gl_FrontColor = gl_Color;\
+}";
+const char * airFragment = "uniform sampler2D airX;\
+uniform sampler2D airY;\
+uniform sampler2D airP;\
+void main () {\
+ vec4 texX = texture2D(airX, gl_TexCoord[0].st);\
+ vec4 texY = texture2D(airY, gl_TexCoord[0].st);\
+ vec4 texP = texture2D(airP, gl_TexCoord[0].st);\
+ gl_FragColor = vec4(abs(texX.r)/2.0, texP.b/2.0, abs(texY.g)/2.0, 1.0);\
+}";
+const char * airVertex = "void main(void)\
+{\
+ gl_TexCoord[0] = gl_MultiTexCoord0;\
+ gl_Position = ftransform();;\
+ gl_FrontColor = gl_Color;\
+}";
+#endif
+#endif