OPENGL的glutSwapBuffers(); 调用到这个函数就崩溃了
什么问题 这个最后调用的一个函数
以下是具体代码#include "stdafx.h"#include <windows.h>#include <gl\glut.h>
// ASCII字符总共只有0到127,一共128种字符
#define MAX_CHAR        128void drawString(const char* str) {    static int isFirstCall = 1;
    static GLuint lists;

    if( isFirstCall ) { // 如果是第一次调用,执行初始化
// 为每一个ASCII字符产生一个显示列表
isFirstCall = 0;

// 申请MAX_CHAR个连续的显示列表编号
lists = glGenLists(MAX_CHAR);

// 把每个字符的绘制命令都装到对应的显示列表中
wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
}
// 调用每个字符对应的显示列表,绘制每个字符
    for(; *str!='\0'; ++str)
glCallList(lists + *str);
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f, 0.0f, 0.0f);
glRasterPos2f(0.0f, 0.0f);
drawString("Hello, World!");
glutSwapBuffers();
}int main(int argc, char* argv[])
{
display();
return 0;
}

解决方案 »

  1.   

    完整的代码如下:#include "stdafx.h"#include <windows.h>#define GLUT_DISABLE_ATEXIT_HACK
    #include <gl\glut.h>
    #pragma comment(lib, "glut32.lib")
    // ASCII字符总共只有0到127,一共128种字符
    #define MAX_CHAR 128void drawString(const char* str) { static int isFirstCall = 1;
    static GLuint lists; if( isFirstCall ) { // 如果是第一次调用,执行初始化
    // 为每一个ASCII字符产生一个显示列表
    isFirstCall = 0; // 申请MAX_CHAR个连续的显示列表编号
    lists = glGenLists(MAX_CHAR); // 把每个字符的绘制命令都装到对应的显示列表中
    wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
    }
    // 调用每个字符对应的显示列表,绘制每个字符
    for(; *str!='\0'; ++str)
    glCallList(lists + *str);
    }
    void display(void) {
    glClearColor(0.0f,0.0f,0.0f,0.0);
    glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f, 0.0f, 0.0f);
    glRasterPos2f(0.0f, 0.0f);
    drawString("Hello, World!");
    glFlush();
    glutSwapBuffers();
    }int main(int argc, char* argv[])
    {
    glutInit(&argc, argv);                                            // initialize GLUT
    glutInitDisplayMode(GLUT_RGBA);                    // declare initial window size, position and play mode
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(500, 500);
    glutCreateWindow("hello world!");                      // open window with "hello world!" in its title bar
    glutDisplayFunc(display);                                   // register callback function to display graphics
    glutMainLoop();                                                  // enter main loop and process event
    return 0;
    }