diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-06 15:06:26 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-06 15:06:26 (GMT) |
| commit | adc9cc08167946927fa21f86d70ce0a0b9630baa (patch) | |
| tree | 009ec84f4398cac18d89283bc6d80193085b39af /src/graphics/Graphics.h | |
| parent | 94c9603d0ce7597cfe987bf211610ca7d325ddaa (diff) | |
| download | powder-adc9cc08167946927fa21f86d70ce0a0b9630baa.zip powder-adc9cc08167946927fa21f86d70ce0a0b9630baa.tar.gz | |
Move graphics into seperate folder
Diffstat (limited to 'src/graphics/Graphics.h')
| -rw-r--r-- | src/graphics/Graphics.h | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/graphics/Graphics.h b/src/graphics/Graphics.h new file mode 100644 index 0000000..1209b86 --- /dev/null +++ b/src/graphics/Graphics.h @@ -0,0 +1,166 @@ +#ifndef GRAPHICS_H +#define GRAPHICS_H + +#include <string> +#include <cstdlib> +#include <cstring> +#if defined(OGLI) +#include "OpenGLHeaders.h" +#endif +#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 + +//Icon names, see Graphics::draw_icon +enum Icon +{ + NoIcon = 0, + IconOpen, + IconReload, + IconSave, + IconVoteUp, + IconVoteDown, + IconTag, + IconNew, + IconLogin, + IconRenderSettings, + IconSimulationSettings, + IconPause, + IconVoteSort, + IconDateSort, + IconFavourite, + IconFolder, + IconSearch, + IconDelete, + IconReport, + IconUsername, + IconPassword, + IconClose +}; + +//"Graphics lite" - slightly lower performance due to variable size, +class VideoBuffer +{ +public: + pixel * Buffer; + int Width, Height; + + VideoBuffer(int width, int height): Width(width), Height(height), Buffer((pixel*)calloc(width*height, PIXELSIZE)) { }; + void BlendPixel(int x, int y, int r, int g, int b, int a); + void AddPixel(int x, int y, int r, int g, int b, int a); + void SetPixel(int x, int y, int r, int g, int b, int a); + int BlendCharacter(int x, int y, int c, int r, int g, int b, int a); + int AddCharacter(int x, int y, int c, int r, int g, int b, int a); + int SetCharacter(int x, int y, int c, int r, int g, int b, int a); + ~VideoBuffer() { free(Buffer); }; +}; + +class Graphics +{ +public: + pixel *vid; + int sdl_scale; +#ifdef OGLI + //OpenGL specific instance variables + GLuint vidBuf, textTexture; + void Reset(); + #endif + + //Common graphics methods in Graphics.cpp + static char * GenerateGradient(pixel * colours, float * points, int pointcount, int size); + + //PTIF methods + 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); + static pixel *render_packed_rgb(void *image, int width, int height, int cmp_size); + + //Font/text metrics + static int CharIndexAtPosition(char *s, int positionX, int positionY); + static int PositionAtCharIndex(char *s, int charIndex, int & positionX, int & positionY); + 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); + static int textwidth(const char *s); + static void textsize(const char * s, int & width, int & height); + + void blendpixel(int x, int y, int r, int g, int b, int a); + void addpixel(int x, int y, int r, int g, int b, int a); + + void draw_icon(int x, int y, Icon icon); + + void Clear(); + void Finalise(); + // + int drawtext(int x, int y, const char *s, 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 drawchar(int x, int y, int c, int r, int g, int b, int a); + int addchar(int x, int y, int c, int r, int g, int b, int a); + + void xor_pixel(int x, int y); + void xor_line(int x, int y, int x2, int y2); + void xor_rect(int x, int y, int width, int height); + void xor_bitmap(unsigned char * bitmap, int x, int y, int w, int h); + + void draw_line(int x, int y, int x2, int y2, int r, int g, int b, int a); + void drawrect(int x, int y, int width, int height, int r, int g, int b, int a); + void fillrect(int x, int y, int width, int height, int r, int g, int b, int a); + void clearrect(int x, int y, int width, int height); + void gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2); + + void draw_image(pixel *img, int x, int y, int w, int h, int a); + + Graphics(); + ~Graphics(); +}; + +#endif |
