Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 渲染到纹理或屏幕外帧缓冲区_Iphone_Opengl Es_Framebuffer_Fbo_Render To Texture - Fatal编程技术网

Iphone 渲染到纹理或屏幕外帧缓冲区

Iphone 渲染到纹理或屏幕外帧缓冲区,iphone,opengl-es,framebuffer,fbo,render-to-texture,Iphone,Opengl Es,Framebuffer,Fbo,Render To Texture,我在iPhone上使用OpenGLES渲染纹理和屏幕外帧缓冲区时遇到问题 (来源:) (来源:) 第一幅图显示直接渲染到CaeAglayer的麻将牌,这是正确的。第二个显示渲染到屏幕外帧缓冲区的平铺,使用glCopyTexImage2D复制到纹理,以及渲染到caeaglayer的纹理。两者都使用白色不透明四边形作为背景。我也尝试过直接渲染纹理,但效果与屏幕外帧缓冲区相同 创建帧缓冲区的代码: GLuint framebuffer; glGenFramebuffersOES(1

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


(来源:)

(来源:)

第一幅图显示直接渲染到
CaeAglayer
的麻将牌,这是正确的。第二个显示渲染到屏幕外帧缓冲区的平铺,使用
glCopyTexImage2D
复制到纹理,以及渲染到
caeaglayer
的纹理。两者都使用白色不透明四边形作为背景。我也尝试过直接渲染纹理,但效果与屏幕外帧缓冲区相同

创建帧缓冲区的代码:

    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);
我使用VBO从纹理图集绘制所有瓷砖,只需一次调用
gldrawerelements
,即可传递交错顶点数据(坐标、纹理坐标、颜色)。我使用RGBA8888纹理格式,使用
glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去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);

希望这有帮助

渲染的图像有什么不正确之处?你希望它们看起来像什么?@Frogblast第一个是正确的,没有渲染到屏幕外帧缓冲区或纹理。显示的代码不够。FBO可能不是问题。可能是混合模式问题;检查alpha通道和blendmode设置(或此处的post代码)