【发布时间】:2011-01-19 22:51:14
【问题描述】:
我有
VGA 兼容控制器:Ubuntu 10.10 Linux 上的 Intel Corporation 82G33/G31 Express Integrated Graphics Controller (rev 10)。
我每帧静态渲染一个 VBO。这个 VBO 有 30,000 个三角形,有 3 个灯光和一个纹理,我得到 15 FPS。
英特尔卡这么差,还是我做错了什么?
驱动程序是来自英特尔的标准开源驱动程序。
我的代码:
void init() {
glGenBuffersARB(4, vbos);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbos[0]);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLfloat) * verticesNum * 3, vertXYZ, GL_STATIC_DRAW_ARB);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbos[1]);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLfloat) * verticesNum * 4, colorRGBA, GL_STATIC_DRAW_ARB);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbos[2]);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLfloat) * verticesNum * 3, normXYZ, GL_STATIC_DRAW_ARB);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbos[3]);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLfloat) * verticesNum * 2, texXY, GL_STATIC_DRAW_ARB);
}
void draw() {
glPushMatrix();
const Vector3f O = ps.getPosition();
glScalef(scaleXYZ[0], scaleXYZ[1], scaleXYZ[2]);
glTranslatef(O.x() - originXYZ[0], O.y() - originXYZ[1], O.z()
- originXYZ[2]);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbos[0]);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbos[1]);
glColorPointer(4, GL_FLOAT, 0, 0);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbos[2]);
glNormalPointer(GL_FLOAT, 0, 0);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbos[3]);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
texture->bindTexture();
glDrawArrays(GL_TRIANGLES, 0, verticesNum);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); //disabling VBO
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glPopMatrix();
}
编辑:也许不清楚 - 初始化在不同的函数中,并且只调用一次。
【问题讨论】:
-
根据我的经验,没有经验数据支持,英特尔显卡非常糟糕。但无论如何,任何集成显卡都会很糟糕。
-
我计划以英特尔显卡为目标,因此它可以在任何地方工作,但我希望我可以在静态 VBO 中显示 100 000 个带纹理的三角形用于地形 + 10-100 个小型静态 VBO 用于对象。如果这在英特尔卡上是不可能的,我将不得不瞄准更强大的东西。但这可能是我在做一些愚蠢的事情。
-
我删除了你的链接,因为website is possibly dangerous。
-
确保您的系统启用了 OpenGL 加速: $ glxinfo | grep 渲染
-
Intel 卡在 LINUX 上太糟糕了。在 Windows 上,它们非常好。严重地。几年前,这一切都开始退化,我们正处于最糟糕的时期左右。
标签: linux performance intel opengl