gpt4 book ai didi

ios - glGetRenderbufferParameterivOES 返回错误的大小

转载 作者:行者123 更新时间:2023-12-01 16:55:56 25 4
gpt4 key购买 nike

我目前正在开发一个需要在其 View 的渲染缓冲区上绘制的 iOS 应用程序。这些 View 可以通过手势调整大小,因此,我正在调整渲染缓冲区的大小。

但是,当用户将 View 大小调整为快速时,glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); 返回错误值。

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);

if(NO == [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(id<EAGLDrawable>)self.layer]) {
NSLog(@"renderBufferStorage unsucessful!");
}
NSLog(@"_ %d %d", (int)self.layer.bounds.size.width, (int)self.layer.bounds.size.height);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);

glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);

if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) == GL_FRAMEBUFFER_COMPLETE_OES)
NSLog(@"+ %d %d", backingWidth, backingHeight);

缓慢调整大小会产生以下输出(或多或少可以):
_ 452 321
+ 450 319
_ 453 322
+ 452 321
_ 453 322
+ 452 321
_ 453 323
+ 453 323

虽然快速调整大小(这里是增长,而不是缩小)给我以下输出(这不好,差异很大)
 _ 491 350
+ 456 325
_ 555 394
+ 491 348
_ 548 390
+ 554 394
_ 540 384
+ 548 390
_ 459 326
+ 539 383
_ 389 277
+ 459 326
_ 313 222
+ 389 275

如果我对结果不满意(立即和延迟),我已经尝试人为地延迟调整大小或再次调用调整大小函数 - 两者都没有成功。

一个在现有代码中非常/太难合并的解决方案是在纹理中渲染,然后在 View 上绘制纹理。关于渲染缓冲区/EAGLDrawable 有什么我遗漏的,或者 API 不适合实时调整大小吗?

我已经检查了 glErrors 没有任何结果。

最佳答案

我真的不确定为什么会这样,但这里有一些想法:

可能层的后备存储尚未在 layoutSubviews 更新。时间。您可以尝试将其移至 CADisplayLink回调,看看你是否得到更好的结果。

另一种选择是使用 GLKView如果您的目标是 iOS 5+,或者可能允许 CALayer在实时调整大小期间缩放其内容。

关于ios - glGetRenderbufferParameterivOES 返回错误的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11830134/

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