ShaderEffect Sınıf

Tanım

kullanarak PixelShaderözel bir bit eşlem efekti sağlar.

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
Devralma

Örnekler

Aşağıdaki kod örneğinde sınıfından nasıl türetilir gösterilmektedir ShaderEffect .

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
    }
}

Aşağıdaki kod örneği, önceki ShaderEffect sınıfa karşılık gelen bir gölgelendiriciyi gösterir.

// 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;
}

Aşağıdaki XAML'de özel gölgelendirici efektinin nasıl kullanılacağı gösterilmektedir.

<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>

Açıklamalar

Sınıfından ShaderEffect türeterek tek piksel gölgelendiricisini temel alan özel bir etki uygulayın.

Aşağıdaki adımlarda özel bir efektin nasıl oluşturulacağı gösterilmektedir.

  1. Önceden derlenmiş Yüksek Düzey Gölgeleme Dili (HLSL) bayt kodundan bir PixelShader yükleyin.

  2. Efektin parametrelerini ve Brushtabanlı yüzey girişlerini temsil eden bağımlılık özelliklerini tanımlayın. Bu girişleri HLSL bayt kodunda başvurulan kayıt numaralarıyla ilişkilendirmek için aşırı yüklemelerden birini RegisterPixelShaderSamplerProperty kullanın.

Örnekleyici sayısı 4 ile sınırlıdır.

PS 3.0 gölgelendiricisi kullanılırken aşağıdaki kısıtlamalar geçerlidir.

  • PS 3.0 gölgelendiricisi atandığında örnekleyici sayısı 8'e yükselir. 8 örnekleyici kaydetmeyi etkinleştirmek için PS 3.0 gölgelendiricisini diğer gölgelendiricilerin önüne atayın.

  • Float'lar için 224 tam gölgelendirici sabit yazmaç sınırı kullanılır. Daha fazla bilgi için bkz. ps_3_0.

  • Aşağıdaki veri türleri yalnızca PS 3.0 gölgelendiricilerinde desteklenir. Bunlar daha düşük gölgelendirici sürümlerinde kullanılıyorsa bir özel durum oluşturulur.

    • intve türleri dönüştürülebilirint: uint, byte, sbyte, long, ulong, short, , ushortchar

    • bool

  • PS 3.0 için donanım desteği olmayan bir bilgisayara geçerli bir PS 3.0 gölgelendiricisi yüklenirse, gölgelendirici yoksayılır. Gölgelendirici geçersizse özel durum atılır.

  • Bir bilgisayarda birden fazla ekran kartı varsa, davranış en az özellikli ekran kartı tarafından tanımlanır. Örneğin, bilgisayarda biri PS 3.0'ı destekleyen, diğeri desteklemeyen iki ekran kartı varsa, bu davranış, bilgisayarın PS 3.0'ı desteklememesiyle aynıdır.

  • Bir bilgisayar donanımda PS 3.0 işlemeyi destekliyorsa, ancak geçersiz bir PS 3.0 gölgelendiricisi atandıysa, InvalidPixelShaderEncountered olay tetikler. Geçersiz ps 3.0 gölgelendiricisi bir örnek bayrağı ile ps_3_sw derlenmiş bir örnektir. sınıfı ShaderEffect yalnızca fxc.exe geçirilen bayrağıyla ps_3_0 derlenen PS 3.0 gölgelendiricilerini kabul eder. Daha fazla bilgi için bkz . Efekt Derleyicisi Aracı.

Not

PS 2.0 gölgelendiricileri yazılımda işlenirken çalışır. Ancak, PS 3.0 sistemin donanımı tarafından destekleniyor olsa bile, PS 3.0 gölgelendiricileri yazılım işleme sırasında çalışmaz.

Oluşturucular

ShaderEffect()

ShaderEffect sınıfının yeni bir örneğini başlatır.

Alanlar

PixelShaderProperty

PixelShader Bağımlılık özelliğini tanımlar.

Özellikler

CanFreeze

Nesnenin değiştirilemez hale getirilip getirilemeyeceğini belirten bir değer alır.

(Devralındığı yer: Freezable)
DdxUvDdyUvRegisterIndex

