C# 使用HLSL设置TextureAddressMode

C# 使用HLSL设置TextureAddressMode,c#,xna,xna-4.0,hlsl,lighting,C#,Xna,Xna 4.0,Hlsl,Lighting,我一直在使用我自己没有编写的着色器在XNA中实现一个照明系统,但我遇到了一个问题:如果游戏的尺寸是二的幂(现在它运行在1024x512),那么该系统工作得非常好,但如果不是这样,它将在第行GraphicsDevice.DrawUserPrimitives处崩溃(PrimitiveType.TriangelStrip,顶点,0,2);,引发一个异常,该异常声明“XNA Framework Reach profile要求在使用非二次幂的纹理大小时将TextureAddressMode钳制。” 在互联

我一直在使用我自己没有编写的着色器在XNA中实现一个照明系统,但我遇到了一个问题:如果游戏的尺寸是二的幂(现在它运行在1024x512),那么该系统工作得非常好,但如果不是这样,它将在第
行GraphicsDevice.DrawUserPrimitives处崩溃(PrimitiveType.TriangelStrip,顶点,0,2);
,引发一个异常,该异常声明“XNA Framework Reach profile要求在使用非二次幂的纹理大小时将TextureAddressMode钳制。”

在互联网搜索中,最常见的解决方案是将行
GraphicsDevice.SamplerStates[0]=SamplerState.LinearCamp
直接放在上面的行的上方。我已经尝试过了,但没有效果。事实上,在我尝试梳理解决方案的过程中,似乎是
GraphicsDevice.SamplerStates[0]
在我使用该行设置它之前为空,这使我相信这个问题也可以通过选择它作为活动采样器状态来解决——尽管我也不确定如何做到这一点

否则,根据我找到的其他信息,我认为我需要在着色器中设置TextureAddressMode。我被要求了解如何设置,但我承认仍然感到困惑——我以前从未使用过HLSL,我不确定如何使用该页面上的信息


如果我需要提供更多的信息,我非常乐意这样做,我首先问了一个问题,这个问题引导我走向我现在的问题。

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

您可以将地址模式设置为在此行中钳制

SamplerState somethingLikeThis {
    Filter = MIN_MAG_MIP_LINEAR;
    AddressU = Clamp;
    AddressV = Clamp;
};

谢谢。我仍然不能完全确定如何使用我定义的采样器;但是,我能够以这样一种方式更改已经使用的采样器,该程序现在可以工作了。谢谢。