繁体   English   中英

在哪里使用“ GL_EXT_color_buffer_half_float”?

[英]Where to use 'GL_EXT_color_buffer_half_float'?

如今,iOS支持名为'GL_EXT_color_buffer_half_float'的扩展,它可以让glRenderbufferStorage参数接受半浮点格式。

但是,在iOS中,renderbuffer应该像这样连接到视图的CAEAGLLayer:

- (BOOL) renderbufferStorage:(NSUInteger)target fromDrawable:(id)drawable

一个帧缓冲区只能创建一个渲染缓冲区。 因此,我认为我应该创建另一个帧缓冲区以附​​加新的渲染缓冲区,并为“半浮点”指定其内部格式。 我对吗?

另一个问题是,glTexImage2D可以使用另一个扩展名'OES_texture_half_float',我们已经可以创建直接连接到帧缓冲区的半浮点纹理。 似乎我们不需要渲染附加到framebuffer的半浮点渲染缓冲区。 那么“ GL_EXT_color_buffer_half_float”的使用场景是什么?

渲染缓冲区不必连接到CALayer。 在很多情况下,您需要进行某种形式的屏幕外渲染,在某些情况下,使用半浮点输出类型会很有用。

苹果在WWDC 2011 OpenGL ES会话中展示了一个这样的示例,他们在iPad 2上演示了延迟照明。Kearwood Gilbert在此处的博客文章中介绍了此技术,尽管只有标准的每通道8位色深。 杨扬(Simon Yeung)在这里的文章中展示了如何使用半浮标目标实现这一目标。

就个人而言,我已将其用于机器视觉中的图像处理应用程序。 例如,我最近正在研究Hough变换线检测器( 基于Dubská等人的工作 ),其中的一个步骤要求在平行坐标空间中检测局部最大值。 使用标准的加法混合来累积Hough变换票数会使RGBA色彩空间的8位色彩通道饱和,但是半浮点数将为我提供更大的动态范围,以挑选出真正的局部最大值。 使用此功能可大大减少此过程中的噪音(尽管iOS 6的新帧缓冲区读取操作可能使我使用自定义混合功能在四个颜色通道中编码更高动态范围的值)。

渲染到半浮点输出确实会带来一些性能后果,但是这可能是实现某些效果的唯一实用方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM