private Effect GetOrCreatePickingSpriteEffect() { if (pickingSpriteEffect == null) { pickingSpriteEffect = EffectSystem.LoadEffect("SpritePicking").WaitForResult(); } return(pickingSpriteEffect); }
private Effect GetOrCreateSelectedSpriteEffect(ref Effect effect, bool isSRgb) { if (effect == null) { var compilerParameters = new CompilerParameters { [SpriteBaseKeys.ColorIsSRgb] = isSRgb }; effect = EffectSystem.LoadEffect("SelectedSprite", compilerParameters).WaitForResult(); } return(effect); }
protected override void ChooseEffect(GraphicsDevice graphicsDevice) { // TODO: Free previous descriptor sets and layouts? // Looks like the effect changed, it needs a recompilation var compilerParameters = new CompilerParameters(); foreach (var effectParameterKey in Parameters.ParameterKeyInfos) { if (effectParameterKey.Key.Type == ParameterKeyType.Permutation) { // TODO GRAPHICS REFACTOR avoid direct access, esp. since permutation values might be separated from Objects at some point compilerParameters.SetObject(effectParameterKey.Key, Parameters.ObjectValues[effectParameterKey.BindingSlot]); } } effect = effectSystem.LoadEffect(effectName, compilerParameters).WaitForResult(); }
private void CreateEffect(DynamicEffectInstance effectInstance, ParameterCollection passParameters) { var compilerParameters = BuildCompilerParameters(effectInstance, passParameters); // Compile shader // possible exception in LoadEffect TaskOrResult <Effect> effect; ParameterCollection usedParameters; try { effect = EffectSystem.LoadEffect(EffectName, compilerParameters, out usedParameters); } catch (Exception) { SwitchFallbackEffect(FallbackEffectType.Error, effectInstance, passParameters, compilerParameters); return; } // Do we have an async compilation? if (asyncEffectCompiler && effect.Task != null) { effectInstance.CurrentlyCompilingEffect = effect.Task; effectInstance.CurrentlyCompilingUsedParameters = usedParameters; if (!effectInstance.HasErrors) // If there was an error, stay in that state (we don't want to switch between reloading and error states) { // Fallback to default effect var fallbackEffect = ComputeFallbackEffect(this, FallbackEffectType.Compiling, EffectName, compilerParameters); UpdateEffect(effectInstance, fallbackEffect.Effect, fallbackEffect.UsedParameters, passParameters); } return; } // TODO It throws an exception here when the compilation fails! var compiledEffect = effect.WaitForResult(); UpdateEffect(effectInstance, compiledEffect, usedParameters, passParameters); // Effect has been updated effectInstance.CurrentlyCompilingEffect = null; effectInstance.CurrentlyCompilingUsedParameters = null; }
/// <summary> /// Creates an effect. /// </summary> /// <param name="effectSystem">The effect system.</param> /// <param name="effectName">Name of the effect.</param> /// <returns>A new instance of an effect.</returns> public static TaskOrResult <Effect> LoadEffect(this EffectSystem effectSystem, string effectName) { var compilerParameters = new CompilerParameters(); return(effectSystem.LoadEffect(effectName, compilerParameters)); }