/// <inheritdoc/> public EffectParameterBinding GetBinding(Effect effect, EffectParameter parameter, IDictionary<string, object> opaqueData) { if (effect is AlphaTestEffect || effect is BasicEffect || effect is DualTextureEffect || effect is EnvironmentMapEffect || effect is SkinnedEffect) { // The ShaderIndex parameter is set by effect technique bindings. var description = effect.GetParameterDescriptions()[parameter]; if (description.Semantic == "XnaShaderIndex") return new NullParameterBinding<int>(effect, parameter); if (description.Semantic == "XnaFogVector") return new FogVectorParameterBinding(effect, parameter); } return null; }
/// <summary> /// Initializes a new instance of the <see cref="EffectParameterBinding"/> class. /// </summary> /// <param name="effect">The effect.</param> /// <param name="parameter">The effect parameter.</param> /// <exception cref="ArgumentNullException"> /// <paramref name="effect"/> or <paramref name="parameter"/> is <see langword="null"/>. /// </exception> protected EffectParameterBinding(Effect effect, EffectParameter parameter) { if (effect == null) throw new ArgumentNullException("effect"); if (parameter == null) throw new ArgumentNullException("parameter"); try { Description = effect.GetParameterDescriptions()[parameter]; } catch (KeyNotFoundException) { throw new GraphicsException("Missing effect parameter description.\n\n" + "Cause:\nThis can happen if an effect parameter uses a struct type, " + "and the parameter name or semantic is known by an effect interpreter, but " + "no binding is provided by any effect binder.\n\n" + "Solution:\nAn effect binder must create a binding for this parameter."); } if ((GlobalSettings.ValidationLevelInternal & GlobalSettings.ValidationLevelDevBasic) != 0) VerifyEffectParameter(effect); }