aboutsummaryrefslogtreecommitdiff
path: root/engines/wintermute/base/gfx/base_renderer.h
blob: 84da8bd7f8d45b33ad9308df013be9080bd84d5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

/*
 * This file is based on WME Lite.
 * http://dead-code.org/redir.php?target=wmelite
 * Copyright (c) 2011 Jan Nedoma
 */

#ifndef WINTERMUTE_BRENDERER_H
#define WINTERMUTE_BRENDERER_H

#include "engines/wintermute/math/rect32.h"
#include "engines/wintermute/base/base.h"
#include "common/rect.h"
#include "common/array.h"

namespace WinterMute {

class BaseImage;
class BaseActiveRect;
class BaseObject;
class BaseSurface;
class BaseRenderer: public BaseClass {
public:
	int _realWidth;
	int _realHeight;
	int _drawOffsetX;
	int _drawOffsetY;

	virtual void dumpData(const char *filename) {};
	virtual BaseImage *takeScreenshot();
	virtual bool setViewport(int left, int top, int right, int bottom);
	virtual bool setViewport(Rect32 *Rect);
	virtual bool setScreenViewport();
	virtual bool fade(uint16 Alpha);
	virtual bool fadeToColor(uint32 Color, Common::Rect *rect = NULL);
	virtual bool drawLine(int x1, int y1, int x2, int y2, uint32 color);
	virtual bool drawRect(int x1, int y1, int x2, int y2, uint32 color, int width = 1);
	BaseRenderer(BaseGame *inGame = NULL);
	virtual ~BaseRenderer();
	virtual bool setProjection() {
		return STATUS_OK;
	};

	virtual bool windowedBlt();
	virtual bool fill(byte r, byte g, byte b, Common::Rect *rect = NULL);
	virtual void onWindowChange();
	virtual bool initRenderer(int width, int height, bool windowed);
	virtual bool flip();
	virtual void initLoop();
	virtual bool switchFullscreen();
	virtual bool setup2D(bool force = false);
	virtual bool setupLines();

	virtual const char *getName() {
		return "";
	};
	virtual bool displayDebugInfo() {
		return STATUS_FAILED;
	};
	virtual bool drawShaderQuad() {
		return STATUS_FAILED;
	}

	virtual float getScaleRatioX() const {
		return 1.0f;
	}
	virtual float getScaleRatioY() const {
		return 1.0f;
	}

	virtual BaseSurface *createSurface() = 0;

	bool clipCursor();
	bool unclipCursor();

	BaseObject *getObjectAt(int x, int y);
	void deleteRectList();

	virtual bool startSpriteBatch() {
		return STATUS_OK;
	};
	virtual bool endSpriteBatch() {
		return STATUS_OK;
	};
	bool pointInViewport(Point32 *P);
	bool _active;
	bool _ready;
	bool _windowed;
	int _bPP;
	int _height;
	int _width;
	uint32 _window;
	uint32 _forceAlphaColor;

	void addRectToList(BaseActiveRect *rect);
protected:
	uint32 _clipperWindow;

	Rect32 _windowRect;
	Rect32 _viewportRect;
	Rect32 _screenRect;
	Rect32 _monitorRect;
private:
	Common::Array<BaseActiveRect *> _rectList;
};

BaseRenderer *makeOSystemRenderer(BaseGame *inGame); // Implemented in BRenderSDL.cpp

} // end of namespace WinterMute

#endif