Ekran alanına göre doku koordinatlarının kısmi türevleri için kullanılacak gölgelendirici yazmaç değerini alır veya ayarlar.

DependencyObjectType

DependencyObjectType Bu örneğin CLR türünü sarmalayan öğesini alır.

(Devralındığı yer: DependencyObject)
Dispatcher

Dispatcher Bunun DispatcherObject ilişkili olduğunu alır.

(Devralındığı yer: DispatcherObject)
EffectMapping

Türetilmiş bir sınıfta geçersiz kılındığında, fare girişini dönüştürür ve etki aracılığıyla sistemleri koordine eder.

(Devralındığı yer: Effect)
HasAnimatedProperties

Bir veya daha fazla AnimationClock nesnenin bu nesnenin bağımlılık özelliklerinden herhangi biriyle ilişkilendirilip ilişkilendirildiğini belirten bir değer alır.

(Devralındığı yer: Animatable)
IsFrozen

Nesnenin şu anda değiştirilebilir olup olmadığını gösteren bir değer alır.

(Devralındığı yer: Freezable)
IsSealed

Bu örneğin şu anda korumalı olup olmadığını belirten bir değer alır (salt okunur).

(Devralındığı yer: DependencyObject)
PaddingBottom

Efektin çıkış dokusunun alt kenar boyunca giriş dokusundan daha büyük olduğunu belirten bir değeri alır veya ayarlar.

PaddingLeft

Efektin çıkış dokusunun sol kenardaki giriş dokusundan daha büyük olduğunu belirten bir değer alır veya ayarlar.

PaddingRight

Efektin çıkış dokusunun sağ kenardaki giriş dokusundan daha büyük olduğunu belirten bir değeri alır veya ayarlar.

PaddingTop

Efektin çıkış dokusunun üst kenar boyunca giriş dokusundan daha büyük olduğunu belirten bir değer alır veya ayarlar.

PixelShader

Efekt için kullanılacak öğesini PixelShader alır veya ayarlar.

Yöntemler

ApplyAnimationClock(DependencyProperty, AnimationClock)

Belirtilen DependencyPropertyöğesine bir AnimationClock uygular. Özellik zaten animasyonluysa, iletim SnapshotAndReplace davranışı kullanılır.

(Devralındığı yer: Animatable)
ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior)

Belirtilen DependencyPropertyöğesine bir AnimationClock uygular. Özellik zaten animasyonluysa, belirtilen HandoffBehavior kullanılır.

(Devralındığı yer: Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline)

Belirtilen DependencyPropertyöğesine bir animasyon uygular. Animasyon, bir sonraki kare işlendiğinde başlatılır. Belirtilen özellik zaten animasyonluysa, SnapshotAndReplace iletim davranışı kullanılır.

