22 #ifndef FREESCAPE_GFX_H 23 #define FREESCAPE_GFX_H 25 #include "common/hashmap.h" 26 #include "common/rendermode.h" 27 #include "common/rect.h" 29 #include "graphics/pixelformat.h" 30 #include "graphics/managed_surface.h" 31 #include "graphics/renderer.h" 32 #include "math/frustum.h" 33 #include "math/vector3d.h" 37 #define kVertexArraySize 128 38 #define kCoordsArraySize 4 49 Texture(){ _width = 0; _height = 0; };
67 bool _authenticGraphics;
69 virtual void init() = 0;
76 virtual void useColor(uint8 r, uint8 g, uint8 b) = 0;
77 virtual void depthTesting(
bool enabled) {};
78 virtual void polygonOffset(
bool enabled) = 0;
83 virtual void freeTexture(
Texture *texture) = 0;
86 virtual void renderSensorShoot(byte color,
const Math::Vector3d sensor,
const Math::Vector3d player,
const Common::Rect &viewPort) = 0;
87 virtual void renderPlayerShootBall(byte color,
const Common::Point &position,
int frame,
const Common::Rect &viewPort) = 0;
90 virtual void renderCrossair(
const Common::Point &crossairPosition) = 0;
98 void setColorRemaps(ColorReMap *colorRemaps);
99 virtual void clear(uint8 r, uint8 g, uint8 b,
bool ignoreViewport =
false) = 0;
100 virtual void drawFloor(uint8 color) = 0;
101 virtual void drawBackground(uint8 color);
103 void drawEclipse(uint8 color1, uint8 color2,
float difference);
104 virtual void drawSkybox(
Texture *texture, Math::Vector3d camera) {};
105 virtual void drawCelestialBody(Math::Vector3d position,
float radius, uint8 color) {};
111 void readFromPalette(uint8 index, uint8 &r, uint8 &g, uint8 &b);
112 void setPaletteValue(uint8 index, uint8 r, uint8 g, uint8 b);
113 uint8 indexFromColor(uint8 r, uint8 g, uint8 b);
114 uint8 mapEGAColor(uint8 index);
116 bool getRGBAt(uint8 index, uint8 ecolor, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
117 bool getRGBAtC64(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
118 bool getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
119 bool getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
120 bool getRGBAtEGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2);
121 bool getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
122 bool getRGBAtHercules(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
123 void extractCPCIndexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2);
124 void extractC64Indexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2);
126 void selectColorFromFourColorPalette(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1);
129 virtual void setStippleData(byte *data) {};
130 virtual void useStipple(
bool enabled) {};
131 void scaleStipplePattern(byte originalPattern[128], byte newPattern[128]);
133 byte _defaultStippleArray[128] = {
134 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
135 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
136 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
137 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
138 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
139 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
140 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
141 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
142 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
143 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
144 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
145 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
146 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
147 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
148 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
149 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
152 byte *_variableStippleArray;
154 float _skyNormals[16][3] = {
173 float _skyUvs1008[16][2] = {
195 float _skyUvs128[16][2] = {
217 float _skyVertices[16][3] = {
218 { -81280.0, 8128.0, 81280.0 },
219 { -81280.0, -8128.0, 81280.0 },
220 { 81280.0, -8128.0, 81280.0 },
221 { 81280.0, 8128.0, 81280.0 },
223 { 81280.0f, -8128.0f, -81280.0f },
224 { -81280.0f, -8128.0f, -81280.0f },
225 { -81280.0f, 8128.0f, -81280.0f },
226 { 81280.0f, 8128.0f, -81280.0f },
228 { -81280.0f, 8128.0f, 81280.0f },
229 { -81280.0f, 8128.0f, -81280.0f },
230 { -81280.0f, -8128.0f, -81280.0f },
231 { -81280.0f, -8128.0f, 81280.0f },
233 { 81280.0f, 8128.0f, -81280.0f },
234 { 81280.0f, 8128.0f, 81280.0f },
235 { 81280.0f, -8128.0f, 81280.0f },
236 { 81280.0f, -8128.0f, -81280.0f },
239 unsigned int _skyIndices[24] = {
254 void setColorMap(ColorMap *colorMap_);
256 ColorReMap *_colorRemaps;
257 void clearColorPairArray();
258 void fillColorPairArray();
263 int _underFireBackgroundColor;
265 byte _stipples[16][128];
275 virtual void positionCamera(
const Math::Vector3d &pos,
const Math::Vector3d &interest,
float rollAngle = 0.0f) = 0;
276 virtual void updateProjectionMatrix(
float fov,
float aspectRatio,
float nearClipPlane,
float farClipPlane) = 0;
278 Math::Matrix4 getMvpMatrix()
const {
return _mvpMatrix; }
286 bool computeScreenViewport();
293 Math::Matrix4 _projectionMatrix;
294 Math::Matrix4 _modelViewMatrix;
295 Math::Matrix4 _mvpMatrix;
297 Math::Frustum _frustum;
299 Math::Matrix4 makeProjectionMatrix(
float fov,
float nearClipPlane,
float farClipPlane)
const;
310 #endif // FREESCAPE_GFX_H Definition: managed_surface.h:51
virtual void flipBuffer()
Definition: gfx.h:75
RendererType
Definition: renderer.h:45
RenderMode
Definition: rendermode.h:48