DOS updates from Daniel Borca.
[mesa.git] / src / glut / dos / window.c
1 /*
2 * Mesa 3-D graphics library
3 * Version: 4.1
4 * Copyright (C) 1995-1998 Brian Paul
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; if not, write to the Free
18 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 /*
22 * DOS/DJGPP glut driver v1.3 for Mesa 5.0
23 *
24 * Copyright (C) 2002 - Borca Daniel
25 * Email : dborca@yahoo.com
26 * Web : http://www.geocities.com/dborca
27 */
28
29
30 #include "GL/glut.h"
31 #include "GL/dmesa.h"
32 #include "internal.h"
33
34
35
36 static int window;
37
38 static DMesaVisual visual = NULL;
39 static DMesaContext context = NULL;
40 static DMesaBuffer buffer[MAX_WINDOWS];
41
42
43
44 static void clean (void)
45 {
46 int i;
47
48 for (i=0; i<MAX_WINDOWS; i++) {
49 glutDestroyWindow(i+1);
50 }
51 if (context) DMesaDestroyContext(context);
52 if (visual) DMesaDestroyVisual(visual);
53
54 pc_close_stdout();
55 pc_close_stderr();
56 }
57
58
59
60 int APIENTRY glutCreateWindow (const char *title)
61 {
62 int i;
63
64 if (!visual) {
65 if ((visual=DMesaCreateVisual(g_xpos + g_width, g_ypos + g_height, g_bpp, g_refresh,
66 g_display_mode & GLUT_DOUBLE,
67 !(g_display_mode & GLUT_INDEX),
68 g_display_mode & GLUT_ALPHA,
69 g_display_mode & GLUT_DEPTH ?DEPTH_SIZE :0,
70 g_display_mode & GLUT_STENCIL?STENCIL_SIZE:0,
71 g_display_mode & GLUT_ACCUM ?ACCUM_SIZE :0))==NULL) {
72 return 0;
73 }
74
75 if ((context=DMesaCreateContext(visual, NULL))==NULL) {
76 DMesaDestroyVisual(visual);
77 return 0;
78 }
79
80 pc_open_stdout();
81 pc_open_stderr();
82 pc_atexit(clean);
83 }
84
85 for (i=0; i<MAX_WINDOWS; i++) {
86 if (!buffer[i]) {
87 DMesaBuffer b;
88
89 if ((b=DMesaCreateBuffer(visual, g_xpos, g_ypos, g_width, g_height))==NULL) {
90 return 0;
91 }
92 if (!DMesaMakeCurrent(context, b)) {
93 DMesaDestroyBuffer(b);
94 return 0;
95 }
96 if (g_mouse) {
97 pc_mouse_area(g_xpos, g_ypos, g_xpos + g_width - 1, g_ypos + g_height - 1);
98 }
99
100 buffer[window = i] = b;
101 return i+1;
102 }
103 }
104
105 return 0;
106 }
107
108
109 int APIENTRY glutCreateSubWindow (int win, int x, int y, int width, int height)
110 {
111 return GL_FALSE;
112 }
113
114
115 void APIENTRY glutDestroyWindow (int win)
116 {
117 if (buffer[win-1]) {
118 DMesaDestroyBuffer(buffer[win-1]);
119 buffer[win-1] = NULL;
120 }
121 }
122
123
124 void APIENTRY glutPostRedisplay (void)
125 {
126 g_redisplay = GL_TRUE;
127 }
128
129
130 void APIENTRY glutSwapBuffers (void)
131 {
132 if (g_mouse) pc_scare_mouse();
133 DMesaSwapBuffers(buffer[window]);
134 if (g_mouse) pc_unscare_mouse();
135 }
136
137
138 int APIENTRY glutGetWindow (void)
139 {
140 return window + 1;
141 }
142
143
144 void APIENTRY glutSetWindow (int win)
145 {
146 window = win - 1;
147 }
148
149
150 void APIENTRY glutSetWindowTitle (const char *title)
151 {
152 }
153
154
155 void APIENTRY glutSetIconTitle (const char *title)
156 {
157 }
158
159
160 void APIENTRY glutPositionWindow (int x, int y)
161 {
162 if (DMesaViewport(buffer[window], x, y, g_width, g_height)) {
163 g_xpos = x;
164 g_ypos = y;
165 }
166 }
167
168
169 void APIENTRY glutReshapeWindow (int width, int height)
170 {
171 if (DMesaViewport(buffer[window], g_xpos, g_ypos, width, height)) {
172 g_width = width;
173 g_height = height;
174 if (reshape_func) {
175 reshape_func(width, height);
176 } else {
177 glViewport(0, 0, width, height);
178 }
179 }
180 }
181
182
183 void APIENTRY glutPopWindow (void)
184 {
185 }
186
187
188 void APIENTRY glutPushWindow (void)
189 {
190 }
191
192
193 void APIENTRY glutIconifyWindow (void)
194 {
195 }
196
197
198 void APIENTRY glutShowWindow (void)
199 {
200 }
201
202
203 void APIENTRY glutHideWindow (void)
204 {
205 }