使用着色器进行计算

Rav*_*ven 13 shader data-transfer glsl

是否可以使用着色器计算某些值,然后将它们返回以供进一步使用?

例如,我将网格向下发送到GPU,有一些关于如何修改它的参数(改变顶点的位置),并收回结果网格?我认为这是不可能的,因为我没有看到任何从着色器到CPU的通信变量.我正在使用GLSL,所以只有统一,属性和变化.我应该使用属性还是制服,渲染后它们是否仍然有效?我可以更改这些变量的值并在CPU中读回吗?有一些方法可以在GPU中映射数据但是这些方法会被更改和有效吗?

这是我正在考虑的方式,虽然可能有其他方式,这对我来说是不可知的.如果有人能解释我的话,我会很高兴,因为我刚读了一些关于GLSL的书,现在我想编写更复杂的着色器,我不想放弃目前不可能的方法.

谢谢

And*_*rey 7

好问题!欢迎来到图形处理单元(GPGPU)通用计算的新世界.

使用像素着色器可以实现您想要做的事情.加载纹理(即:数据),应用着色器(执行所需的计算),然后使用"渲染到纹理"将结果数据从GPU传递到主存储器(RAM).

为此目的创建了一些工具,最着名的是OpenCLCUDA.它们极大地帮助了GPGPU,因此这种编程几乎就像CPU编程一样.

它们不需要任何3D图形体验(尽管仍然是首选:)).您不需要使用纹理做技巧,只需将数组加载到GPU内存中即可.处理算法是用稍微修改过的C语言编写的.最新版本的CUDA支持C++.

我建议从CUDA开始,因为它是最成熟的一个:http://www.nvidia.com/object/cuda_home_new.html