Установка TextureAddressMode с помощью HLSL

Я реализовал систему освещения в XNA с помощью шейдеров, которые не писал сам, и столкнулся с проблемой: система отлично работает, если размеры игры равны степени двойки (сейчас она работает в разрешении 1024x512). , но в противном случае разбивается на строку GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleStrip, Vertices, 0, 2);, вызывая исключение, в котором говорится, что «профиль XNA Framework Reach требует, чтобы TextureAddressMode был Clamp при использовании размеров текстур, которые не являются степенями двойки».

При поиске в Интернете наиболее распространенным решением является размещение строки GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp непосредственно над строкой выше. Я пробовал это, и это не имело никакого эффекта. Фактически, во время моих попыток найти решение казалось, что GraphicsDevice.SamplerStates[0] было нулевым, прежде чем я установил его с помощью этой строки, что привело меня к мысли, что эту проблему, возможно, также можно решить, выбрав это в качестве активного состояния сэмплера: хотя я тоже не уверен, как это сделать.

В противном случае, основываясь на другой информации, которую я нашел, я считаю, что мне нужно установить TextureAddressMode из шейдера. Меня перенаправили на эту страницу. для получения информации о том, как это сделать, но я признаюсь, что все еще озадачен — я никогда раньше не использовал HLSL и не знаю, как использовать информацию на этой странице.

Если мне нужно предоставить какую-либо дополнительную информацию, я был бы более чем счастлив это сделать, и сначала я задал вопрос, который привел меня к моему настоящему здесь.


person bionicOnion    schedule 31.05.2012    source источник


Ответы (1)


В вашем HLSL найдите строку, объявляющую сэмплер, который использует пиксельный шейдер.

Вы можете установить адресный режим для зажима в этой строке.

SamplerState somethingLikeThis {
    Filter = MIN_MAG_MIP_LINEAR;
    AddressU = Clamp;
    AddressV = Clamp;
};
person Andy    schedule 31.05.2012
comment
Спасибо. Я все еще не совсем уверен, как использовать определяемый мной сэмплер; однако я смог изменить уже используемые семплеры таким образом, что теперь программа работает. Спасибо. - person bionicOnion; 31.05.2012