update from Daniel Borca

This commit is contained in:
Brian Paul 2003-09-02 14:47:51 +00:00
parent 0d4da529bd
commit 77e85f133c
1 changed files with 48 additions and 20 deletions

View File

@ -130,9 +130,41 @@ void APIENTRY glutInitWindowSize (int width, int height)
#define DO_REDISPLAY(w, ccin, ccout) \
do { \
if (w->redisplay && w->display) { \
int rv = GL_TRUE; \
\
idle = GL_FALSE; \
w->redisplay = GL_FALSE; \
\
/* test IN condition (whether we need to `MakeCurrent') */\
if (ccin) { \
rv = DMesaMakeCurrent(w->context, w->buffer); \
} \
\
/* do the display only if `MakeCurrent' didn't failed */ \
if (rv) { \
if (w->show_mouse && !(g_display_mode & GLUT_DOUBLE)) {\
/* XXX scare mouse */ \
w->display(); \
/* XXX unscare mouse */ \
} else { \
w->display(); \
} \
\
/* update OUT condition */ \
ccout; \
} \
} \
} while (0)
void APIENTRY glutMainLoop (void)
{
int i;
int i, n;
GLUTwindow *w;
GLboolean idle;
static int old_mouse_x = 0;
static int old_mouse_y = 0;
@ -150,8 +182,8 @@ void APIENTRY glutMainLoop (void)
__glutInitMouse();
for (i = 0; i < MAX_WINDOWS; i++) {
if (g_windows[i] != NULL) {
GLUTwindow *w = g_windows[i];
w = g_windows[i];
if (w != NULL) {
glutSetWindow(w->num);
glutPostRedisplay();
if (w->reshape) {
@ -166,26 +198,22 @@ void APIENTRY glutMainLoop (void)
while (GL_TRUE) {
idle = GL_TRUE;
n = 0;
for (i = 0; i < MAX_WINDOWS; i++) {
if (g_windows[i] != NULL) {
GLUTwindow *w = g_windows[i];
if (w->redisplay && w->display) {
idle = GL_FALSE;
w->redisplay = GL_FALSE;
if (DMesaMakeCurrent(w->context, w->buffer)) {
if (w->show_mouse && !(g_display_mode & GLUT_DOUBLE)) {
/* XXX scare mouse */
w->display();
/* XXX unscare mouse */
} else {
w->display();
}
}
}
w = g_windows[i];
if ((w != NULL) && (w != g_curwin)) {
/* 1) redisplay `w'
* 2) `MakeCurrent' always
* 3) update number of non-default windows
*/
DO_REDISPLAY(w, GL_TRUE, n++);
}
}
DMesaMakeCurrent(g_curwin->context, g_curwin->buffer);
/* 1) redisplay `g_curwin'
* 2) `MakeCurrent' only if we previously did non-default windows
* 3) don't update anything
*/
DO_REDISPLAY(g_curwin, n, n);
if (g_mouse) {
int mouse_x;