Utilização de Múltiplas telas em OpenGL

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();