Tag: opencl

C#渲染OpenCL生成的图像

问题:我正在尝试实时渲染动态Julia分形。 因为分形在不断变化,我需要能够每秒渲染至少20帧,最好是更多。 您需要了解的Julia分形是每个像素都可以独立计算,因此任务很容易并行化。 第一种方法:因为我已经习惯在C#中使用Monogame,所以我尝试在HLSL中编写一个可以完成这项工作的着色器,但是编译器一直在抱怨,因为我用了超过允许的64个算术插槽(我需要至少一千个) )。 第二种方法:使用CPU,可以预期大约两分钟生成一帧。 第三种方法:我开始使用名为Cloo的包装器学习OpenCL的基础知识。 实际上,通过使用OpenCL计算图像数据,然后从GPU获取数据,将数据存储在Texture2D中并将纹理绘制到屏幕上,我获得了快速,好的结果。 对于1000×1000图像,我每秒大约可以获得13帧。 这仍然不是我所希望的,因为图像应该是1920×1080来填满我的屏幕,并且帧速率非常明显。 我意识到我实际上是在GPU上生成图像,将数据发送到CPU然后将其发送回GPU,所以这似乎是一个不必要的步骤,如果可以删除,可能会解决我的问题。 我在一些论坛上看到OpenGL能够做到这一点,但我无法找到具体的信息。 问题:首先,是否有一种简单的方法可以直接绘制OpenCL生成的数据,而不涉及CPU(最好与Monogame兼容)? 如果不是这种情况,是否可以使用OpenGL实现它,然后将其与Monogame结合使用? 其次,为什么用简单的HLSL着色器不可能实现这一点? 由于HLSL和OpenCL都使用GPU,为什么HLSL在进行许多算术运算时会受到如此多的限制? 编辑 我发现这个网站大致完成了我想要的,但是使用了GLSL着色器。 这再次质疑我在HLSL中的成功。 不幸的是,由于monogame不支持GLSL(尚未),我的问题仍然没有答案。