glReadPixel不适用于在OpenGL ES 1.0上获得深度
glReadPixels doesn't work for getting depth on OpenGL ES 1.0
我正在尝试使用glReadPixels
函数从深度缓冲区获取深度值。它总是向我返回 0。
首先,我创建深度缓冲区附件:
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[self.context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
if (USE_DEPTH_BUFFER)
{
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
}
然后我调用glReadPixels
函数从深度缓冲区获取深度值:
float depth = 0.0f;
glReadPixels(point.x, self.renderUIView.frame.size.height - point.y, 1, 1, GL_DEPTH_COMPONENT16_OES, GL_FLOAT, &depth);
但它不起作用,深度值始终为 0。我尝试从glGetError()
获取错误代码,它返回1280
。我错过了什么设置吗?
OpenGL ES(任何 API 版本)不支持您正在尝试的内容 - 无法在深度缓冲区上使用glReadPixels
。
另外,一般来说,将任何真实3D游戏的glReadPixels
作为主渲染循环的一部分是一个"非常糟糕的主意" - 它会强制管道刷新,这将完全杀死您的性能。
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- OpenGL在启用深度测试时不会丢弃我的碎片
- C++尝试深度复制唯一指针时出现内存访问冲突
- 试图找到二叉树的深度
- 操纵安卓相机的深度图导致应用程序崩溃
- 深度值没有意义 R200 相机
- 对如何制作双链表的深度副本感到困惑?
- 以C++访问 HoloLens 2 深度图像
- 在 c++ 中使用深度复制的运算符重载
- 如何深度复制链表对象指针
- 提升图:当我的图使用 listS 作为 VertexList 时,如何调用深度优先搜索()?
- 在 OpenCV 中按深度维度排序,C++
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- SDL + OpenGL ES 2.0 使用着色器显示纹理
- 如何在编译时获得多维 std::vector 的深度?
- 需要帮助生成C++深度有限的随机表达式树
- C++ 可变参数模板实例化深度超过最大值 900
- C++ - 如何找到 n 元树的给定节点的深度
- glReadPixel不适用于在OpenGL ES 1.0上获得深度
- OpenGL ES深度缓冲区渲染(iOS模拟器与真实设备)