OpenGL ES 2.0 :glReadPixels() 带有 float 或 half_float 纹理

发布于 2024-11-03 12:12:46 字数 242 浏览 4 评论 0原文

我正在为 iPhone (iOS 4.1) 编写一个 OpenGL ES 2.0 应用程序。在着色器中完成的计算结束时,我需要将一些数据写回 CPU。据我所知,这可以通过 glReadPixels() 来完成。为了保持精度,我想在着色器之间使用 half_float 或浮动纹理,这似乎受到扩展的支持。

问题: 是否可以使用 glReadPixels() 读取 float 或 half_float 纹理?

谢谢,

拉尔斯

I am writing an OpenGL ES 2.0 app for the iPhone (iOS 4.1). At the end of the computations, which are done in the shaders, i need to write back some data to the CPU. As far as I know this can be done by glReadPixels(). In order to keep precision, i want to use half_float or float textures between the shaders, which seem to be supported by extensions.

Question:
Is it possible to read float or half_float textures with glReadPixels() ?

Thanks,

Lars

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

锦欢 2024-11-10 12:12:46

我也曾面对过这个问题。对于 iOS,您可以使用 GL_EXTENSIONS 参数检查可用扩展列表 - GL_OES_texture_float 必须存在。但!根据规范,这并没有提供从GPU读取浮点值的机会。这是来自 glReadPixels() 文档:

仅接受两个格式/类型参数对。 GL_RGBA/GL_UNSIGNED_BYTE 始终被接受,并且可以通过查询 GL_IMPLMENTATION_COLOR_READ_FORMAT 和 GL_IMPLMENTATION_COLOR_READ_TYPE 来发现其他可接受的对。

因此,您可以使用以下代码检查可以读取的可用类型/格式:

GLint ext_format, ext_type;
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &ext_format);
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &ext_type);

I have faced up to this problem either. For iOS you can check the available extensions list with GL_EXTENSIONS parameter - GL_OES_texture_float must present. But! According to specification this doesn't give an opportunity to read float values from GPU. This is from glReadPixels() docs:

Only two format/type parameter pairs are accepted. GL_RGBA/GL_UNSIGNED_BYTE is always accepted, and the other acceptable pair can be discovered by querying GL_IMPLEMENTATION_COLOR_READ_FORMAT and GL_IMPLEMENTATION_COLOR_READ_TYPE.

So you can check available types/formats you can read with code below:

GLint ext_format, ext_type;
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &ext_format);
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &ext_type);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文