繁体   English   中英

OpenGL 3.3:如何在传递到顶点和片段着色器之前实现解压缩纹理数据

[英]OpenGL 3.3: How implement uncompressing texture data before passing to vertex and fragment shader

我从打包的相机中提取 12 位数据,因此 3 个字节定义了 2 个连续像素。

在将数据传递给顶点着色器进行进一步处理之前,有没有办法将它们解压缩为两个 16 位值?

这是这样的想法:

  1. 将纹理复制到 PBO(像素缓冲区对象):

  2. 现在这个 PBO 可以被计算着色器使用,在那里可以执行解压缩。

  3. 结果 PBO 可以复制回纹理。

要在 gpu 上进行此操作,您需要直接访问缓冲区元素,而 opengl 3.3 没有。 所以你只能用 310es、430 版本或 vulkan 来做到这一点。

也可以使用 cuda 或 OpenCL 解压缩图像。 在这种情况下,步骤 2 应替换为 cuda 或 OpenCL 例程。

另一个想法:

您可以将纹理加载为一个组件纹理,并在片段着色器中使用 texelFetch。 在这种情况下,您将直接访问纹理缓冲区的字节。

暂无
暂无

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

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