Ios 在哪里使用';GL#u EXT#u color#u buffer#u half#u float';?

Ios 在哪里使用';GL#u EXT#u color#u buffer#u half#u float';?,ios,opengl-es,Ios,Opengl Es,现在,iOS支持一个名为“GL_EXT_color_buffer_half_float”的扩展,它可以让glRenderbufferStorage的参数接受半浮点格式 但是,在iOS中,renderbuffer应该像这样连接到视图的CaeAglayer: - (BOOL) renderbufferStorage:(NSUInteger)target fromDrawable:(id)drawable 并且只能为一个帧缓冲区创建一个renderbuffer。因此,我想我应该创建另一个帧缓冲区来附

现在,iOS支持一个名为“GL_EXT_color_buffer_half_float”的扩展,它可以让glRenderbufferStorage的参数接受半浮点格式

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

- (BOOL) renderbufferStorage:(NSUInteger)target fromDrawable:(id)drawable
并且只能为一个帧缓冲区创建一个renderbuffer。因此,我想我应该创建另一个帧缓冲区来附加一个新的renderbuffer,并为'half float'指定它的内部格式。我说得对吗


另一个问题是,glTexImage2D可以使用另一个扩展“OES_纹理_半浮点数”,我们已经可以创建直接附加到帧缓冲区的半浮点数纹理。似乎我们不需要渲染连接到帧缓冲区的半浮点renderbuffer。那么“GL\u EXT\u color\u buffer\u half\u float”的使用场景是什么呢?

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

苹果在WWDC 2011 OpenGL ES会议上展示了一个这样的例子,他们展示了在iPad2上工作的延迟照明。Kearwood Gilbert在中描述了这项技术,尽管只使用标准的每通道8位颜色深度。Simon Yeung展示了如何在半浮动目标的情况下实现这一点

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


渲染为半浮点输出确实会对性能产生一些影响,但这可能是实现某些效果的唯一实用方法。

谢谢您的回复。但我仍然感到困惑的是,当苹果在2011年WWDC上推出这个扩展时,他们说它可以用于实现HDR效果。但在我看来,如果你想做HDR效果,你必须使用片段着色器来计算色调映射,所以你还必须使用一个附加在屏幕外帧缓冲区的纹理。在此过程中不需要渲染缓冲区。我说得对吗?