Ifstream не работает с OpenGL/freeglut

Сбой программы, если я пытаюсь использовать ifstream, имея OpenGL/freeglut. Мой код:

#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);
}

coordinates.txt:

1.1 1.03
2.5 2
3 5.3

Мне даже не нужно включать freeglut, я проверил старый проект, который отлично работал раньше, и теперь он тоже падает. Использование Code::Blocks с MinGW. Почему это случилось? Спасибо!

1 ответ

display будет вызываться более одного раза. Он вызывается всякий раз, когда необходимо перерисовать дисплей, например, когда окно открывается, другое окно перемещается поверх него, размер окна изменяется и т. Д.

display читает файл Что ж, после первого чтения файла он будет пустым. В конце концов, вы открыли файл в глобальной переменной (FYI: никогда не делайте этого) и продолжали чтение, пока файл не был пуст.

Не читайте файлы во время рисования. Считайте файл в структуру данных (скажем, vector<float>). Сделайте это до цикла рендеринга. Затем используйте структуру данных для рисования.

Другие вопросы по тегам