summaryrefslogtreecommitdiff
path: root/src/Renderer.h
blob: bc9190367e35ec197bca87d3e19b5ee8e1d483dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef RENDERER_H
#define RENDERER_H

#include <vector>
#if defined(OGLR)
#ifdef MACOSX
#include <OpenGL/gl3.h>
#include <OpenGL/glu.h>
#elif defined(WIN32)
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#else
//#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#endif
#endif

#include "Config.h"
#include "client/Client.h"
#include "simulation/Simulation.h"
#include "Graphics.h"
#include "interface/Point.h"

class Simulation;

class Graphics;

struct gcache_item
{
	int isready;
	int pixel_mode;
	int cola, colr, colg, colb;
	int firea, firer, fireg, fireb;
};
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;
	//
	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;
	int emp_decor;
	//
	int decorations_enable;
	Simulation * sim;
	Graphics * g;
	gcache_item *graphicscache;

	//Zoom window
	ui::Point zoomWindowPosition;
	ui::Point zoomScopePosition;
	int zoomScopeSize;
	bool zoomEnabled;
	int ZFACTOR;

	//Renderers
	void RenderZoom();
	void DrawWalls();
	void DrawSigns();
	void render_gravlensing();
	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 clearScreen(float alpha);

	//class SolidsRenderer;

#ifdef OGLR
	void checkShader(GLuint shader, char * shname);
	void checkProgram(GLuint program, char * progname);
	void loadShaders();
#endif

	void drawblob(int x, int y, unsigned char cr, unsigned char cg, unsigned char cb);
	//...
	void get_sign_pos(int i, int *x0, int *y0, int *w, int *h);

	//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();

	Renderer(Graphics * g, Simulation * sim);
	~Renderer();

private:
#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