Ifstream不适用于OpenGL / freeglut

时间:2015-12-29 13:52:11

标签: c++ opengl crash ifstream freeglut

如果我在使用OpenGL / freeglut时尝试使用ifstream,程序会崩溃。我的代码:

function BiWeakMap() {
    this._map = new WeakMap();
}

BiWeakMap.prototype.set = function(key1, key2, value) {

    if (!this._map.has(key1)) {
        this._map.set(key1, new WeakMap());
    }

    this._map.get(key1).set(key2, value);

    return this;

};

BiWeakMap.prototype.has = function(key1, key2) {

    return this._map.has(key1) && this._map.get(key1).has(key2);

};

BiWeakMap.prototype.get = function(key1, key2) {

    return this._map.get(key1) && this._map.get(key1).get(key2);

};

coordinates.txt:

#include <fstream>
#include <windows.h>
#include <GL/freeglut.h>
double x, y;
std::ifstream read("coordinates.txt");
void display() {
    glBegin(GL_LINE_STRIP);
        while (read >> x) //Crashes here
        {
            read >> y;
            glVertex2d(x, y);
        }
    glEnd();
    glFlush();
}
void key(unsigned char mychar, int x, int y) {
    if (mychar == 27) {
        exit(0);
    }
}
void initialize()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-27, 27, -27, 27);
}
int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowSize(1920, 1080);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("Lorenz Attractor");
    initialize();
    glutDisplayFunc(display);
    glutKeyboardFunc(key);
    glColor3d(0, 0, 1);
    glutFullScreen();
    glutMainLoopEvent();
    Sleep(60000);
}

我甚至不需要包含freeglut,我检查了一个之前运行良好的旧项目,现在它也崩溃了。在MinGW中使用Code :: Blocks。为什么会这样?谢谢!

1 个答案:

答案 0 :(得分:1)

display将被多次调用。每当需要重绘显示时调用它,例如当窗口进入视图时,另一个窗口移动到其上方,窗口调整大小等等。

display读取文件。好吧,在第一次读取文件后,文件将为空。毕竟,你在一个全局变量(FYI:从不那样做)中打开文件,你一直读到文件为空。

绘图时不要读取文件。将文件读入数据结构(例如,vector<float>)。在渲染循环之前执行此操作。然后,使用数据结构从中抽取。