我一直在使用我自己没有编写的着色器在 XNA 中实现一个照明系统,但我遇到了一个问题:如果游戏的尺寸是 2 的幂(现在它运行在 1024x512),则系统可以完美运行,但否则会在该行发生故障GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleStrip, Vertices, 0, 2);
,抛出异常,指出“XNA Framework Reach profile requires TextureAddressMode to be Clamp when using texture sizes that are not the power of two.”
在互联网搜索中,最常见的解决方案是将线GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp
直接放在上面的线上方。这个我试过了,没有效果。事实上,在我试图梳理出一个解决方案的过程中,在我用那条线设置它之前它似乎GraphicsDevice.SamplerStates[0]
是空的,这让我相信这个问题也可以通过选择它作为活动采样器状态来解决——尽管我也不知道该怎么做。
否则,根据我发现的其他信息,我相信我需要从着色器中设置 TextureAddressMode。我被引导到此页面以获取有关如何执行此操作的信息,但我承认仍然感到困惑——我以前从未使用过 HLSL,而且我不确定如何使用该页面上的信息。
如果我需要提供更多信息,我将非常乐意提供,我首先问了一个问题,这让我想到了我现在的问题。