Sagen, ich habe diese beiden Variablen in meinem Shader:Texturfilter des Set-Shader von C# in monogame
HLSL
texture ModelTexture;
sampler2D TextureSampler
Und das ist, wie ich die Textur gesetzt würde:
C#
myEffect.Parameters["ModelTexture"].SetValue(woodTexture);
Was ist mit dem Sampler? Es gibt keine EffectParameter.SetValue(SamplerState)
Überladung aber ich möchte Filter in der Laufzeit ändern. Wie gehe ich vor?
Ich bin mir ziemlich sicher, der Rest des Codes ist in Ordnung, denn wenn ich TextureSampler
direkt in HLSL initialisiere, zeichnet es richtig texturierte Objekte.
Edit:
Ich habe versucht, ein SamplerState Objekt in der Graphics Einstellung.
C#
GraphicsDevice.SamplerStates[0] = new SamplerState { Filter = TextureFilter.Linear };
HLSL
sampler2D TextureSampler : register(s0);
Jetzt Texturzuweisung (die 2. Schnipsel sehen) wirft NullReferenceException
.
Ich habe auch versucht, wie oben stattdessen die Textur Einstellung von über EffectParameter
:
C#
GraphicsDevice.Textures[0] = woodTexture;
HLSL
texture ModelTexture : register(t0);
Das Programm kompiliert und ausgeführt, aber die Textur ist nicht geladen (gerendertes Objekt ist schwarz).
Ich habe meine Antwort bearbeitet. –
@ matt-pielat Stellen Sie Ihre Textur mit 'GraphicsDevice.Textures' ein und beziehen Sie sich auf diese in Ihrer Shader-Datei mit' sampler texture: register (s0); 'wobei der Sampler-Index dem Index in der Textur-Sammlung entspricht. Siehe Beispiel von dieser [link] (https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.graphicsdevice.textures.aspx) – MRB
Compiles & läuft, aber das gerenderte Modell ist schwarz. –