iPhone OpenGL ES实现是否支持PBuffer?
我在文档中环顾四周,找不到类似“eglCreatePbufferSurface”的内容
如果是,有人可以发布示例代码以供其使用吗?
谢谢
答案 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作为颜色缓冲区的存储空间。
链接到帧缓冲区的每个事物(例如颜色缓冲区的存储或深度缓冲区的存储)称为渲染缓冲区。您可以要求驱动程序在所需的任何区域构建它们,而无需通过glGenRenderbuffers
和glRenderbufferStorage
链接到纹理。因此,例如,如果您愿意,您可以将颜色缓冲区最终放在纹理中,并让GPU为自身找出深度缓冲区的存储空间。