gpt4 book ai didi

ios - 如何在 iOS 中使用 GL_HALF_FLOAT_OES 类型的纹理?

转载 作者:技术小花猫 更新时间:2023-10-29 11:02:26 26 4
gpt4 key购买 nike

我正在尝试创建一个 float 纹理来存储由片段着色器创建的渲染管道的中间结果。我需要片段的值是带符号的 float

我知道有 OES_texture_float所有新的 iOS 设备都应该支持的扩展(即根据 Apple guide 从 iPhone 3GS/iPod Touch 3/iPad 开始)。

但是,当我使用

创建这样的纹理时
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_HALF_FLOAT_OES, NULL);

启动我的应用程序并在 Instruments 中检查它,它告诉我:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_HALF_FLOAT_OES, NULL) : (invalid enum=0x8d61): Invalid enum for argument 'type'

奇怪的是它仍然可以在我的 iPhone 4S 上运行,但不能在 iPhone 4 上运行(应该也支持)。但是,这两种设备都会出现错误消息。但在 iPhone 4 上,OpenGL 无法使用此纹理作为渲染目标来构建有效的帧缓冲区对象。在 4S 上运行良好。

你对我做错了什么有什么建议吗?

谢谢!

最佳答案

一年后我又遇到了这个问题。我做了一些研究,终于找到了解决方案:

在几乎所有的 iOS 设备上,都可以创建和使用 float 和半 float 类型的纹理。事实上,所有支持 OES_texture_float 扩展(或分别为 OES_texture_half_float)的设备都允许创建浮点类型的纹理。

但是,如果您尝试使用帧缓冲对象将渲染成浮点型纹理,设备需要支持EXT_color_buffer_half_float扩展也是如此。顾名思义,此扩展允许将半浮点类型的纹理绑定(bind)到 FBO 的渲染目标。

现在发现只有配备 PowerVR SGX 543 或 554 显卡的设备才支持此扩展,这些设备基本上是在 iPhone 4S 之后(包括)发布的所有设备。可以引用苹果的OpenGL ES Hardware Platform Guide for iOS获取设备及其功能列表。

总结:

如果你想渲染一个浮点类型的纹理,你需要检查你的设备是否支持 EXT_color_buffer_half_float 扩展,你需要创建你的纹理

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_HALF_FLOAT_OES, NULL);

如果您的设备不支持半浮点颜色缓冲区,您只能将无符号字节类型的纹理绑定(bind)到您的 FBO:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

(请注意,纹理的格式和内部格式(在本例中为 GL_RGBA)取决于 FBO 的附着点。)

关于ios - 如何在 iOS 中使用 GL_HALF_FLOAT_OES 类型的纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8621095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com