1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

libertar memória num programa em OpenGL

Discussão em 'Programação' iniciada por MPalhas, 15 de Maio de 2009. (Respostas: 4; Visualizações: 834)

  1. MPalhas

    MPalhas Power Member

    tenho um programa que usa OpenGL, e que usa a função glutMainLoop() para actualizar a janela constantemente. o código openGL foi fornecido pelo professor para o trabalho, e nós apenas temos que fazer as funções que calculam as alterações na matriz que irá ser mostrada na janela.

    só que para esta fase tive que usar memória dinâmica, e tenho portanto que fazer free() dessa memória no final do programa. só que ao fechar a janela do openGL, o que estiver depois do glutMainLoop já não chega a ser executado. também não posso obviamente fazer o free antes disso, pois nessa altura ainda preciso dos dados em memória. como faço então para a memória ser libertada?
     
  2. Tomb4000

    Tomb4000 Power Member

    nunca "programei com opengl", mas parece-me que serà obvio existir uma funcao da api que seja chamada quando é terminada a janela, talvez glitdestroywindow.

    Tal como disse não faço ideia, mas tenta ir por aí...
    Cumps

    Edit: acho que essa funcao não é...
     
    Última edição: 15 de Maio de 2009
  3. S.T.E.E.L.

    S.T.E.E.L. Power Member

    Acho que é glutCloseFunc(void( *callback )( void ));

    Implementas o callback e deve funcionar. :)
     
  4. MPalhas

    MPalhas Power Member

    era isso mesmo obrigado :D

    mas com isso surgiu outro problema. recebo este warning ao compilar:

    display.c:103: warning: implicit declaration of function ‘glutCloseFunc’


    mas aparentemente compila e corre correctamente (parece-me que faz os frees correctamente, inclusive ja fiz um printf la no meio e ele funcionou).

    o código é este, no fim da função main:

    Código:
    /* Definir qual é a função que actualiza a janela */ 
        glutDisplayFunc(display); 
        glutIdleFunc(display); 
         
        /* Definir a funcao chamada ao fechar a janela */ 
        glutCloseFunc(cleanUp); 
     
        glutMainLoop(); 
        return 0;
    como disse, aparentemente funciona, mas uma das regras para entregar o trabalho é compilar sem warnings (usando a flag -Wall), por isso tenho k resolver isto de alguma forma. alguma dica?
     
  5. S.T.E.E.L.

    S.T.E.E.L. Power Member

    Experimenta pôr o protótipo da função no início do código.
     

Partilhar esta Página