iOS,iPhone,iPad(OpenGL ES)是否支持PBuffer?

时间:2011-09-03 09:23:09

标签: iphone ios ipad opengl-es opengl-es-2.0

iPhone OpenGL ES实现是否支持PBuffer?

我在文档中环顾四周,找不到类似“eglCreatePbufferSurface”的内容

如果是,有人可以发布示例代码以供其使用吗?

谢谢

1 个答案:

答案 0 :(得分:2)

像素缓冲区是OpenGL的特定于平台的扩展。在ES中没有这样的扩展,因为帧缓冲对象是核心API的一部分。帧缓冲区对象可用于完整的屏幕外渲染,通常用于纹理,然后用于渲染管道中的某些其他任务。这就是在OpenGL ES中实现深度缓冲阴影和延迟渲染等效果的方法。

例如,要生成一个帧缓冲区对象,其颜色和深度缓冲区链接到您已经在别处生成的纹理,您可能会这样做:

glGenFramebuffers(1, &framebufferID);
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colourTextureID, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTextureID, 0);

if((status = glCheckFramebufferStatus(GL_FRAMEBUFFER)) != GL_FRAMEBUFFER_COMPLETE)
{
    // there was some sort of problem
}

稍后您将使用glBindFramebuffer绑定该帧缓冲区。如果要渲染实际看到的内容,则应重新绑定链接到显示的帧缓冲区。您将在某处使用EAGLContext -renderbufferStorage:fromDrawable:创建一个帧缓冲区对象,该对象使用CAEAGLLayer作为颜色缓冲区的存储空间。

链接到帧缓冲区的每个事物(例如颜色缓冲区的存储或深度缓冲区的存储)称为渲染缓冲区。您可以要求驱动程序在所需的任何区域构建它们,而无需通过glGenRenderbuffersglRenderbufferStorage链接到纹理。因此,例如,如果您愿意,您可以将颜色缓冲区最终放在纹理中,并让GPU为自身找出深度缓冲区的存储空间。