0

我一直在使用我自己没有编写的着色器在 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,而且我不确定如何使用该页面上的信息。

如果我需要提供更多信息,我将非常乐意提供,我首先问了一个问题,这让我想到了我现在的问题

4

1 回答 1

0

在您的 HLSL 中查找声明像素着色器正在使用的采样器的行。

您可以将地址模式设置为夹在该行中。

SamplerState somethingLikeThis {
    Filter = MIN_MAG_MIP_LINEAR;
    AddressU = Clamp;
    AddressV = Clamp;
};
于 2012-05-31T08:06:10.667 回答