gpt4 book ai didi

iphone - glScissor 帮助 (iPhone OpenGL ES)

转载 作者:行者123 更新时间:2023-12-03 19:41:05 29 4
gpt4 key购买 nike

我正在尝试使用 glScissor 来隔离屏幕上需要更新的部分。我有一个游戏区域,需要更新每一帧,但 UI 区域需要更新的频率要低得多。游戏区域很好,但 UI 区域不断闪烁,看起来像是旧的缓冲区数据。

我错过了什么?

这是我的渲染代码:

[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);

if (needsUIUpdate)
{
// clear entire screen
glScissor(0, 0, 320, 480);

glClear(GL_COLOR_BUFFER_BIT);

needsUIUpdate = NO;
[self updateUI];
}
else
{
glScissor(0, 80, 320, 400);
glClear(GL_COLOR_BUFFER_BIT);
}

for (Cell* c in allCells)
[c animate];

glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];

最佳答案

您是否在CAEAGLLayer中使用kEAGLDrawablePropertyRetainedBacking?如果您不将其设置为 YES,则无法保证在渲染后保留缓冲区的内容。换句话说,他们正在进行双缓冲渲染:有 2 个独立的缓冲区。一种正在显示,一种正在渲染。当渲染一帧并显示它时,下一帧将渲染到另一个缓冲区,因此不会保留内容。 (这解释了为什么如果您不清除屏幕的那 block 内容,您会看到垃圾。)如果您使用此标志,图形系统可能会在翻转期间复制数据,以便保留内容。

使用此标志将使您的应用程序占用更多内存和更多时间来渲染,因此对于上面的优化来说可能不值得。您必须对其进行分析并查看。 (有关更多信息,请参阅 the Apple docs。)

您还可以查看 GLPaint demo - 它使用此属性来避免每次都重绘屏幕。

关于iphone - glScissor 帮助 (iPhone OpenGL ES),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686277/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com