gpt4 book ai didi

iphone - 渲染到纹理或离屏帧缓冲区

转载 作者:行者123 更新时间:2023-12-03 18:48:08 25 4
gpt4 key购买 nike

我在 iPhone 上使用 OpenGLES 渲染纹理和离屏帧缓冲区时遇到问题。

alt text
(来源:imagehost.org)
alt text
(来源:imagehost.org)

第一张图片显示直接渲染到 CAEAGLLayer 的麻将牌,这是正确的。第二张图显示了渲染到离屏帧缓冲区的图 block ,使用 glCopyTexImage2D 复制到纹理,并将纹理渲染到 CAEAGLLayer。两者都使用白色不透明四边形作为背景。我也尝试过直接渲染到纹理,但效果与离屏帧缓冲区相同。

我创建帧缓冲区的代码:

    GLuint framebuffer;
glGenFramebuffersOES(1, &framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);

GLuint renderbuffer;
glGenRenderbuffersOES(1, &renderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES,
512, 512);

glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES,
GL_RENDERBUFFER_OES, renderbuffer);

我通过一次调用 glDrawElements 使用 VBO 传递隔行扫描顶点数据(坐标、纹理坐标、颜色)来绘制纹理图集中的所有图 block 。我使用 RGBA8888 纹理格式,使用 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 混合函数在两个三角形(四边形)上绘制每个图像。我不使用深度缓冲区(在所有情况下)。

有人可以告诉我可能是什么问题吗?

最佳答案

看来您还没有发布足够的代码,但从发布的内容来看,您似乎将 FBO 中纹理和渲染缓冲区的角色融合在一起。 (你的帖子标题说渲染到纹理)您还忘记定义绘制缓冲区。

附加到 FBO 的渲染缓冲区通常用作深度缓冲区。因此请尝试以下操作:

GLuint framebuffer;
glGenFramebuffersOES(1, &framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);

//set up the Depth Buffer
GLuint renderbuffer;
glGenRenderbuffersOES(1, &renderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24,
512, 512);

glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER_OES, renderbuffer);
//set up the texture that you will be rendering to
glActiveTexture(GL_TEXTURE0);
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
//add various other texture parameters here
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB8_OES, 512,512);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureID, 0);
// define your draw buffers
GLenum drawBuffers[1] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1, drawBuffers);

希望有帮助

关于iphone - 渲染到纹理或离屏帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759488/

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