我正在开发一个用 OpenGL 构建的Micromouse 模拟应用程序,我有一种预感,我没有正确地做事。特别是,我对让我的(主要是静态的)图形以接近恒定的帧速率 (60 FPS) 刷新的方式表示怀疑。我的方法如下:
1) 启动计时器
2) 绘制我的形状和文本(大约一千个):
glBegin(GL_POLYGON);
for (Cartesian vertex : polygon.getVertices()) {
std::pair<float, float> coordinates = getOpenGlCoordinates(vertex);
glVertex2f(coordinates.first, coordinates.second);
}
glEnd();
Run Code Online (Sandbox Code Playgroud)
和
glPushMatrix();
glScalef(scaleX, scaleY, 0);
glTranslatef(coordinates.first * 1.0/scaleX, coordinates.second * 1.0/scaleY, 0);
for (int i = 0; i < text.size(); i += 1) {
glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, text.at(i));
}
glPopMatrix();
Run Code Online (Sandbox Code Playgroud)
3) 打电话
glFlush();
Run Code Online (Sandbox Code Playgroud)
4) 停止计时器
5) 睡眠 (1/FPS - 持续时间) 秒
6) 呼叫
glutPostRedisplay();
Run Code Online (Sandbox Code Playgroud)
“问题”是上述方法确实占用了我的 CPU - 该过程正在使用 96-100% 之类的东西。我知道,有没有什么内在的错误使用大量的CPU,但我觉得我不应该用那么多所有的时间。
关键是 …