~ubuntu-branches/ubuntu/raring/scummvm/raring

« back to all changes in this revision

Viewing changes to engines/gob/video.h

  • Committer: Bazaar Package Importer
  • Author(s): Moritz Muehlenhoff
  • Date: 2011-05-25 19:02:23 UTC
  • mto: (21.1.2 sid)
  • mto: This revision was merged to the branch mainline in revision 24.
  • Revision ID: james.westby@ubuntu.com-20110525190223-fiqm0oaec714xk31
Tags: upstream-1.3.0
ImportĀ upstreamĀ versionĀ 1.3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 * along with this program; if not, write to the Free Software
19
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
20
 *
21
 
 * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/tags/release-1-2-1/engines/gob/video.h $
22
 
 * $Id: video.h 42277 2009-07-09 02:54:10Z drmccoy $
 
21
 * $URL$
 
22
 * $Id$
23
23
 *
24
24
 */
25
25
 
31
31
#include "common/ptr.h"
32
32
 
33
33
#include "gob/gob.h"
34
 
 
35
 
namespace Graphics {
36
 
        class PaletteLUT;
37
 
}
 
34
#include "gob/surface.h"
38
35
 
39
36
namespace Gob {
40
37
 
41
38
class Font {
42
39
public:
 
40
        Font(const byte *data);
 
41
        ~Font();
 
42
 
43
43
        uint8  getCharWidth (uint8 c) const;
44
44
        uint8  getCharWidth ()        const;
45
45
        uint8  getCharHeight()        const;
46
 
        uint16 getCharCount ()        const;
47
 
        uint8  getFirstChar ()        const;
48
 
        uint8  getLastChar  ()        const;
49
 
        uint8  getCharSize  ()        const;
50
46
 
51
47
        bool isMonospaced() const;
52
48
 
53
 
        const byte *getCharData(uint8 c) const;
54
 
 
55
 
        Font(const byte *data);
56
 
        ~Font();
 
49
        void drawLetter(Surface &surf, uint8 c, uint16 x, uint16 y,
 
50
                        uint32 color1, uint32 color2, bool transp) const;
57
51
 
58
52
private:
59
53
        const byte *_dataPtr;
64
58
        int8   _itemHeight;
65
59
        uint8  _startItem;
66
60
        uint8  _endItem;
67
 
        int8   _itemSize;
 
61
        uint8  _itemSize;
68
62
        int8   _bitWidth;
69
 
};
70
 
 
71
 
// Some Surfaces are simultaneous in Draw::spritesArray and discrete
72
 
// variables, so if in doubt you should use a SurfaceDescPtr shared
73
 
// pointer object to refer to any SurfaceDesc.
74
 
class SurfaceDesc {
75
 
public:
76
 
        int16 _vidMode;
77
 
 
78
 
        int16 getWidth() const { return _width; }
79
 
        int16 getHeight() const { return _height; }
80
 
        byte *getVidMem() { return _vidMem; }
81
 
        const byte *getVidMem() const { return _vidMem; }
82
 
        bool hasOwnVidMem() const { return _ownVidMem; }
83
 
 
84
 
        void setVidMem(byte *vidMem);
85
 
        void resize(int16 width, int16 height);
86
 
        void swap(SurfaceDesc &surf);
87
 
 
88
 
        SurfaceDesc(int16 vidMode, int16 width, int16 height, byte *vidMem = 0);
89
 
        ~SurfaceDesc() { if (_ownVidMem) delete[] _vidMem; }
90
 
 
91
 
private:
92
 
        int16 _width;
93
 
        int16 _height;
94
 
        byte *_vidMem;
95
 
        bool _ownVidMem;
96
 
};
97
 
 
98
 
typedef Common::SharedPtr<SurfaceDesc> SurfaceDescPtr;
99
 
 
 
63
 
 
64
        uint16 getCharCount() const;
 
65
        const byte *getCharData(uint8 c) const;
 
66
};
100
67
 
