【发布时间】:2017-10-07 00:08:03
【问题描述】:
我正在尝试利用 gpu 的并行性来制作图像处理应用程序。我有一个着色器,它采用两个纹理,并基于一些统一变量计算输出纹理。但是每个纹理像素都需要一个额外的元数据字节,而不是透明度 alpha 值,这在计算中是必需的:
所以我考虑每帧运行两次着色器,一次将动态元数据计算为单字节纹理,一次计算生成的 Paint Texture,我需要 3 个字节(以限制内存使用,因为可能一次加载相当多的此类纹理)。
我觉得上面的问题有点复杂,我是用opengl画的 屏幕,但这次我需要绘制两种不同的纹理, 我不知道该怎么做。此外,gl_FragColor 内置变量的 类型是 vec4,但我需要不同的输出值。
- 所以,总结一下,片段着色器是否可以输出 除了 vec4 之外还有什么?
- 是否可以通过一次调用保存到两个不同的纹理?
- 是否可以制作可编辑的纹理来存储更改,直到编辑结束并且必须将数据传回 cpu?
- 什么 openGL 调用对上述情况最有用?
- 油漆纹理也应该能够被检索以显示在屏幕上。
以上内容可以很容易地通过 cpu 上的 blitting 纹理来完成。 我可以将所有相关数据保存在 cpu 上,以 60 次/秒的速度完成所有工作, 并通过将数据从 cpu 传递到 gpu 来更新相关纹理。 用于每帧更改纹理的相对较小区域 (大约 512x512 大小纹理的总比例的约 20%),您认为上述方法值得麻烦吗?
【问题讨论】: