当渲染器缓冲区大小更改时,CPU在GPU上等待

时间:2013-01-17 01:36:40

标签: iphone ios opengl-es

我正在开发基于openGL ES的iOS应用程序。到目前为止,情况看起来不错,但根据Instrument的说法,有一种情况是CPU等待GPU。这个警告不一致。出现警告时,似乎在设备方向更改或缩放时发生。在应用程序中,这两种情况都触发layoutSubviews调用where(如果视图的框架有变化),帧缓冲区的尺寸通过以下代码更新:

[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_framebufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_framebufferHeight);
glViewport(0, 0, _framebufferWidth, _framebufferHeight);

然后在绘图回调中,统一矩阵得到更新,然后以下调用完成绘图:

glClear(GL_COLOR_BUFFER_BIT);
glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_SHORT, 0);
[_context presentRenderbuffer:GL_RENDERBUFFER];

当视图大小发生变化时,glClear调用似乎是警告的原因。老实说,这个警告没有任何视觉影响,但我仍然想修复它,但不知道如何。有了这个问题,我希望得到一些关于要尝试的事情的指导。任何的想法?

0 个答案:

没有答案