summaryrefslogtreecommitdiff
path: root/src/graphics/Renderer.h
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-11-17 19:44:09 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-11-17 19:44:09 (GMT)
commit058a2edd75debbd0297f92572316daa704bd379f (patch)
treead303f091f9a08b209b91eb34a9fcad996a3de69 /src/graphics/Renderer.h
parente3594aba9e05c6865d396418c028049cda92c2f3 (diff)
parent7a21ae192fe19868539956f3fe28e62b2c7c4429 (diff)
downloadpowder-058a2edd75debbd0297f92572316daa704bd379f.zip
powder-058a2edd75debbd0297f92572316daa704bd379f.tar.gz
Merge branch 'master' of github.com:FacialTurd/PowderToypp
Diffstat (limited to 'src/graphics/Renderer.h')
-rw-r--r--src/graphics/Renderer.h184
1 files changed, 184 insertions, 0 deletions
diff --git a/src/graphics/Renderer.h b/src/graphics/Renderer.h
new file mode 100644
index 0000000..fa12a8c
--- /dev/null
+++ b/src/graphics/Renderer.h
@@ -0,0 +1,184 @@
+#ifndef RENDERER_H
+#define RENDERER_H
+
+#include <vector>
+#ifdef OGLR
+#include "OpenGLHeaders.h"
+#endif
+
+#include "Config.h"
+#include "client/Client.h"
+#include "Graphics.h"
+#include "interface/Point.h"
+#include "game/RenderPreset.h"
+
+class Simulation;
+
+class Graphics;
+
+struct gcache_item
+{
+ int isready;
+ int pixel_mode;
+ int cola, colr, colg, colb;
+ int firea, firer, fireg, fireb;
+ gcache_item() :
+ isready(0),
+ pixel_mode(0),
+ cola(0),
+ colr(0),
+ colg(0),
+ colb(0),
+ firea(0),
+ firer(0),
+ fireg(0),
+ fireb(0)
+ {
+ }
+};
+typedef struct gcache_item gcache_item;
+
+class Renderer
+{
+public:
+ std::vector<unsigned int> render_modes;
+ unsigned int render_mode;
+ unsigned int colour_mode;
+ std::vector<unsigned int> display_modes;
+ unsigned int display_mode;
+ RenderPreset * renderModePresets;
+ //
+ unsigned char fire_r[YRES/CELL][XRES/CELL];
+ unsigned char fire_g[YRES/CELL][XRES/CELL];
+ unsigned char fire_b[YRES/CELL][XRES/CELL];
+ unsigned int fire_alpha[CELL*3][CELL*3];
+ char * flm_data;
+ char * plasma_data;
+ //
+ bool gravityZonesEnabled;
+ bool gravityFieldEnabled;
+ int decorations_enable;
+ bool blackDecorations;
+ bool debugLines;
+ Simulation * sim;
+ Graphics * g;
+ gcache_item *graphicscache;
+
+ //Mouse position for debug information
+ int mousePosX, mousePosY;
+
+ //Zoom window
+ ui::Point zoomWindowPosition;
+ ui::Point zoomScopePosition;
+ int zoomScopeSize;
+ bool zoomEnabled;
+ int ZFACTOR;
+
+ //Renderers
+ void RenderBegin();
+ void RenderEnd();
+
+ void RenderZoom();
+ void DrawWalls();
+ void DrawSigns();
+ void render_gravlensing(pixel * source);
+ void render_fire();
+ void prepare_alpha(int size, float intensity);
+ void render_parts();
+ void draw_grav_zones();
+ void draw_air();
+ void draw_grav();
+ void draw_other();
+ void FinaliseParts();
+
+ void ClearAccumulation();
+ void clearScreen(float alpha);
+
+ //class SolidsRenderer;
+
+#ifdef OGLR
+ void checkShader(GLuint shader, char * shname);
+ void checkProgram(GLuint program, char * progname);
+ void loadShaders();
+ GLuint vidBuf,textTexture;
+ GLint prevFbo;
+#endif
+ pixel * vid;
+ pixel * persistentVid;
+ pixel * warpVid;
+ 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);
+
+ 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);
+
+ VideoBuffer DumpFrame();
+
+ void drawblob(int x, int y, unsigned char cr, unsigned char cg, unsigned char cb);
+
+ pixel GetPixel(int x, int y);
+ //...
+ //Display mode modifiers
+ void CompileDisplayMode();
+ void CompileRenderMode();
+ void AddRenderMode(unsigned int mode);
+ void SetRenderMode(std::vector<unsigned int> render);
+ std::vector<unsigned int> GetRenderMode();
+ void RemoveRenderMode(unsigned int mode);
+ void AddDisplayMode(unsigned int mode);
+ void RemoveDisplayMode(unsigned int mode);
+ void SetDisplayMode(std::vector<unsigned int> display);
+ std::vector<unsigned int> GetDisplayMode();
+ void SetColourMode(unsigned int mode);
+ unsigned int GetColourMode();
+
+ int GetGridSize() { return gridSize; }
+ void SetGridSize(int value) { gridSize = value; }
+
+ static VideoBuffer * WallIcon(int wallID, int width, int height);
+
+ Renderer(Graphics * g, Simulation * sim);
+ ~Renderer();
+
+private:
+ int gridSize;
+#ifdef OGLR
+ GLuint zoomTex, airBuf, fireAlpha, glowAlpha, blurAlpha, partsFboTex, partsFbo, partsTFX, partsTFY, airPV, airVY, airVX;
+ GLuint fireProg, airProg_Pressure, airProg_Velocity, airProg_Cracker, lensProg;
+ GLuint fireV[(YRES*XRES)*2];
+ GLfloat fireC[(YRES*XRES)*4];
+ GLuint smokeV[(YRES*XRES)*2];
+ GLfloat smokeC[(YRES*XRES)*4];
+ GLuint blobV[(YRES*XRES)*2];
+ GLfloat blobC[(YRES*XRES)*4];
+ GLuint blurV[(YRES*XRES)*2];
+ GLfloat blurC[(YRES*XRES)*4];
+ GLuint glowV[(YRES*XRES)*2];
+ GLfloat glowC[(YRES*XRES)*4];
+ GLuint flatV[(YRES*XRES)*2];
+ GLfloat flatC[(YRES*XRES)*4];
+ GLuint addV[(YRES*XRES)*2];
+ GLfloat addC[(YRES*XRES)*4];
+ GLfloat lineV[(((YRES*XRES)*2)*6)];
+ GLfloat lineC[(((YRES*XRES)*2)*6)];
+#endif
+};
+
+#endif