Я реализовал систему освещения в XNA с помощью шейдеров, которые не писал сам, и столкнулся с проблемой: система отлично работает, если размеры игры равны степени двойки (сейчас она работает в разрешении 1024x512). , но в противном случае разбивается на строку GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleStrip, Vertices, 0, 2);
, вызывая исключение, в котором говорится, что «профиль XNA Framework Reach требует, чтобы TextureAddressMode был Clamp при использовании размеров текстур, которые не являются степенями двойки».
При поиске в Интернете наиболее распространенным решением является размещение строки GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp
непосредственно над строкой выше. Я пробовал это, и это не имело никакого эффекта. Фактически, во время моих попыток найти решение казалось, что GraphicsDevice.SamplerStates[0]
было нулевым, прежде чем я установил его с помощью этой строки, что привело меня к мысли, что эту проблему, возможно, также можно решить, выбрав это в качестве активного состояния сэмплера: хотя я тоже не уверен, как это сделать.
В противном случае, основываясь на другой информации, которую я нашел, я считаю, что мне нужно установить TextureAddressMode из шейдера. Меня перенаправили на эту страницу. для получения информации о том, как это сделать, но я признаюсь, что все еще озадачен — я никогда раньше не использовал HLSL и не знаю, как использовать информацию на этой странице.
Если мне нужно предоставить какую-либо дополнительную информацию, я был бы более чем счастлив это сделать, и сначала я задал вопрос, который привел меня к моему настоящему здесь.