blob: 05654200f7d966d9f443b696a13c8ab8ffde68f6 [file] [log] [blame]
José Fonseca2403f682011-03-30 11:33:52 +01001/**************************************************************************
2 *
3 * Copyright 2011 Jose Fonseca
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 *
24 **************************************************************************/
25
26/*
27 * Abstraction for GL window system specific APIs (GLX, WGL).
28 */
29
José Fonseca818d47d2011-04-02 20:22:17 +010030#ifndef _GLWS_HPP_
31#define _GLWS_HPP_
José Fonseca2403f682011-03-30 11:33:52 +010032
33
José Fonseca818d47d2011-04-02 20:22:17 +010034namespace glws {
José Fonseca2403f682011-03-30 11:33:52 +010035
36
José Fonseca30228ce2011-04-02 20:12:33 +010037class Visual
José Fonseca2403f682011-03-30 11:33:52 +010038{
José Fonseca30228ce2011-04-02 20:12:33 +010039public:
José Fonseca2403f682011-03-30 11:33:52 +010040 unsigned long redMask;
41 unsigned long greenMask;
42 unsigned long blueMask;
43 unsigned long alphaMask;
44 bool doubleBuffer;
José Fonseca30228ce2011-04-02 20:12:33 +010045
46 virtual ~Visual() {}
José Fonseca2403f682011-03-30 11:33:52 +010047};
48
49
José Fonseca30228ce2011-04-02 20:12:33 +010050class Drawable
José Fonseca2403f682011-03-30 11:33:52 +010051{
José Fonseca30228ce2011-04-02 20:12:33 +010052public:
José Fonseca2403f682011-03-30 11:33:52 +010053 const Visual *visual;
José Fonseca7497c132011-05-06 20:43:48 +010054 int width;
55 int height;
José Fonsecad3a6f152011-05-20 23:54:13 +010056 bool visible;
José Fonseca30228ce2011-04-02 20:12:33 +010057
José Fonseca7497c132011-05-06 20:43:48 +010058 Drawable(const Visual *vis, int w, int h) :
59 visual(vis),
60 width(w),
José Fonsecad3a6f152011-05-20 23:54:13 +010061 height(h),
62 visible(false)
José Fonseca30228ce2011-04-02 20:12:33 +010063 {}
64
65 virtual ~Drawable() {}
66
67 virtual void
José Fonseca7497c132011-05-06 20:43:48 +010068 resize(int w, int h) {
José Fonseca30228ce2011-04-02 20:12:33 +010069 width = w;
70 height = h;
71 }
72
José Fonsecad3a6f152011-05-20 23:54:13 +010073 virtual void
74 show(void) {
75 visible = true;
76 }
77
José Fonseca30228ce2011-04-02 20:12:33 +010078 virtual void swapBuffers(void) = 0;
79};
80
81
82class Context
83{
84public:
85 const Visual *visual;
86
87 Context(const Visual *vis) :
88 visual(vis)
89 {}
90
91 virtual ~Context() {}
José Fonseca2403f682011-03-30 11:33:52 +010092};
93
94
95class WindowSystem
96{
97public:
José Fonseca2403f682011-03-30 11:33:52 +010098 virtual ~WindowSystem() {}
99
José Fonseca30228ce2011-04-02 20:12:33 +0100100 virtual Visual *
José Fonsecace6bcdd2011-04-09 16:09:31 +0100101 createVisual(bool doubleBuffer = false) = 0;
José Fonseca30228ce2011-04-02 20:12:33 +0100102
José Fonseca2403f682011-03-30 11:33:52 +0100103 virtual Drawable *
José Fonseca53d224e2011-05-17 09:43:36 +0100104 createDrawable(const Visual *visual, int width = 32, int height = 32) = 0;
José Fonseca2403f682011-03-30 11:33:52 +0100105
José Fonseca2403f682011-03-30 11:33:52 +0100106 virtual Context *
Zack Rusinfc6ecc92011-05-08 00:52:13 -0400107 createContext(const Visual *visual, Context *shareContext = NULL) = 0;
José Fonseca2403f682011-03-30 11:33:52 +0100108
109 virtual bool
110 makeCurrent(Drawable *drawable, Context *context) = 0;
111
112 virtual bool
113 processEvents(void) = 0;
114};
115
116
117WindowSystem *createNativeWindowSystem(void);
118
119
José Fonseca818d47d2011-04-02 20:22:17 +0100120} /* namespace glws */
José Fonseca2403f682011-03-30 11:33:52 +0100121
122
José Fonseca818d47d2011-04-02 20:22:17 +0100123#endif /* _GLWS_HPP_ */