我正试图在我的OpenGL游戏中创建一个“模糊”效果,在某些部分我启用以下代码并且视觉模糊了一点......
if(world->blur) {
glAccum(GL_MULT, 0.85);
glAccum(GL_ACCUM, 1- 0.85);
glAccum(GL_RETURN, 1.0);
glFlush();
}
当我使用笔记本电脑的集成芯片时效果很好,这通常会降低帧速率,但如果我启用ATI gpu可以提高性能,那么效果就不会显现......
我在游戏中使用固定时钟:
tickTime += dt;
if(tickTime >= 1/DESIRED_FRAME_RATE) {
level->update(tickTime);
world->update(tickTime);
renderer->drawScene(tickTime);
tickTime = 0;
}
是否有一些明显的原因导致这种情况发生?
答案 0 :(得分:3)
只是一个建议,但您是否尝试使用帧缓冲对象(FBO)而不是累积缓冲区? FBO得到了更好的支持。
大多数cosumer级GPU不支持累积缓冲区。您的集成GPU可能是英特尔GPU(非常可能)。如果那是你正在研发的Linux机器,那么你将陷入Mesa软件的后备。并且fglrx根本不会给你积累缓冲。
使用FBO进行累积模糊非常简单:您需要两个纹理(一个渲染目标和一个累积纹理),这会改变它们的功能:
相反,od积累模糊使用着色器实现矢量模糊,效率更高。
答案 1 :(得分:2)
您应该检查是否从OpenGL返回任何错误代码。此外,您可以读出缓冲区的精度,如果它为0则缓冲区不可用。
此外,this question似乎表明许多ATi卡缺少累积缓冲区。