我为自己承担了相当艰巨的挑战.在我的XNA游戏中,我想实现Blargg的NTSC过滤器.这是一个C库,它转换位图使其看起来像是在具有NTSC标准的CRT电视上输出的.真的很准确.
我曾经尝试过的第一件事就是通过将其称为dll来使用C库本身.在这里,我有两个问题,1.我无法正确复制一些数据,因此图像搞砸了,但更重要的是,2.它非常慢.它需要获取XNA Texture2D位图数据,将其传递给过滤器,然后再次将数据设置为纹理.帧率被破坏了,所以我不能沿着这条路走下去.
现在我正在尝试将滤镜转换为像素着色器.这里的问题(如果你喜欢看代码 - 我正在使用SNES,因为它是最简单的)是它处理非常大的数组,并依赖于有趣的指针操作.我已经做了很多工作,重写算法以按像素独立工作,就像像素着色器需要的那样.但我不知道这是否会奏效.我来找你,看看是否有可能完成这项工作.
编辑:#2的附录.我刚读到某个地方不仅hlsl不能通过变量访问数组,而且即使要展开它,索引也必须在编译时计算.这是真的,还是"展开"解决了这个问题?如果这是真的,我想我搞砸了.有什么方法吗?我的算法基本上是一个美化版本的"输入像素是这种颜色,所以在这个巨大的数组中查找我的输出像素值."
根据我对着色器语言的有限理解,您的问题可以通过使用纹理而不是数组轻松解决。