【发布时间】:2014-10-30 00:55:00
【问题描述】:
我有一个 16 位灰度图像,我想在上面绘制注释。 最初我从 Direct 2d 开始,后来我意识到在 Direct 2d 中无法渲染 16 位/通道
后来我转向 Open Gl,现在我无法得出结论 Open gl 是否支持 16 位/通道图像的渲染。我研究了帧缓冲区对象。还有 mesa3d 库
【问题讨论】:
我有一个 16 位灰度图像,我想在上面绘制注释。 最初我从 Direct 2d 开始,后来我意识到在 Direct 2d 中无法渲染 16 位/通道
后来我转向 Open Gl,现在我无法得出结论 Open gl 是否支持 16 位/通道图像的渲染。我研究了帧缓冲区对象。还有 mesa3d 库
【问题讨论】:
是的,OpenGL 支持每个组件具有 16 位的渲染目标。以下来自OpenGL 3.3规范,是支持DX10级别硬件的最新版本。
您可以通过访问 www.opengl.org 并单击靠近左上角的“文档”菜单中的“OpenGL 注册表”条目来找到规范文档。这会将您带到https://www.opengl.org/registry。在该页面上,您可以查看/下载 PDF 格式的所有规范文档。
在 3.3 规范中,关键信息位于第 3.9 节(纹理)第 142/143 页的必需的纹理格式下。在纹理和渲染缓冲区颜色格式列表(其中“渲染缓冲区”表示可以渲染的格式),您会发现:
这些是具有 4、2 和 1 个分量的 16 位/分量格式。
仅纹理颜色格式在此下方包括:
这是具有 3 个组件的 16 位/组件格式。
因此,您询问的确切 48 位 RGB 格式结果不是作为渲染目标有效。但以使用更多内存为代价,64 位 RGBA 格式应该可以正常工作。
【讨论】:
texelFetch 函数。对于其他缩放级别,请使用常规的texture GLSL 纹理访问函数。