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