使用两个float16值创建OpenGL ES纹理(初学者)

时间:2016-12-14 09:59:11

标签: opengl-es

我需要使用以下规范为OpenGL ES 2.0应用程序创建纹理:

  • 每个像素都有两个组件(让我们在片段着色器中将它们称为r和g)。
  • 每个像素组件都是16位浮点数。
  • 这意味着纹理中的每个像素都有4个字节(每个组件2个字节/ 16位)。
  • 片段着色器应该能够将纹理采样为2个float16组件。
  • OpenGL ES 2.0必须支持所有格式,并尽可能高效。

适当的glTexImage2D调用看起来如何?

此致

1 个答案:

答案 0 :(得分:0)

OpenGL ES 2.x中不支持浮点纹理和浮点渲染目标。因此,简短的回答是“你不能做你想做的事”,至少不是本地的。

您可以通过将值对包装到RGBA8纹理或渲染目标中来模拟更高的精度,例如:这对RG值是一个值,而BA是另一个值,但您必须自己在着色器代码中打包/解包组件8位版本。例如,这是延迟渲染G缓冲区中非常常见的解决方案,但在某些低端移动GPU部件上可能相对昂贵(因为它基本上只是开销,而不是有用的渲染)。