101
68
class Video {
102
69
public:
103
 
#define GDR_VERSION     4
 
70
#define GDR_VERSION 4
104
71
 
105
 
#define PRIMARY_SURFACE         0x80
106
 
#define RETURN_PRIMARY          0x01
107
 
#define DISABLE_SPR_ALLOC       0x20
108
 
#define SCUMMVM_CURSOR          0x100
 
72
#define PRIMARY_SURFACE   0x80
 
73
#define RETURN_PRIMARY    0x01
 
74
#define DISABLE_SPR_ALLOC 0x20
 
75
#define SCUMMVM_CURSOR    0x100
109
76
 
110
77
#include "common/pack-start.h"  // START STRUCT PACKING
111
78
 
132
99
        int16 _scrollOffsetX;
133
100
        int16 _scrollOffsetY;
134
101
 
135
 
        SurfaceDescPtr _splitSurf;
 
102
        SurfacePtr _splitSurf;
136
103
        int16 _splitHeight1;
137
104
        int16 _splitHeight2;
138
105
        int16 _splitStart;
140
107
        int16 _screenDeltaX;
141
108
        int16 _screenDeltaY;
142
109
 
143
 
        Graphics::PaletteLUT *_palLUT;
144
 
 
145
 
        void freeDriver();
146
110
        void initPrimary(int16 mode);
147
 
        SurfaceDescPtr initSurfDesc(int16 vidMode, int16 width,
148
 
                        int16 height, int16 flags);
 
111
        SurfacePtr initSurfDesc(int16 width, int16 height, int16 flags = 0);
149
112
 
150
113
        void setSize(bool defaultTo1XScaler);
151
114
 
154
117
        void waitRetrace(bool mouse = true);
155
118
        void sparseRetrace(int max);
156
119
 
157
 
        void putPixel(int16 x, int16 y, int16 color, SurfaceDesc &dest);
158
 
        virtual void fillRect(SurfaceDesc &dest, int16 left, int16 top,
159
 
                        int16 right, int16 bottom, int16 color);
160
 
        void drawLine(SurfaceDesc &dest, int16 x0, int16 y0, int16 x1, int16 y1,
161
 
                                  int16 color);
162
 
        void drawCircle(SurfaceDesc &dest, int16 x0, int16 y0,
163
 
                        int16 radius, int16 color);
164
 
        void clearSurf(SurfaceDesc &dest);
165
 
        void drawSprite(SurfaceDesc &source, SurfaceDesc &dest,
166
 
                        int16 left, int16 top, int16 right, int16 bottom,
167
 
                        int16 x, int16 y, int16 transp);
168
 
        void drawSpriteDouble(SurfaceDesc &source, SurfaceDesc &dest,
169
 
            int16 left, int16 top, int16 right, int16 bottom, int16 x, int16 y, int16 transp);
170
 
        void drawLetter(int16 item, int16 x, int16 y, const Font &font,
171
 
                        int16 color1, int16 color2, int16 transp, SurfaceDesc &dest);
172
120
        void drawPackedSprite(byte *sprBuf, int16 width, int16 height,
173
 
                        int16 x, int16 y, int16 transp, SurfaceDesc &dest);
174
 
        void drawPackedSprite(const char *path, SurfaceDesc &dest,
175
 
                        int width = 320);
 
121
                        int16 x, int16 y, int16 transp, Surface &dest);
 
122
        void drawPackedSprite(const char *path, Surface &dest, int width = 320);
176
123
 
177
124
        void setPalColor(byte *pal, byte red, byte green, byte blue) {
178
125
                pal[0] = red << 2;
179
126
                pal[1] = green << 2;
180
127
                pal[2] = blue << 2;
181
 
                pal[3] = 0;
182
128
        }
183
129
        void setPalColor(byte *pal, Color &color) {
184
130
                setPalColor(pal, color.red, color.green, color.blue);
196
142
 
197
143
        virtual char spriteUncompressor(byte *sprBuf, int16 srcWidth,
198
144
                        int16 srcHeight, int16 x, int16 y, int16 transp,
199
 
                        SurfaceDesc &destDesc) = 0;
200
 
 
201
 
        virtual void init() {}
202
 
 
203
 
        virtual void setPrePalette() { }
 
145
                        Surface &destDesc) = 0;
204
146
 
205
147
        Video(class GobEngine *vm);
206
148
        virtual ~Video();
207
149
 
208
150
protected:
209
 
        class VideoDriver *_videoDriver;
210
 
 
211
151
        bool _dirtyAll;
212
152
        Common::List<Common::Rect> _dirtyRects;
213
153
 
216
156
 
217
157
        GobEngine *_vm;
218
158
 
219
 
        char initDriver(int16 vidMode);
