summaryrefslogtreecommitdiff
path: root/src/Graphics.h
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-17 20:46:06 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-17 20:46:06 (GMT)
commit4a60b97c700c2f1843b7e99313554cb89fb5da4e (patch)
tree3b33ef6f74a4e8a4ff5968a81b9c4c429ccaa7c6 /src/Graphics.h
parent6273089bf486bf46ad325d72c7290ebb272bd3d8 (diff)
downloadpowder-4a60b97c700c2f1843b7e99313554cb89fb5da4e.zip
powder-4a60b97c700c2f1843b7e99313554cb89fb5da4e.tar.gz
Some minor changes
Diffstat (limited to 'src/Graphics.h')
-rw-r--r--src/Graphics.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/Graphics.h b/src/Graphics.h
new file mode 100644
index 0000000..6cd5b36
--- /dev/null
+++ b/src/Graphics.h
@@ -0,0 +1,172 @@
+#ifndef GRAPHICS_H
+#define GRAPHICS_H
+
+#include <SDL/SDL.h>
+#include <string>
+#include "Config.h"
+//#include "powder.h"
+
+#ifdef PIX16
+#define PIXELSIZE 2
+#define PIXPACK(x) ((((x)>>8)&0xF800)|(((x)>>5)&0x07E0)|(((x)>>3)&0x001F))
+#define PIXRGB(r,g,b) ((((r)<<8)&0xF800)|(((g)<<3)&0x07E0)|(((b)>>3)&0x001F))
+#define PIXR(x) (((x)>>8)&0xF8)
+#define PIXG(x) (((x)>>3)&0xFC)
+#define PIXB(x) (((x)<<3)&0xF8)
+#else
+#define PIXELSIZE 4
+#ifdef PIX32BGR
+#define PIXPACK(x) ((((x)>>16)&0x0000FF)|((x)&0x00FF00)|(((x)<<16)&0xFF0000))
+#define PIXRGB(r,g,b) (((b)<<16)|((g)<<8)|((r)))// (((b)<<16)|((g)<<8)|(r))
+#define PIXR(x) ((x)&0xFF)
+#define PIXG(x) (((x)>>8)&0xFF)
+#define PIXB(x) ((x)>>16)
+#else
+#ifdef PIX32BGRA
+#define PIXPACK(x) ((((x)>>8)&0x0000FF00)|(((x)<<8)&0x00FF0000)|(((x)<<24)&0xFF000000))
+#define PIXRGB(r,g,b) (((b)<<24)|((g)<<16)|((r)<<8))
+#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))
+#define PIXR(x) ((x)>>16)
+#define PIXG(x) (((x)>>8)&0xFF)
+#define PIXB(x) ((x)&0xFF)
+#endif
+#endif
+#endif
+
+#ifdef PIX16
+typedef unsigned short pixel;
+#else
+typedef unsigned int pixel;
+#endif
+
+/*extern int emp_decor;
+
+extern unsigned int *render_modes;
+extern unsigned int render_mode;
+extern unsigned int colour_mode;
+extern unsigned int *display_modes;
+extern unsigned int display_mode;
+
+extern SDL_Surface *sdl_scrn;
+extern int sdl_scale;
+
+extern int sandcolour_r;
+extern int sandcolour_g;
+extern int sandcolour_b;
+extern int sandcolour_frame;
+
+extern unsigned char fire_r[YRES/CELL][XRES/CELL];
+extern unsigned char fire_g[YRES/CELL][XRES/CELL];
+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[];*/
+
+class Graphics
+{
+public:
+ SDL_Surface * sdl_scrn;
+ pixel *vid;
+ pixel *render_packed_rgb(void *image, int width, int height, int cmp_size);
+ static char * generate_gradient(pixel * colours, float * points, int pointcount, int size);
+ void draw_other();
+ void draw_rgba_image(unsigned char *data, int x, int y, float a);
+ static void *ptif_pack(pixel *src, int w, int h, int *result_size);
+ static pixel *ptif_unpack(void *datain, int size, int *w, int *h);
+ static pixel *resample_img_nn(pixel *src, int sw, int sh, int rw, int rh);
+ static pixel *resample_img(pixel *src, int sw, int sh, int rw, int rh);
+ static pixel *rescale_img(pixel *src, int sw, int sh, int *qw, int *qh, int f);
+ //void render_gravlensing(pixel *src, pixel * dst);
+ //void sdl_blit_1(int x, int y, int w, int h, pixel *src, int pitch);
+ //void sdl_blit_2(int x, int y, int w, int h, pixel *src, int pitch);
+ //void sdl_blit(int x, int y, int w, int h, pixel *src, int pitch);
+ void drawblob(int x, int y, unsigned char cr, unsigned char cg, unsigned char cb);
+ void draw_tool(int b, int sl, int sr, unsigned pc, unsigned iswall);
+ //int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc);
+ //void draw_menu(pixel *vid_buf, int i, int hover);
+ void drawpixel(int x, int y, int r, int g, int b, int a);
+ int addchar(int x, int y, int c, int r, int g, int b, int a);
+ int drawchar(int x, int y, int c, int r, int g, int b, int a);
+ int drawtext(int x, int y, std::string &s, int r, int g, int b, int a);
+ int drawtext(int x, int y, const char *s, int r, int g, int b, int a);
+ int drawtext_outline(int x, int y, const char *s, int r, int g, int b, int a, int olr, int olg, int olb, int ola);
+ int drawtextwrap(int x, int y, int w, const char *s, int r, int g, int b, int a);
+ void drawrect(int x, int y, int w, int h, int r, int g, int b, int a);
+ void fillrect(int x, int y, int w, int h, int r, int g, int b, int a);
+ void clearrect(int x, int y, int w, int h);
+ void drawdots(int x, int y, int h, int r, int g, int b, int a);
+ static int textwidth(char *s);
+ int drawtextmax(int x, int y, int w, char *s, int r, int g, int b, int a);
+ static int textnwidth(char *s, int n);
+ static void textnpos(char *s, int n, int w, int *cx, int *cy);
+ static int textwidthx(char *s, int w);
+ static int textposxy(char *s, int width, int w, int h);
+ static int textwrapheight(char *s, int width);
+ void blendpixel(int x, int y, int r, int g, int b, int a);
+ void draw_icon(int x, int y, char ch, int flag);
+ //void draw_air();
+ //void draw_grav_zones(pixel *vid);
+ //void draw_grav(pixel *vid);
+ void draw_line(int x1, int y1, int x2, int y2, int r, int g, int b, int a);
+ void addpixel(int x, int y, int r, int g, int b, int a);
+ void xor_pixel(int x, int y);
+ void xor_line(int x1, int y1, int x2, int y2);
+ void xor_rect(int x, int y, int w, int h);
+ void blend_line(int x1, int y1, int x2, int y2, int r, int g, int b, int a);
+ //void render_parts(pixel *vid);
+// #ifdef OGLR
+// void draw_parts_fbo();
+// #endif
+// void draw_parts();
+// void draw_walls(pixel *vid);
+// void create_decorations(int x, int y, int rx, int ry, int r, int g, int b, int click, int tool);
+// void create_decoration(int x, int y, int r, int g, int b, int click, int tool);
+// void line_decorations(int x1, int y1, int x2, int y2, int rx, int ry, int r, int g, int b, int click, int tool);
+// void box_decorations(int x1, int y1, int x2, int y2, int r, int g, int b, int click, int tool);
+// void draw_color_menu(pixel *vid_buf, int i, int hover);
+ void draw_wavelengths(int x, int y, int h, int wl);
+ void render_signs();
+// void render_fire(pixel *dst);
+// void prepare_alpha(int size, float intensity);
+ void draw_image(pixel *img, int x, int y, int w, int h, int a);
+ static void dim_copy(pixel *dst, pixel *src);
+ static void dim_copy_pers(pixel *dst, pixel *src);
+ //void render_zoom(pixel *img);
+ //int render_thumb(void *thumb, int size, int bzip2, pixel *vid_buf, int px, int py, int scl);
+ //void render_cursor(pixel *vid, int x, int y, int t, int rx, int ry);
+ //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);
+ void Clear();
+ void Blit();
+ void AttachSDLSurface(SDL_Surface * surface);
+ #ifdef OGLR
+ void clearScreen(float alpha);
+ void ogl_blit(int x, int y, int w, int h, pixel *src, int pitch, int scale);
+ #endif
+ Graphics();
+};
+
+#endif