我用的是GULT库函数来实现的一个程序:
主函数部分是:
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH|GLUT_ACCUM);
glutInitWindowSize(1000, 600);
glutInitWindowPosition(0, 0);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
AviGen.ReleaseEngine();
return 0;
}
我想问问为什么我的程序直到结束都无法调用AviGen.ReleaseEngine()函数呢??

解决方案 »

  1.   

    AviGen 是什么 你的AviGen.ReleaseEngine()应该放在消息循环里面吧
      

  2.   

    用OpenGL自己的资源释放函数吧~~~
      

  3.   

    能告诉我OpenGL自己的资源释放函数都有那些吗吗?谢谢
      

  4.   

    或者能不能将主函数改动使得程序执行完glutMainLoop()可以继续调用下面的函数呢?
      

  5.   

    你把glutMainLoop()里面调用的那些回调函数里面的exit(0)去掉.
    然后替换成PostQuitMessage(0);
    用exit(0)是直接退出,不会调用后面的.而不是只推出MainLoop那个循环
      

  6.   

    lz可以使用freeglut库
    和glut基本差不多,不同之处在于:freeglut和glut类似,一个比较重要的不同点在于freeglut库中的glutMainLoopEvent函数执行一次循环以后会返回控制权,
    glut中的glutMainLoop()一旦进入循环就再也不返回
      

  7.   

    //glut_loop.cpp
    //
    #include <GL/freeglut.h>
    //
    void render(void);
    void keyFunc(unsigned char, int, int);
    int window_id;
    bool keep_running = true;
    //
    // A barebones GLUT application
    //
    int main()
        {
        // Create our OpenGL Window
        int fake_argc = 1;
        char* fake_argv;
        glutInit(&fake_argc, &fake_argv);
        glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
        glutInitWindowSize(640, 480);
        window_id = glutCreateWindow("GLUT Loop");
        // Set the function to handle normal key presses
        glutKeyboardFunc(keyFunc);
        // Begin the loop
        while(keep_running)
            {
            glutMainLoopEvent();
            render();
            glutSwapBuffers();
            }
        // Exit gracefully
        glutDestroyWindow(window_id);
    //退出函数处理,,,
        return 0;
        }
    //
    // This is where you'd draw a frame of your 3D application
    //
    void render()
        {
        glLoadIdentity();
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        // Look on my works, ye Mighty, and despair!
        glutWireTeapot( 0.5 );
        }
    //
    //  Handler for normal keypressed
    //
    void keyFunc(unsigned char key, int x, int y)
        {
        switch (key)
            {
            case 113:   // 'q',
            case 81:    // 'Q',
            case 27:    // 'ESC'
               keep_running = false;
               break;
            }
        }