gpt4 book ai didi

ios - GLKit 离屏渲染到纹理不工作

转载 作者:行者123 更新时间:2023-11-29 03:10:35 25 4
gpt4 key购买 nike

当我尝试在 OpenGl ES 2.0 中创建一个带有附加纹理的 FBO 时,如下所示:

    glGenFramebuffers(1, &framebuffer);
glGenTextures(1, &textureId);

glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

glBindTexture(GL_TEXTURE_2D, textureId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, framebuffer, 0);

GLenum status;
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
switch(status) {
case GL_FRAMEBUFFER_COMPLETE:
NSLog(@"fbo complete");
break;

case GL_FRAMEBUFFER_UNSUPPORTED:
NSLog(@"fbo unsupported");
break;

default:
/* programming error; will fail on all hardware */
NSLog(@"Framebuffer Error");
break;
}

glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

然后像这样应用它:

    glBindFramebuffer(GL_FRAMEBUFFER, renderTarget.framebufferId);
glBindTexture(GL_TEXTURE_2D, renderTarget.textureId);

glViewport(0, 0, renderTarget.width, renderTarget.height);

然后在上面渲染一些东西,最后将附加的纹理绘制到屏幕上。结果是一个空的黑屏(如果我直接将它渲染到屏幕上,一切正常)。我尝试了几个 FBO 教程(当前代码是其中之一)但没有区别。

此外,当我使用 xcode 中的 OpenGl 调试器时,我在 glDrawArrays 上收到类似“帧缓冲区加载缓慢问题”的警告,但我也可以看到纹理不为空(我可以看到具有正确大小和正确 glClearColor 的纹理)

如果有人以前遇到过这个问题并且知道我在这里做错了什么,那就太好了:)

提前致谢

最佳答案

好的解决了我的问题。有一些较小的问题,但主要问题是我将帧缓冲区和纹理绑定(bind)在一起(请参阅顶部相关问题)。另一个问题是 $!&()#^ (我的意思是很棒的)opengl 坐标系(左下角),但这是一个快速修复。现在一切工作正常,但绘制全屏四边形时性能会很差,但我会为此提出另一个问题。

关于ios - GLKit 离屏渲染到纹理不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295881/

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