是不是应该避免这种方法或编码风格?
为什么?
着色器的全部意义在于让您能够做您想做的事情,更有效地表达您想要做的事情,并让您自己更好地控制硬件。
您永远不应该害怕将某些东西重新用于不同的功能。纹理不存储颜色;它们存储数据,可以是颜色,但也可以是其他内容。您越早停止将纹理视为图片,您作为图形程序员的工作就会越好。
GPU 和 API 存在以供使用。随心所欲地使用它;不要让你认为应该如何使用 API 来限制你。
我不应该学习如何使用 OpenCL 并使用 GPU 的多线程功能来直接声明和传递我想要的代码吗?
昨天,我会说“是”。然而,今天发布了:OpenGL 计算着色器。
事实上,OpenGL ARB 和 Khronos 创建了这种着色器类型等等,这默认了 OpenCL/OpenGL 互操作并不是为渲染目的生成数据的最有效方式。毕竟,如果是这样,OpenGL 就没有必要拥有通用的计算功能。有 3 个版本的 GL 4.x 没有提供此功能。它现在在这里的事实基本上是 ARB 说,“是的,好的,我们需要这个。”
如果由许多制造硬件的人组成的 ARB 认为 CL/GL 互操作不是最快的方法,那么很明显应该使用计算着色器。
当然,如果你现在就尝试做某事,那将无济于事;只有 NVIDIA 支持计算着色器。甚至那只是在测试版驱动程序中。AMD 需要几个月的时间才能获得对它们的支持,而在这种支持变得足够稳固和稳定以供使用之前,还需要更多的时间。
即便如此,您也不需要计算着色器来生成数据。人们已经使用变换反馈和几何着色器来进行 LOD 和截锥剔除以进行实例渲染。不要害怕在“OpenGL 绘制东西”框之外思考。