如果我在使用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。为什么会这样?谢谢!
答案 0 :(得分:1)
display
将被多次调用。每当需要重绘显示时调用它,例如当窗口进入视图时,另一个窗口移动到其上方,窗口调整大小等等。
display
读取文件。好吧,在第一次读取文件后,文件将为空。毕竟,你在一个全局变量(FYI:从不那样做)中打开文件,你一直读到文件为空。
绘图时不要读取文件。将文件读入数据结构(例如,vector<float>
)。在渲染循环之前执行此操作。然后,使用数据结构从中抽取。