Скажем, у меня есть эти две переменные в моем шейдера:Set шейдера из C# в MonoGame
HLSL
texture ModelTexture;
sampler2D TextureSampler
И это, как я установил бы текстуру:
C#
myEffect.Parameters["ModelTexture"].SetValue(woodTexture);
Что делать с пробоотборником? Нет перегрузки EffectParameter.SetValue(SamplerState)
, но я хочу изменить фильтры во время выполнения. Как мне это сделать?
Я уверен, что остальная часть кода в порядке, потому что если я инициализирую TextureSampler
непосредственно в HLSL, он правильно рисует текстурированные объекты.
Edit:
Я попытался установить объект SamplerState в GraphicsDevice.
C#
GraphicsDevice.SamplerStates[0] = new SamplerState { Filter = TextureFilter.Linear };
HLSL
sampler2D TextureSampler : register(s0);
Теперь назначение текстур (см 2-й фрагмент) бросает NullReferenceException
.
Я также попытался установить текстуру, как выше, а не с помощью EffectParameter
:
C#
GraphicsDevice.Textures[0] = woodTexture;
HLSL
texture ModelTexture : register(t0);
Программа компилируется и работает, но текстура не загружена (выделенный объект черный).
Я отредактировал свой ответ. –
@ matt-pielat Настройте свою текстуру с помощью «GraphicsDevice.Textures» и обратитесь к тексту в файле shader с помощью 'sampler texture: register (s0);' где индекс сэмплера соответствует индексу в коллекции текстур. См. Пример из этой [ссылки] (https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.graphicsdevice.textures.aspx) – MRB
Компилирует и запускает, но рендер-модель черная. –