(Devralındığı yer: Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Belirtilen DependencyPropertyöğesine bir animasyon uygular. Animasyon, bir sonraki kare işlendiğinde başlatılır. Belirtilen özellik zaten animasyonluysa, belirtilen HandoffBehavior kullanılır.

(Devralındığı yer: Animatable)
CheckAccess()

Çağıran iş parçacığının bu DispatcherObjectöğesine erişimi olup olmadığını belirler.

(Devralındığı yer: DispatcherObject)
ClearValue(DependencyProperty)

Bir özelliğin yerel değerini temizler. Temizlenecek özellik bir DependencyProperty tanımlayıcı tarafından belirtilir.

(Devralındığı yer: DependencyObject)
ClearValue(DependencyPropertyKey)

Salt okunur özelliğin yerel değerini temizler. Temizlenecek özellik tarafından DependencyPropertyKeybelirtilir.

(Devralındığı yer: DependencyObject)
Clone()

Bu nesnenin değerlerinin derin kopyalarını oluşturarak bu ShaderEffect nesnenin değiştirilebilir bir kopyasını oluşturur. Bu nesnenin bağımlılık özelliklerini kopyalarken, bu yöntem kaynak başvurularını ve veri bağlamalarını kopyalar (artık çözümlenmeyebilir), ancak animasyonları veya geçerli değerlerini kopyalamıyor.

CloneCore(Freezable)

Temel (animasyonlu olmayan) özellik değerlerini kullanarak örneği belirtilen Freezable kopya (derin kopya) yapar.

CloneCurrentValue()

Bu nesnenin değiştirilebilir bir kopyasını oluşturur ve bu ShaderEffect nesnenin geçerli değerlerinin derin kopyalarını oluşturur. Kaynak başvuruları, veri bağlamaları ve animasyonlar kopyalanmaz, ancak geçerli değerleri kopyalanır.

CloneCurrentValueCore(Freezable)

Örneği, geçerli özellik değerlerini kullanarak belirtilenlerin Freezable değiştirilebilir bir kopyası (derin kopya) yapar.

CoerceValue(DependencyProperty)

Belirtilen bağımlılık özelliğinin değerini zorlama. Bu, çağrısında DependencyObjectvar olan bağımlılık özelliği için özellik meta verilerinde belirtilen herhangi bir CoerceValueCallback işlevi çağırarak gerçekleştirilir.

(Devralındığı yer: DependencyObject)
CreateInstance()

Freezable sınıfının yeni bir örneğini başlatır.

(Devralındığı yer: Freezable)
CreateInstanceCore()

Türetilmiş sınıfın yeni bir örneğini Freezable oluşturur.

Equals(Object)

Sağlanan DependencyObject öğesinin geçerli DependencyObjectile eşdeğer olup olmadığını belirler.

(Devralındığı yer: DependencyObject)
Freeze()

Geçerli nesneyi değiştirilemez hale getirir ve özelliğini olarak trueayarlarIsFrozen.

(Devralındığı yer: Freezable)
FreezeCore(Boolean)

Bu Animatable nesneyi değiştirilemez hale getirir veya değiştirilemez hale getirilip getirilemeyeceğini belirler.

(Devralındığı yer: Animatable)
GetAnimationBaseValue(DependencyProperty)

Belirtilen DependencyPropertyöğesinin animasyonsuz değerini döndürür.

(Devralındığı yer: Animatable)
GetAsFrozen()

temel (animasyonsuz) özellik değerlerini kullanarak öğesinin dondurulan Freezablebir kopyasını oluşturur. Kopya donduruldu olduğundan, dondurulan tüm alt nesneler başvuruyla kopyalanır.

(Devralındığı yer: Freezable)
GetAsFrozenCore(Freezable)

Temel (animasyonlu olmayan) özellik değerlerini kullanarak örneği belirtilen Freezable öğesinin dondurulan bir kopyası yapar.

GetCurrentValueAsFrozen()

Geçerli özellik değerlerini kullanarak öğesinin dondurulan Freezable bir kopyasını oluşturur. Kopya donduruldu olduğundan, dondurulan tüm alt nesneler başvuruyla kopyalanır.

(Devralındığı yer: Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Geçerli örneği, belirtilen Freezableöğesinin dondurulan bir kopyası yapar. Nesnenin animasyonlu bağımlılık özellikleri varsa, geçerli animasyonlu değerleri kopyalanır.

GetHashCode()

Bu DependencyObjectiçin bir karma kodu alır.

(Devralındığı yer: DependencyObject)
GetLocalValueEnumerator()

Hangi bağımlılık özelliklerinin bu DependencyObjectüzerinde yerel olarak ayarlı değerlere sahip olduğunu belirlemek için özelleştirilmiş bir numaralandırıcı oluşturur.

(Devralındığı yer: DependencyObject)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
GetValue(DependencyProperty)

Bir öğesinin bu örneğindeki bağımlılık özelliğinin DependencyObjectgeçerli geçerli değerini döndürür.

(Devralındığı yer: DependencyObject)
InvalidateProperty(DependencyProperty)

Belirtilen bağımlılık özelliği için geçerli değeri yeniden değerlendirir.

(Devralındığı yer: DependencyObject)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
OnChanged()

Geçerli Freezable nesne değiştirildiğinde çağrılır.

(Devralındığı yer: Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Yeni ayarlanmış bir DependencyObjectType veri üyesi için uygun bağlam işaretçilerinin oluşturulmasını sağlar.

(Devralındığı yer: Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Bu üye Windows Presentation Foundation (WPF) altyapısını destekler ve doğrudan kodunuzdan kullanılması amaçlanmamıştır.

(Devralındığı yer: Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

türündeki DependencyObjectFreezabledeğişen bağımlılık özelliğine yanıt olarak herhangi Changed bir işleyici çağırmak için uygulamasını OnPropertyChanged(DependencyPropertyChangedEventArgs) geçersiz kılar.

(Devralındığı yer: Freezable)
PixelShaderConstantCallback(Int32)

Bir bağımlılık özelliği değerini piksel gölgelendiricinin float sabit yazmacıyla ilişkilendirir.

PixelShaderSamplerCallback(Int32)

Bir bağımlılık özelliği değerini piksel gölgelendiricinin örnekleyici yazmacıyla ilişkilendirir.

PixelShaderSamplerCallback(Int32, SamplingMode)

Bir bağımlılık özelliği değerini piksel gölgelendiricinin örnekleyici yazmacı ve ile SamplingModeilişkilendirir.

ReadLocalValue(DependencyProperty)

Varsa, bağımlılık özelliğinin yerel değerini döndürür.

(Devralındığı yer: DependencyObject)
ReadPreamble()

Freezable geçerli bir iş parçacığından erişildiğinden emin olunmasını sağlar. öğesinin Freezable devralıcıları, bağımlılık özellikleri olmayan veri üyelerini okuyan herhangi bir API'nin başında bu yöntemi çağırmalıdır.

(Devralındığı yer: Freezable)
RegisterPixelShaderSamplerProperty(String, Type, Int32)

Bağımlılık özelliğini bir gölgelendirici örnekleyici yazmacı ile ilişkilendirir.

RegisterPixelShaderSamplerProperty(String, Type, Int32, SamplingMode)

Bağımlılık özelliğini bir gölgelendirici örnekleyici yazmacı ve ile SamplingModeilişkilendirir.

SetCurrentValue(DependencyProperty, Object)

Bir bağımlılık özelliğinin değerini, değer kaynağını değiştirmeden ayarlar.

(Devralındığı yer: DependencyObject)
SetValue(DependencyProperty, Object)

Bağımlılık özelliği tanımlayıcısı tarafından belirtilen bir bağımlılık özelliğinin yerel değerini ayarlar.

(Devralındığı yer: DependencyObject)
SetValue(DependencyPropertyKey, Object)

Bağımlılık özelliğinin tanımlayıcısı tarafından belirtilen salt okunur bağımlılık özelliğinin DependencyPropertyKey yerel değerini ayarlar.

(Devralındığı yer: DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Serileştirme işlemlerinin sağlanan bağımlılık özelliği için değeri serileştirmesi gerekip gerekmediğini belirten bir değer döndürür.

(Devralındığı yer: DependencyObject)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)
UpdateShaderValue(DependencyProperty)

Belirtilen bağımlılık özelliğine karşılık gelen gölgelendirici sabitinin veya örnekleyicinin güncelleştirilmesi gerektiğini bildirir.

VerifyAccess()

Çağıran iş parçacığının bu DispatcherObjecterişimine sahip olmasını zorlar.

(Devralındığı yer: DispatcherObject)
WritePostscript()

Changed için Freezable olayını oluşturur ve yöntemini çağırırOnChanged(). öğesinden Freezable türetilen sınıflar, bağımlılık özellikleri olarak depolanmayan sınıf üyelerini değiştiren herhangi bir API'nin sonunda bu yöntemi çağırmalıdır.

(Devralındığı yer: Freezable)
WritePreamble()

öğesinin Freezable dondurulmadığını ve geçerli bir iş parçacığı bağlamından erişildiğini doğrular. Freezable inheritor'lar bağımlılık özellikleri olmayan veri üyelerine yazan herhangi bir API'nin başında bu yöntemi çağırmalıdır.

(Devralındığı yer: Freezable)

Ekinlikler

Changed

içerdiği veya nesnesi değiştirildiğinde Freezable gerçekleşir.

(Devralındığı yer: Freezable)

Şunlara uygulanır

Ayrıca bkz.