ShaderEffect Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit un effet bitmap personnalisé à l’aide d’un PixelShader.
public ref class ShaderEffect abstract : System::Windows::Media::Effects::Effect
public abstract class ShaderEffect : System.Windows.Media.Effects.Effect
type ShaderEffect = class
inherit Effect
Public MustInherit Class ShaderEffect
Inherits Effect
- Héritage
Exemples
L’exemple de code suivant montre comment dériver de la ShaderEffect classe.
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Effects;
using System.Reflection;
namespace ShaderEffectDemo
{
public class ThresholdEffect : ShaderEffect
{
private static PixelShader _pixelShader =
new PixelShader() { UriSource = MakePackUri("ThresholdEffect.fx.ps") };
public ThresholdEffect()
{
PixelShader = _pixelShader;
UpdateShaderValue(InputProperty);
UpdateShaderValue(ThresholdProperty);
UpdateShaderValue(BlankColorProperty);
}
// MakePackUri is a utility method for computing a pack uri
// for the given resource.
public static Uri MakePackUri(string relativeFile)
{
Assembly a = typeof(ThresholdEffect).Assembly;
// Extract the short name.
string assemblyShortName = a.ToString().Split(',')[0];
string uriString = "pack://application:,,,/" +
assemblyShortName +
";component/" +
relativeFile;
return new Uri(uriString);
}
///////////////////////////////////////////////////////////////////////
#region Input dependency property
public Brush Input
{
get { return (Brush)GetValue(InputProperty); }
set { SetValue(InputProperty, value); }
}
public static readonly DependencyProperty InputProperty =
ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(ThresholdEffect), 0);
#endregion
///////////////////////////////////////////////////////////////////////
#region Threshold dependency property
public double Threshold
{
get { return (double)GetValue(ThresholdProperty); }
set { SetValue(ThresholdProperty, value); }
}
public static readonly DependencyProperty ThresholdProperty =
DependencyProperty.Register("Threshold", typeof(double), typeof(ThresholdEffect),
new UIPropertyMetadata(0.5, PixelShaderConstantCallback(0)));
#endregion
///////////////////////////////////////////////////////////////////////
#region BlankColor dependency property
public Color BlankColor
{
get { return (Color)GetValue(BlankColorProperty); }
set { SetValue(BlankColorProperty, value); }
}
public static readonly DependencyProperty BlankColorProperty =
DependencyProperty.Register("BlankColor", typeof(Color), typeof(ThresholdEffect),
new UIPropertyMetadata(Colors.Transparent, PixelShaderConstantCallback(1)));
#endregion
}
}
L’exemple de code suivant montre un nuanceur qui correspond à la classe précédente ShaderEffect .
// Threshold shader
// Object Declarations
sampler2D implicitInput : register(s0);
float threshold : register(c0);
float4 blankColor : register(c1);
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 color = tex2D(implicitInput, uv);
float intensity = (color.r + color.g + color.b) / 3;
float4 result;
if (intensity > threshold)
{
result = color;
}
else
{
result = blankColor;
}
return result;
}
Le code XAML suivant montre comment utiliser l’effet de nuanceur personnalisé.
<Window x:Class="ShaderEffectDemo.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ShaderEffectDemo"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:ThresholdEffect x:Key="thresholdEffect" Threshold="0.25" BlankColor="Orange" />
</Window.Resources>
<Grid Effect="{StaticResource thresholdEffect}">
</Grid>
</Window>
Remarques
Dérivez de la ShaderEffect classe pour implémenter un effet personnalisé basé sur un nuanceur de pixels unique.
Les étapes suivantes montrent comment créer un effet personnalisé.
Chargez un PixelShader bytecode hlSL (High Level Shading Language) précompilé.
Définissez les propriétés de dépendance qui représentent les paramètres de l’effet et les entrées de surface basées sur la Brushbase. Utilisez l’une des RegisterPixelShaderSamplerProperty surcharges pour associer ces entrées à des numéros d’inscription référencés dans le bytecode HLSL.
Le nombre d’échantillonneurs est limité à 4.
Les restrictions suivantes s’appliquent lors de l’utilisation d’un nuanceur PS 3.0.
Lorsqu’un nuanceur PS 3.0 est affecté, le nombre d’échantillonneurs augmente à 8. Affectez le nuanceur PS 3.0 avant d’autres nuanceurs pour activer l’inscription de 8 échantillonneurs.
La limite d’inscription constante du nuanceur complète de 224 pour les floats est utilisée. Pour plus d’informations, consultez ps_3_0.
Les types de données suivants sont pris en charge uniquement dans les nuanceurs PS 3.0. Une exception est levée si celles-ci sont utilisées dans les versions inférieures du nuanceur.
intet types convertibles enint:uint, ,sbytebyte,ulonglong,short, ,ushortcharbool
Si un nuanceur PS 3.0 valide est chargé sur un ordinateur qui n’a pas de prise en charge matérielle pour PS 3.0, le nuanceur est ignoré. Si le nuanceur n’est pas valide, aucune exception n’est levée.
Si un ordinateur a plusieurs cartes vidéo, le comportement est défini par la carte vidéo la moins compatible. Par exemple, si l’ordinateur a deux cartes vidéo, dont l’une prend en charge PS 3.0 et l’une d’entre elles ne le fait pas, le comportement est le même que si l’ordinateur ne prend pas en charge PS 3.0.
Si un ordinateur prend en charge le rendu de PS 3.0 dans le matériel, mais qu’un nuanceur PS 3.0 non valide est affecté, l’événement InvalidPixelShaderEncountered est déclenché. Un exemple de nuanceur PS 3.0 non valide est compilé avec l’indicateur
ps_3_sw. La ShaderEffect classe accepte uniquement les nuanceurs PS 3.0 compilés avec l’indicateurps_3_0passé à fxc.exe. Pour plus d’informations, consultez Effect-Compiler Tool.
Note
Les nuanceurs PS 2.0 s’exécutent lors du rendu dans le logiciel. Toutefois, même si PS 3.0 est pris en charge par le matériel du système, les nuanceurs PS 3.0 ne s’exécutent pas pendant le rendu logiciel.
Constructeurs
| Nom | Description |
|---|---|
| ShaderEffect() |
Initialise une nouvelle instance de la classe ShaderEffect. |
Champs
| Nom | Description |
|---|---|
| PixelShaderProperty |
Identifie la PixelShader propriété de dépendance. |
Propriétés
| Nom | Description |
|---|---|
| CanFreeze |
Obtient une valeur qui indique si l’objet peut être rendu non modifiable. (Hérité de Freezable) |
| DdxUvDdyUvRegisterIndex |
Obtient ou définit une valeur qui indique le registre du nuanceur à utiliser pour les dérivés partiels des coordonnées de texture par rapport à l’espace de l’écran. |
| DependencyObjectType |
Obtient le DependencyObjectType type CLR de cette instance. (Hérité de DependencyObject) |
| Dispatcher |
Obtient ce Dispatcher qui DispatcherObject est associé. (Hérité de DispatcherObject) |
| EffectMapping |
En cas de substitution dans une classe dérivée, transforme les systèmes d’entrée et de coordonnées de la souris par le biais de l’effet. (Hérité de Effect) |
| HasAnimatedProperties |
Obtient une valeur qui indique si un ou plusieurs AnimationClock objets sont associés à l’une des propriétés de dépendance de cet objet. (Hérité de Animatable) |
| IsFrozen |
Obtient une valeur qui indique si l’objet est actuellement modifiable. (Hérité de Freezable) |
| IsSealed |
Obtient une valeur qui indique si cette instance est actuellement scellée (en lecture seule). (Hérité de DependencyObject) |
| PaddingBottom |
Obtient ou définit une valeur indiquant que la texture de sortie de l’effet est supérieure à sa texture d’entrée le long du bord inférieur. |
| PaddingLeft |
Obtient ou définit une valeur indiquant que la texture de sortie de l’effet est supérieure à sa texture d’entrée le long du bord gauche. |
| PaddingRight |
Obtient ou définit une valeur indiquant que la texture de sortie de l’effet est supérieure à sa texture d’entrée le long du bord droit. |
| PaddingTop |
Obtient ou définit une valeur indiquant que la texture de sortie de l’effet est supérieure à sa texture d’entrée le long du bord supérieur. |
| PixelShader |
Obtient ou définit la PixelShader valeur à utiliser pour l’effet. |
Méthodes
| Nom | Description |
|---|---|
| ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Applique un AnimationClock à l’objet spécifié DependencyProperty. Si la propriété est déjà animée, la propriété HandoffBehavior spécifiée est utilisée. (Hérité de Animatable) |
| ApplyAnimationClock(DependencyProperty, AnimationClock) |
Applique un AnimationClock à l’objet spécifié DependencyProperty. Si la propriété est déjà animée, le comportement de SnapshotAndReplace transfert est utilisé. (Hérité de Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Applique une animation au fichier spécifié DependencyProperty. L’animation est démarrée lorsque l’image suivante est rendue. Si la propriété spécifiée est déjà animée, celle-ci HandoffBehavior est utilisée. (Hérité de Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline) |
Applique une animation au fichier spécifié DependencyProperty. L’animation est démarrée lorsque l’image suivante est rendue. Si la propriété spécifiée est déjà animée, le comportement de SnapshotAndReplace transfert est utilisé. (Hérité de Animatable) |
| CheckAccess() |
Détermine si le thread appelant a accès à ce DispatcherObjectfichier . (Hérité de DispatcherObject) |
| ClearValue(DependencyProperty) |
Efface la valeur locale d’une propriété. La propriété à effacer est spécifiée par un DependencyProperty identificateur. (Hérité de DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Efface la valeur locale d’une propriété en lecture seule. La propriété à effacer est spécifiée par un DependencyPropertyKey. (Hérité de DependencyObject) |
| Clone() |
Crée un clone modifiable de cet ShaderEffect objet, effectuant des copies approfondies des valeurs de cet objet. Lors de la copie des propriétés de dépendance de cet objet, cette méthode copie les références de ressources et les liaisons de données (qui peuvent ne plus être résolues), mais pas les animations ni leurs valeurs actuelles. |
| CloneCore(Freezable) |
Rend l’instance un clone (copie approfondie) de la propriété de base (non animée) spécifiée Freezable . |
| CloneCurrentValue() |
Crée un clone modifiable de cet ShaderEffect objet, effectuant des copies approfondies des valeurs actuelles de cet objet. Les références de ressources, les liaisons de données et les animations ne sont pas copiées, mais leurs valeurs actuelles sont copiées. |
| CloneCurrentValueCore(Freezable) |
Rend l’instance un clone modifiable (copie approfondie) de l’élément spécifié Freezable à l’aide de valeurs de propriété actuelles. |
| CoerceValue(DependencyProperty) |
Force la valeur de la propriété de dépendance spécifiée. Pour ce faire, appelez n’importe quelle CoerceValueCallback fonction spécifiée dans les métadonnées de propriété pour la propriété de dépendance telle qu’elle existe sur l’appel DependencyObject. (Hérité de DependencyObject) |
| CreateInstance() |
Initialise une nouvelle instance de la classe Freezable. (Hérité de Freezable) |
| CreateInstanceCore() |
Crée une instance de la Freezable classe dérivée. |
| Equals(Object) |
Détermine si un élément fourni DependencyObject est équivalent à l’actuel DependencyObject. (Hérité de DependencyObject) |
| Freeze() |
Rend l’objet actuel non modifiable et définit sa IsFrozen propriété sur |
| FreezeCore(Boolean) |
Rend cet Animatable objet non modifiable ou détermine s’il peut être rendu inmodifiable. (Hérité de Animatable) |
| GetAnimationBaseValue(DependencyProperty) |
Retourne la valeur non animée de l’objet spécifié DependencyProperty. (Hérité de Animatable) |
| GetAsFrozen() |
Crée une copie figée des valeurs de Freezablepropriété de base (non animées). Étant donné que la copie est figée, tous les sous-objets figés sont copiés par référence. (Hérité de Freezable) |
| GetAsFrozenCore(Freezable) |
Rend l’instance un clone figé de la propriété spécifiée à Freezable l’aide de valeurs de propriété de base (non animées). |
| GetCurrentValueAsFrozen() |
Crée une copie figée de l’utilisation Freezable des valeurs de propriété actuelles. Étant donné que la copie est figée, tous les sous-objets figés sont copiés par référence. (Hérité de Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Rend l’instance actuelle un clone figé du fichier spécifié Freezable. Si l’objet a des propriétés de dépendance animée, leurs valeurs animées actuelles sont copiées. |
| GetHashCode() |
Obtient un code de hachage pour ce DependencyObject. (Hérité de DependencyObject) |
| GetLocalValueEnumerator() |
Crée un énumérateur spécialisé pour déterminer quelles propriétés de dépendance ont des valeurs définies localement sur ce DependencyObject. (Hérité de DependencyObject) |
| GetType() |
Obtient la Type de l’instance actuelle. (Hérité de Object) |
| GetValue(DependencyProperty) |
Retourne la valeur effective actuelle d’une propriété de dépendance sur cette instance d’un DependencyObject. (Hérité de DependencyObject) |
| InvalidateProperty(DependencyProperty) |
Évalue à nouveau la valeur effective de la propriété de dépendance spécifiée. (Hérité de DependencyObject) |
| MemberwiseClone() |
Crée une copie superficielle du Objectactuel. (Hérité de Object) |
| OnChanged() |
Appelé lorsque l’objet actuel Freezable est modifié. (Hérité de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Ce membre prend en charge l’infrastructure Windows Presentation Foundation (WPF) et n’est pas destiné à être utilisé directement à partir de votre code. (Hérité de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Garantit que les pointeurs de contexte appropriés sont établis pour un DependencyObjectType membre de données qui vient d’être défini. (Hérité de Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Remplace l’implémentation DependencyObject de OnPropertyChanged(DependencyPropertyChangedEventArgs) l’appel de tous Changed les gestionnaires en réponse à une propriété de dépendance modifiée de type Freezable. (Hérité de Freezable) |
| PixelShaderConstantCallback(Int32) |
Associe une valeur de propriété de dépendance au registre de constante float d’un nuanceur de pixels. |
| PixelShaderSamplerCallback(Int32, SamplingMode) |
Associe une valeur de propriété de dépendance au registre de l’échantillonneur d’un nuanceur de pixels et un SamplingMode. |
| PixelShaderSamplerCallback(Int32) |
Associe une valeur de propriété de dépendance au registre de l’échantillonneur d’un nuanceur de pixels. |
| ReadLocalValue(DependencyProperty) |
Retourne la valeur locale d’une propriété de dépendance, le cas échéant. (Hérité de DependencyObject) |
| ReadPreamble() |
Garantit l’accès Freezable à partir d’un thread valide. Les héritiers de Freezable doivent appeler cette méthode au début de toute API qui lit les membres de données qui ne sont pas des propriétés de dépendance. (Hérité de Freezable) |
| RegisterPixelShaderSamplerProperty(String, Type, Int32, SamplingMode) |
Associe une propriété de dépendance à un registre d’échantillonneur de nuanceur et un SamplingMode. |
| RegisterPixelShaderSamplerProperty(String, Type, Int32) |
Associe une propriété de dépendance à un registre d’échantillonneur de nuanceur. |
| SetCurrentValue(DependencyProperty, Object) |
Définit la valeur d’une propriété de dépendance sans modifier sa source de valeur. (Hérité de DependencyObject) |
| SetValue(DependencyProperty, Object) |
Définit la valeur locale d’une propriété de dépendance, spécifiée par son identificateur de propriété de dépendance. (Hérité de DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Définit la valeur locale d’une propriété de dépendance en lecture seule, spécifiée par l’identificateur DependencyPropertyKey de la propriété de dépendance. (Hérité de DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Retourne une valeur qui indique si les processus de sérialisation doivent sérialiser la valeur de la propriété de dépendance fournie. (Hérité de DependencyObject) |
| ToString() |
Retourne une chaîne qui représente l’objet actuel. (Hérité de Object) |
| UpdateShaderValue(DependencyProperty) |
Avertit l’effet que la constante ou l’échantillonneur du nuanceur correspondant à la propriété de dépendance spécifiée doit être mis à jour. |
| VerifyAccess() |
Applique que le thread appelant a accès à ce DispatcherObjectfichier . (Hérité de DispatcherObject) |
| WritePostscript() |
Déclenche l’événement Changed pour la Freezable méthode et appelle sa OnChanged() méthode. Les classes dérivées Freezable de doivent appeler cette méthode à la fin de toute API qui modifie les membres de classe qui ne sont pas stockés en tant que propriétés de dépendance. (Hérité de Freezable) |
| WritePreamble() |
Vérifie que l’objet Freezable n’est pas figé et qu’il est accessible à partir d’un contexte de threading valide. Freezable Les hériteurs doivent appeler cette méthode au début de toute API qui écrit dans les membres de données qui ne sont pas des propriétés de dépendance. (Hérité de Freezable) |
Événements
| Nom | Description |
|---|---|
| Changed |
Se produit lorsque l’objet Freezable qu’il contient est modifié. (Hérité de Freezable) |