【问题标题】:C++ glut glew speed?C++ 过剩速度?
【发布时间】:2013-11-20 14:04:14
【问题描述】:

好吧,我不知道我是不是傻还是怎么的。

但是当我运行我的应用程序而不绘制任何东西时,我得到大约 6k FPS。

当绘制大约 150-200 点(来自 obj )时,它只有 800... 如果我再添加字体渲染,它会变得更低。

我不知道这是正常现象还是什么,但我不明白你应该如何渲染整个游戏世界。 如果只有 150 - 200 点可以把它降到那么低。 我还尝试渲染大约 4k 点 => FPS=80

这是我的 objs 渲染方法:

void Render::RenderOBJVBO(OBJData data)
{
if(data.RenderID == 0) return;
    glBindBufferARB(GL_ARRAY_BUFFER, data.RenderID);
    glVertexPointer(3, GL_FLOAT, sizeof(float) * 8, (GLvoid*)(sizeof(float) * 5));
    glNormalPointer(GL_FLOAT, sizeof(float) * 8, (GLvoid*)(sizeof(float) * 2));
    glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 8, (GLvoid*)0);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnableClientState(GL_NORMAL_ARRAY);

    glDrawArrays(GL_TRIANGLES, 0, data.F.size() * 3);

    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisableClientState(GL_NORMAL_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);
    glBindTexture(GL_TEXTURE_2D, 0);
}

这里是 OBJData:

class OBJData
{
public:
 OBJData(void){}
 ~OBJData(void){}
 std::vector<OBJFace> F;
 std::vector<Vector3f> V;
 std::vector<Vector3f> VN;
 std::vector<Vector3f> VT;
 int RenderID;
};

最后是 OBJFace:

class OBJFace
{
public:
OBJFace(void){}
~OBJFace(void){}
Vector3f verts;
Vector3f norms;
Vector3f textures;
OBJFace(Vector3f v, Vector3f n, Vector3f t)
{
    verts = v;
    norms = n;
    textures = t;
}
};

所以我的问题是:这正常吗?如果不是,什么可能导致此问题?

规格:

操作系统:Windows 8 64 位

CPU:英特尔酷睿 i5 760 @ 2.80GHz

内存:4 GB

显卡:ATI Radeon HD 48000 系列

屏幕:1920x1080@60Hz

【问题讨论】:

  • 您是否正在调试模式下运行您的程序?如果是这样,您将有很多无用的构造函数/析构函数调用。尝试删除 OBJData 和 OBJFace 的构造函数/析构函数,并让它们变得陈旧structs
  • 我现在已经把它们变成了结构体。但不幸的是 FPS 仍然在 80 - 100 左右
  • 您使用的是什么图形硬件?英特尔和许多仅 ES 的垃圾(比如在手机上)的速度往往非常缓慢......
  • 我用我的规格编辑了帖子!

标签: c++ performance glut frame-rate glew


【解决方案1】:
void Render::RenderOBJVBO(OBJData data)

应该是

void Render::RenderOBJVBO(OBJData & data)

或者更好

void Render::RenderOBJVBO(const OBJData & data)

否则,每次调用 RenderOBJVBO 时都会创建一个新的 OBJData 副本

【讨论】:

  • 非常感谢您解决了这个问题。它现在几乎和我没有渲染一样!
  • 很高兴它解决了您的问题。有关将对象作为函数参数传递的更多信息,请参阅this question
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多