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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
/*-----------------------------------------------------------------
GEM - Graphics Environment for Multimedia
create a window
Copyright (c) 1997-1999 Mark Danks. mark@danks.org
Copyright (c) Günther Geiger. geiger@epy.co.at
Copyright (c) 2001-2002 IOhannes m zmoelnig. forum::für::umläute. IEM. zmoelnig@iem.kug.ac.at
For information on usage and redistribution, and for a DISCLAIMER OF ALL
WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution.
-----------------------------------------------------------------*/
#ifndef INCLUDE_GEMWINCREATE_H_
#define INCLUDE_GEMWINCREATE_H_
#include "Base/config.h"
#ifdef __unix__
# include <GL/glx.h>
# ifdef HAVE_LIBXXF86VM
# include <X11/extensions/xf86vmode.h>
# endif
#elif defined __WIN32__
# include <windows.h>
#elif defined __APPLE__
# import <AGL/agl.h>
#else
# error Define OS specific window creation
#endif
#include "Base/GemExportDef.h"
// I hate Microsoft...I shouldn't have to do this!
#ifdef __WIN32__
# pragma warning( disable : 4244 )
# pragma warning( disable : 4305 )
# pragma warning( disable : 4091 )
#endif
#include "m_pd.h"
#include <string.h>
/*-----------------------------------------------------------------
-------------------------------------------------------------------
CLASS
WindowInfo
All of the relavent information about an OpenGL window
DESCRIPTION
-----------------------------------------------------------------*/
class GEM_EXTERN WindowInfo
{
public:
// Constructor
WindowInfo() :
fs(0),
#ifdef __unix__
dpy(NULL), win(0), cmap(0), context(NULL), delete_atom(0)
#elif defined __WIN32__
win(NULL), dc(NULL), context(NULL)
#elif defined __APPLE__
pWind(NULL), context(NULL), offscreen(NULL), pixelSize(32),
pixMap(NULL), rowBytes(0), baseAddr(NULL)
#endif
{}
int fs; // FullScreen
int have_constContext; // 1 if we have a constant context
#ifdef __unix__
Display *dpy; // X Display
Window win; // X Window
int screen; // X Screen
Colormap cmap; // X color map
GLXContext context; // OpenGL context
Atom delete_atom;
#ifdef HAVE_LIBXXF86VM
XF86VidModeModeInfo deskMode; // originale ModeLine of the Desktop
#endif
#elif defined __WIN32__
HWND win; // Window handle
HDC dc; // Device context handle
HGLRC context; // OpenGL context
#elif defined __APPLE__
WindowPtr pWind; // GEM window reference for gemwin
AGLContext context; // OpenGL context
GWorldPtr offscreen; // Macintosh offscreen buffer
long pixelSize; //
Rect r; //
PixMapHandle pixMap; // PixMap Handle
long rowBytes; //
void *baseAddr; //
short fontList; // Font
#else
#error Define OS specific window data
#endif
};
/*-----------------------------------------------------------------
-------------------------------------------------------------------
CLASS
WindowHints
Hints for window creation
DESCRIPTION
-----------------------------------------------------------------*/
class GEM_EXTERN WindowHints
{
public:
//////////
// Should the window be realized
int actuallyDisplay;
//////////
// Single or double buffered
int buffer;
//////////
// The width/x of the window
int width;
//////////
// The height/y of the window
int height;
//////////
// the real width/height of the window (set by createGemWindow())
int real_w, real_h;
//////////
// The offset/x of the window (likely tobe overridden by the window-manager)
int x_offset;
//////////
// The offset/y of the window (likely tobe overridden by the window-manager)
int y_offset;
//////////
// Should we do fullscreen ?
int fullscreen;
//////////
// Is there a second screen ?
int secondscreen;
//////////
// Should there be a window border?
int border;
//////////
// mode for full-screen antialiasing
int fsaa;
///// if we can use a different display , this has its meaning under X
char* display;
//////////////
// display some title....
char* title;
//////////
// The GLXcontext to share rendering with
#ifdef __unix__
GLXContext shared;
#elif defined __WIN32__
HGLRC shared;
#elif defined __APPLE__
AGLContext shared;
#else
#error Define OS specific OpenGL context
#endif
};
//////////
// Create a new window
GEM_EXTERN extern int createGemWindow(WindowInfo &info, WindowHints &hints);
//////////
// Destroy a window
GEM_EXTERN extern void destroyGemWindow(WindowInfo &info);
//////////
// Set the cursor
GEM_EXTERN extern int cursorGemWindow(WindowInfo &info, int state);
//////////
// Set the topmost position
GEM_EXTERN extern int topmostGemWindow(WindowInfo &info, int state);
//////////
// swap the buffers (get's called in double-buffered mode)
GEM_EXTERN extern void gemWinSwapBuffers(WindowInfo &nfo);
/////////
// reestablish a context
GEM_EXTERN extern void gemWinMakeCurrent(WindowInfo &nfo);
/////////
// init OS-specific stuff
GEM_EXTERN extern bool initGemWin(void);
/////////
// prepare a WindowInfo for context-sharing
GEM_EXTERN void initWin_sharedContext(WindowInfo &info, WindowHints &hints);
/////////
//
GEM_EXTERN extern void dispatchGemWindowMessages(WindowInfo &nfo);
#endif // for header file
|