在C ++ Basic Sample中运行HLSL

我正在考虑用HLSL编写着色器,并在AviSynth插件中运行它们来处理video。 这将允许访问各种着色器,也有GPU加速。 我是一名.NET程序员,对HLSL,Direct,C ++或AviSynth插件开发没有经验。 一次学习是很多的。 所以在花费太多时间之前,我有几个问题。

  1. 可以轻松完成在C ++中运行HLSL脚本,复制input帧数据,并将输出帧数据复制回来,在两个接口之间进行桥接?

  2. 在不支持OpenCL的计算机上,HLSL脚本仍会在CPU上运行,还是拒绝运行?

  3. 我还没有find使用编译HLSL的示例。 我无法在Windows 7上使用Windowsapp store模板,在不编译的过时组件上运行ActiveX SDK示例。 我在哪里可以find一个很好的教程或样本开始?

这里的这个似乎是描述了需要做什么的基础知识。 加载和使用HLSL着色器?

HLSL是Direct X使用的高级着色语言.HLSL着色器在运行时在GPU上运行,只能由CPU在Visual Studio内的特殊debugging模式下运行。 HLSL需要在您的应用程序中设置Direct X管道。 Visual Studio可以为你编译你的着色器,但你必须加载它们并将它们提供给你的管道。 然后,您必须指示Direct X以给定的几何graphics运行着色器逻辑。 如果你正在做video处理/回放,这个几何graphics可能只是一个简单的矩形缓冲区。

打开CL不是直接X,并且与HLSL没有关系,除了它们都在GPU上运行。 如果一台计算机不支持DirectX,那么当你设置你的DirectX管道时,你将不得不检测到你的DirectX管道,并且回到不同的方式来处理你的graphics逻辑,或者只是失败而已(这是我的建议, )。

你应该把C ++和Direct X一起用作.NET实现(XNA Game框架),而Monogame(XNA的开源实现)非常出色,我认为它不适用于AviSynth。 另外我相信XNA和Monogame使用的FX着色器是相当不赞成的。

学习C ++和Direct X是完成这个任务的最佳select,但这不是一个小任务。 当然如果你碰到一些更具体的问题,堆栈交换是一个很好的问题。