220
 
 
221
 
        void initOSD();
222
 
        void drawOSDText(const char *text);
 
159
        void drawPacked(byte *sprBuf, int16 width, int16 height, int16 x, int16 y, byte transp, Surface &dest);
223
160
};
224
161
 
225
162
class Video_v1 : public Video {
226
163
public:
227
164
        virtual char spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
228
 
                        int16 x, int16 y, int16 transp, SurfaceDesc &destDesc);
 
165
                        int16 x, int16 y, int16 transp, Surface &destDesc);
229
166
 
230
167
        Video_v1(GobEngine *vm);
231
168
        virtual ~Video_v1() {}
234
171
class Video_v2 : public Video_v1 {
235
172
public:
236
173
        virtual char spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
237
 
                        int16 x, int16 y, int16 transp, SurfaceDesc &destDesc);
 
174
                        int16 x, int16 y, int16 transp, Surface &destDesc);
238
175
 
239
176
        Video_v2(GobEngine *vm);
240
177
        virtual ~Video_v2() {}
243
180
class Video_v6 : public Video_v2 {
244
181
public:
245
182
        virtual char spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
246
 
                        int16 x, int16 y, int16 transp, SurfaceDesc &destDesc);
247
 
 
248
 
        virtual void fillRect(SurfaceDesc &dest, int16 left, int16 top,
249
 
                        int16 right, int16 bottom, int16 color);
250
 
 
251
 
        virtual void init();
252
 
 
253
 
        virtual void setPrePalette();
 
183
                        int16 x, int16 y, int16 transp, Surface &destDesc);
254
184
 
255
185
        Video_v6(GobEngine *vm);
256
186
        virtual ~Video_v6() {}
257
187
 
258
188
private:
259
 
        static const byte _ditherPalette[768];
260
 
 
261
 
        void buildPalLUT();
262
 
 
263
 
        void shadeRect(SurfaceDesc &dest,
264
 
                        int16 left, int16 top, int16 right, int16 bottom, byte color, byte strength);
265
 
 
266
 
        void drawPacked(const byte *sprBuf, int16 x, int16 y, SurfaceDesc &surfDesc);
267
 
        void drawYUVData(const byte *srcData, SurfaceDesc &destDesc,
 
189
        void drawPacked(const byte *sprBuf, int16 x, int16 y, Surface &surfDesc);
 
190
        void drawYUVData(const byte *srcData, Surface &destDesc,
268
191
                        int16 width, int16 height, int16 x, int16 y);
269
 
        void drawYUV(SurfaceDesc &destDesc, int16 x, int16 y,
 
192
        void drawYUV(Surface &destDesc, int16 x, int16 y,
270
193
                        int16 dataWidth, int16 dataHeight, int16 width, int16 height,
271
194
                        const byte *dataY, const byte *dataU, const byte *dataV);
272
195
};
273
196
 
274
 
class VideoDriver {
275
 
public:
276
 
        VideoDriver() {}
277
 
        virtual ~VideoDriver() {}
278
 
        virtual void drawSprite(SurfaceDesc &source, SurfaceDesc &dest, int16 left, int16 top, int16 right, int16 bottom, int16 x, int16 y, int16 transp) = 0;
279
 
        virtual void drawSpriteDouble(SurfaceDesc &source, SurfaceDesc &dest, int16 left, int16 top, int16 right, int16 bottom, int16 x, int16 y, int16 transp) = 0;
280
 
        virtual void fillRect(SurfaceDesc &dest, int16 left, int16 top, int16 right, int16 bottom, byte color) = 0;
281
 
        virtual void putPixel(int16 x, int16 y, byte color, SurfaceDesc &dest) = 0;
282
 
        virtual void drawLetter(unsigned char item, int16 x, int16 y, const Font &font, byte color1, byte color2, byte transp, SurfaceDesc &dest) = 0;
283
 
        virtual void drawLine(SurfaceDesc &dest, int16 x0, int16 y0, int16 x1, int16 y1, byte color) = 0;
284
 
        virtual void drawPackedSprite(byte *sprBuf, int16 width, int16 height, int16 x, int16 y, byte transp, SurfaceDesc &dest) = 0;
285
 
};
286
 
 
287
197
} // End of namespace Gob
288
198
 
289
199
#endif // GOB_VIDEO_H