Зажим TextureAddressMode в XNA

Я работал над реализацией системы 2D-освещения в XNA, и я заставил систему работать, пока размеры моего окна равны степени двойки. В противном случае программа завершится ошибкой на этой строке:

GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleStrip, Vertices, 0, 2);

В исключении указано, что «профиль XNA Framework Reach требует, чтобы TextureAddressMode был Clamp при использовании размеров текстур, которые не являются степенью двойки», и каждая попытка, которую я предпринял, чтобы решить эту проблему, потерпела неудачу - самое распространенное решение, которое я нашел. в Интернете нужно поместить строку GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp; прямо над строкой выше, но это не решило мою проблему.

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


person bionicOnion    schedule 29.05.2012    source источник
comment
Вы используете несколько этапов текстуры? Если это так, вам нужно обязательно сбросить состояния сэмплера для каждого этапа (для этого предназначен индекс [0]). Если нет, то используете ли вы какие-либо шейдеры? Шейдеры могут переопределять адресный режим. Убедитесь, что они настраивают его соответствующим образом.   -  person Cole Campbell    schedule 29.05.2012
comment
Я не уверен, что вы подразумеваете под этапами текстуры (я новичок в этом), но я использую шейдеры. Я не писал их сам, и я не совсем уверен в том, как именно работают шейдеры на техническом уровне — как шейдер устанавливает адресный режим и как мне лучше всего вернуть его в тот режим, в котором он мне нужен. быть в?   -  person bionicOnion    schedule 29.05.2012
comment
Вы можете указать состояние выборки внутри шейдера... поэтому вам следует проверить код hlsl...   -  person Blau    schedule 29.05.2012
comment
Я никогда раньше не писал на HLSL; как я могу указать состояние сэмплера?   -  person bionicOnion    schedule 29.05.2012
comment
См. здесь: msdn.microsoft. com/en-us/library/windows/desktop/   -  person Cole Campbell    schedule 30.05.2012
comment
Спасибо. Теперь, когда я определил состояние сэмплера, как мне указать его как активное?   -  person bionicOnion    schedule 30.05.2012
comment
Вы выполняете рендеринг в какую-то цель рендеринга?   -  person Ani    schedule 31.05.2012


Ответы (1)


Разве это не тот же вопрос, который вы задавали раньше?

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

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

SamplerState somethingLikeThis {
    Filter = MIN_MAG_MIP_LINEAR;
    AddressU = Clamp;
    AddressV = Clamp;
};
person Andy    schedule 31.05.2012
comment
Это может быть в файле Effects.fx или подобном. - person Rusty Nail; 26.03.2016