ScummVM API documentation
screen.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#ifndef DRAGONS_SCREEN_H
22#define DRAGONS_SCREEN_H
23
24#include "graphics/surface.h"
25#include "graphics/pixelformat.h"
26#include "common/scummsys.h"
27#include "common/rect.h"
28
29namespace Dragons {
30#define DRAGONS_NUM_PALETTES 5
31#define DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE 256
32
33#define DRAGONS_SCREEN_WIDTH 320
34#define DRAGONS_SCREEN_HEIGHT 200
35
36#define DRAGONS_NUM_FLAT_QUADS 0xf
37
38#ifdef SCUMM_BIG_ENDIAN
39 #define WRITE_SCREEN WRITE_BE_UINT16
40 #define READ_SCREEN READ_BE_INT16
41#else
42 #define WRITE_SCREEN WRITE_LE_UINT16
43 #define READ_SCREEN READ_LE_INT16
44#endif
45
46enum AlphaBlendMode {
47 NONE,
48 NORMAL, // 50% x Back + 50% x Sprite
49 ADDITIVE, // 100% x Back + 100% x Sprite
50 ADDITIVE_50, // 100% x Back + 50% x Sprite
51 SUBTRACTIVE // 100% x Back - 100% x Sprite
52};
53
54struct FlatQuad {
55 uint16 flags;
56 uint16 priorityLayer;
57 Common::Point points[4];
58 uint16 colour;
59
60 FlatQuad() {
61 flags = 0;
62 priorityLayer = 0;
63 colour = 0;
64 }
65};
66
67class Screen {
68private:
69 Graphics::PixelFormat _pixelFormat;
70 Graphics::Surface *_backSurface;
71 byte _palettes[DRAGONS_NUM_PALETTES][512];
72 Common::Point _screenShakeOffset;
73 FlatQuad _flatQuads[DRAGONS_NUM_FLAT_QUADS];
74public:
75 virtual ~Screen();
76
77 Screen();
78
79 Graphics::PixelFormat getPixelFormat() { return _pixelFormat; }
80 void copyRectToSurface(const Graphics::Surface &srcSurface, int destX, int destY);
81 void copyRectToSurface(const Graphics::Surface &srcSurface, int destX, int destY, const Common::Rect &srcRect, bool flipX = false, AlphaBlendMode alpha = NONE);
82 void copyRectToSurface8bpp(const Graphics::Surface &srcSurface, const byte *palette, int destX, int destY, const Common::Rect &srcRect, bool flipX = false, AlphaBlendMode alpha = NONE, uint16 scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE);
83 void copyRectToSurface8bppWrappedX(const Graphics::Surface &srcSurface, const byte *palette, const Common::Rect &srcRect, AlphaBlendMode alpha = NONE);
84 void updateScreen();
85 void loadPalette(uint16 paletteNum, const byte *palette);
86 byte *getPalette(uint16 paletteNum);
87 void setPaletteRecord(uint16 paletteNum, uint16 offset, uint16 newValue);
88 void updatePaletteTransparency(uint16 paletteNum, uint16 startOffset, uint16 endOffset, bool isTransparent);
89 void clearScreen();
90 void drawRect(uint16 colour, Common::Rect rect, int id);
91 void fillRect(uint16 colour, Common::Rect rect);
92 Common::Rect clipRectToScreen(int destX, int destY, const Common::Rect &rect);
93 Common::Rect clipRectToRect(int destX, int destY, const Common::Rect &rect, const Common::Rect &containerRect);
94
95 void setScreenShakeOffset(int16 x, int16 y);
96
97 void copyRectToSurface8bppWrappedY(const Graphics::Surface &srcSurface, const byte *palette, int yOffset);
98
99 int16 addFlatQuad(int16 x0, int16 y0, int16 x1, int16 y1, int16 x3, int16 y3, int16 x2, int16 y2, uint16 colour, int16 priorityLayer, uint16 flags);
100 void drawFlatQuads(uint16 priorityLayer);
101 FlatQuad *getFlatQuad(uint16 quadId);
102 void clearAllFlatQuads();
103
104private:
105 void copyRectToSurface(const void *buffer, int srcPitch, int srcWidth, int srcXOffset, int destX, int destY, int width, int height, bool flipX, AlphaBlendMode alpha);
106 void copyRectToSurface8bpp(const void *buffer, const byte* palette, int srcPitch, int srcWidth, int srcXOffset, int destX, int destY, int width, int height, bool flipX, AlphaBlendMode alpha);
107 void drawScaledSprite(Graphics::Surface *destSurface, const byte *source, int sourceWidth, int sourceHeight, int destX, int destY, int destWidth, int destHeight, const byte *palette, bool flipX, AlphaBlendMode alpha);
108};
109
110} // End of namespace Dragons
111
112#endif //DRAGONS_SCREEN_H
Definition: screen.h:67
Definition: rect.h:144
Definition: rect.h:536
Definition: screen.h:54
Definition: pixelformat.h:138
Definition: surface.h:67