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; };
69 bool _authenticGraphics;
71 virtual void init() = 0;
78 virtual void useColor(uint8 r, uint8 g, uint8 b) = 0;
79 virtual void depthTesting(
bool enabled) {};
80 virtual void polygonOffset(
bool enabled) = 0;
85 virtual void freeTexture(
Texture *texture) = 0;
88 virtual void renderSensorShoot(byte color,
const Math::Vector3d sensor,
const Math::Vector3d player,
const Common::Rect viewPort) = 0;
92 virtual void renderCrossair(
const Common::Point crossairPosition) = 0;
100 void setColorRemaps(ColorReMap *colorRemaps);
101 virtual void clear(uint8 r, uint8 g, uint8 b,
bool ignoreViewport =
false) = 0;
102 virtual void drawFloor(uint8 color) = 0;
103 virtual void drawBackground(uint8 color);
105 void drawEclipse(uint8 color1, uint8 color2,
float difference);
106 virtual void drawSkybox(
Texture *texture, Math::Vector3d camera) {};
107 virtual void drawCelestialBody(Math::Vector3d position,
float radius, uint8 color) {};
113 void readFromPalette(uint8 index, uint8 &r, uint8 &g, uint8 &b);
114 void setPaletteValue(uint8 index, uint8 r, uint8 g, uint8 b);
115 uint8 indexFromColor(uint8 r, uint8 g, uint8 b);
116 uint8 mapEGAColor(uint8 index);
118 bool getRGBAt(uint8 index, uint8 ecolor, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
119 bool getRGBAtC64(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
120 bool getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
121 bool getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
122 bool getRGBAtEGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2);
123 bool getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
124 bool getRGBAtHercules(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
125 void extractCPCIndexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2);
126 void extractC64Indexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2);
128 void selectColorFromFourColorPalette(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1);
131 virtual void setStippleData(byte *data) {};
132 virtual void useStipple(
bool enabled) {};
133 void scaleStipplePattern(byte originalPattern[128], byte newPattern[128]);
135 byte _defaultStippleArray[128] = {
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,
150 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
151 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
154 byte *_variableStippleArray;
156 float _skyNormals[16][3] = {
175 float _skyUvs1008[16][2] = {
197 float _skyUvs128[16][2] = {
219 float _skyVertices[16][3] = {
220 { -81280.0, 8128.0, 81280.0 },
221 { -81280.0, -8128.0, 81280.0 },
222 { 81280.0, -8128.0, 81280.0 },
223 { 81280.0, 8128.0, 81280.0 },
225 { 81280.0f, -8128.0f, -81280.0f },
226 { -81280.0f, -8128.0f, -81280.0f },
227 { -81280.0f, 8128.0f, -81280.0f },
228 { 81280.0f, 8128.0f, -81280.0f },
230 { -81280.0f, 8128.0f, 81280.0f },
231 { -81280.0f, 8128.0f, -81280.0f },
232 { -81280.0f, -8128.0f, -81280.0f },
233 { -81280.0f, -8128.0f, 81280.0f },
235 { 81280.0f, 8128.0f, -81280.0f },
236 { 81280.0f, 8128.0f, 81280.0f },
237 { 81280.0f, -8128.0f, 81280.0f },
238 { 81280.0f, -8128.0f, -81280.0f },
241 unsigned int _skyIndices[24] = {
256 void setColorMap(ColorMap *colorMap_);
258 ColorReMap *_colorRemaps;
259 void clearColorPairArray();
260 void fillColorPairArray();
265 int _underFireBackgroundColor;
267 byte _stipples[16][128];
277 virtual void positionCamera(
const Math::Vector3d &pos,
const Math::Vector3d &interest) = 0;
278 virtual void updateProjectionMatrix(
float fov,
float aspectRatio,
float nearClipPlane,
float farClipPlane) = 0;
280 Math::Matrix4 getMvpMatrix()
const {
return _mvpMatrix; }
288 bool computeScreenViewport();
295 Math::Matrix4 _projectionMatrix;
296 Math::Matrix4 _modelViewMatrix;
297 Math::Matrix4 _mvpMatrix;
299 Math::Frustum _frustum;
301 Math::Matrix4 makeProjectionMatrix(
float fov,
float nearClipPlane,
float farClipPlane)
const;
312 #endif // FREESCAPE_GFX_H Definition: managed_surface.h:51
virtual void flipBuffer()
Definition: gfx.h:77
RendererType
Definition: renderer.h:45
RenderMode
Definition: rendermode.h:48