Criando de Múltiplas Janelas
Para a criação de múltiplas
telas em OpenGL usa-se a função
glutCreateWindow() que
deveolve um identificador da janela. Este identificador deve ser
armazenado pois será necessário mais tarde apra controlar
as várias janelas do programa.
#define Larg 100
int jan[5];
< style="font-family: monospace;">
glutInit
( &argc, argv );
glutInitDisplayMode ( GLUT_DEPTH | GLUT_DOUBLE |
GLUT_RGBA );
............
.........
............
glutInitWindowPosition (0,0);>
< style="font-family: monospace;">
glutInitWindowSize ( Larg, Larg); >
jan[0] = glutCreateWindow ( "Janela 1");
glutInitWindowPosition (Larg,0);
glutInitWindowSize ( Larg, Larg);
jan[1] =
glutCreateWindow ( "Janela 2");
Definindo a Janela Ativa
Sempre que for necessário ativar um comando
da GLUT que se refira a uma das janelas, primeiramente deve-se definir
a janela com que se está trabalhando. Isto é feito
através da rotina
glutSetWindows(idJanela).
glutSetWindow(jan[1]);
Obtendo pela janela Ativa
Para obter o identificador da janela
ativa, existe a função
glutGetWindow().
if
(glutGetWindow() == jan[0])
printf("Janela Ativa: ZERO \n");
if
(glutGetWindow() == jan[1])
printf("Janela Ativa: UM \n");
Funções de Callback
Quando estamos trabalhando com
múltiplas janelas, os comandos de definição das
funções de
callback
da GLUT devem ser precedidos da ativação explícita
de uma das janelas.
glutSetWindow(jan[0]);
glutDisplayFunc ( display0 );
glutReshapeFunc ( reshape0 );
glutKeyboardFunc ( keyboard0 );
glutSpecialFunc ( arrow_keys0 );
glutSetWindow(jan[1]);
glutDisplayFunc ( display1 );
glutReshapeFunc ( reshape1 );
glutKeyboardFunc ( keyboard1 );
glutSpecialFunc ( arrow_keys1 );
Redesenhando múltiplas janelas
void
SetOBS(int janela)
{
if (glutGetWindow() ==
jan[0])
SetOBS_WINDOW_ZERO();
if (glutGetWindow() ==
jan[0])
SetOBS_WINDOW_ZERO();
}
........
........
glutSetWindow (jan[0]);
SetOBS();
glutPostRedisplay();
glutSetWindow (jan[1]);
SetOBS();
glutPostRedisplay();