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>
). Сделайте это до цикла рендеринга. Затем используйте структуру данных для рисования.