ScummVM API documentation
gfx_tinygl.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef FREESCAPE_GFX_TINYGL_H
23 #define FREESCAPE_GFX_TINYGL_H
24 
25 #include "math/vector3d.h"
26 #include "common/hashmap.h"
27 
28 #include "freescape/gfx.h"
29 #include "freescape/gfx_tinygl_texture.h"
30 
31 namespace Freescape {
32 
33 class TinyGLRenderer : public Renderer {
34 public:
35  TinyGLRenderer(int screenW, int screenH, Common::RenderMode renderMode);
36  virtual ~TinyGLRenderer();
37 
38  struct Vertex {
39  TGLfloat x;
40  TGLfloat y;
41  TGLfloat z;
42  };
43 
44  Vertex *_verts;
45  void copyToVertexArray(uint idx, const Math::Vector3d &src) {
46  assert(idx < kVertexArraySize);
47  _verts[idx].x = src.x();
48  _verts[idx].y = src.y();
49  _verts[idx].z = src.z();
50  }
51 
52  struct Coord {
53  TGLfloat x;
54  TGLfloat y;
55  };
56 
57  Coord *_texCoord;
58 
59  void copyToTexCoordArray(uint idx, float x, float y) {
60  assert(idx < kVertexArraySize);
61  _texCoord[idx].x = x;
62  _texCoord[idx].y = y;
63  }
64 
65  bool _stippleEnabled;
66  TinyGL3DTexture *_stippleTexture;
67  Common::HashMap<uint64, TinyGL3DTexture *> _stippleTextureCache;
68  uint32 _lastColorSet0;
69  uint32 _lastColorSet1;
70 
71  virtual void init() override;
72  virtual void clear(uint8 r, uint8 g, uint8 b, bool ignoreViewport = false) override;
73  virtual void setViewport(const Common::Rect &rect) override;
74  virtual void positionCamera(const Math::Vector3d &pos, const Math::Vector3d &interest, float rollAngle = 0.0f) override;
75  virtual void updateProjectionMatrix(float fov, float aspectRatio, float nearClipPlane, float farClipPlane) override;
76 
77  virtual void useColor(uint8 r, uint8 g, uint8 b) override;
78  virtual void polygonOffset(bool enabled) override;
79  virtual void depthTesting(bool enabled) override;
80  virtual void setStippleData(byte *data) override;
81  virtual void useStipple(bool enabled) override;
82 
83  Texture *createTexture(const Graphics::Surface *surface, bool is3D = false) override;
84  void freeTexture(Texture *texture) override;
85  virtual void drawTexturedRect2D(const Common::Rect &screenRect, const Common::Rect &textureRect, Texture *texture) override;
86  void drawSkybox(Texture *texture, Math::Vector3d camera) override;
87  void drawThunder(Texture *texture, Math::Vector3d camera, float size) override;
88 
89  virtual void renderSensorShoot(byte color, const Math::Vector3d sensor, const Math::Vector3d player, const Common::Rect &viewPort) override;
90  virtual void renderPlayerShootBall(byte color, const Common::Point &position, int frame, const Common::Rect &viewPort) override;
91  virtual void renderPlayerShootRay(byte color, const Common::Point &position, const Common::Rect &viewPort) override;
92  virtual void renderCrossair(const Common::Point &crossairPosition) override;
93 
94  virtual void renderFace(const Common::Array<Math::Vector3d> &vertices) override;
95 
96  void drawCelestialBody(Math::Vector3d position, float radius, byte color) override;
97 
98  virtual void flipBuffer() override;
99  virtual void drawFloor(uint8 color) override;
100  virtual Graphics::Surface *getScreenshot() override;
101 
102  byte _defaultStippleArray[128] = {
103  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
104  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
105  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
106  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
107  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
108  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
109  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
110  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
111  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
112  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
113  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
114  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
115  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
116  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
117  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
118  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
119  };
120 
121 };
122 
123 } // End of namespace Freescape
124 
125 #endif // FREESCAPE_GFX_TINYGL_H
Definition: surface.h:67
Definition: area.h:36
virtual void flipBuffer() override
Definition: gfx_tinygl.h:38
RenderMode
Definition: rendermode.h:48
Definition: rect.h:524
Definition: gfx.h:60
Definition: hashmap.h:85
Definition: rect.h:144
Definition: gfx_tinygl_texture.h:49
virtual void positionCamera(const Math::Vector3d &pos, const Math::Vector3d &interest, float rollAngle=0.0f) override
Definition: gfx_tinygl.h:33
Definition: gfx_tinygl.h:52
Definition: gfx.h:47