Bazı gölgelendiriciler, gölgelendiricinin sonuçlarını oluşturmakta kullandığı parametre değerlerini tanımlar. Örneğin, bir görüntünün parlaklığını değiştiren bir gölgelendirici, işlemin parlaklığı ne kadar etkilediğini belirleyen bir parlaklık parametresini belirtebilir. Gölgelendiricide tanımlanan tek bir parametre, gölgelendiricideki parametre tanımına göre tek bir değer veya birden çok değer bekleyebilir. Bir gölgelendiricide tanımlanan her parametre, bir ShaderParameter nesnesi tarafından ActionScript'te temsil edilir.
Gölgelendirici girdilerini ve parametrelerini tanımlama
bölümünde açıklandığı gibi, ShaderParameter nesnesi, Shader nesnesinin data özelliğinde ShaderData örneğinin bir özelliğidir. Örneğin, bir gölgelendiricinin
brightness
adında bir parametreyi tanımladığını ve bu gölgelendiricinin
myShader
adındaki bir Shader nesnesi tarafından temsil edildiğini varsayın. Bu durumda, şu tanımlayıcıyı kullanarak
brightness
parametresine karşılık gelen ShaderParameter nesnesine erişirsiniz:
myShader.data.brightness
Parametre için bir değer (veya değerler) ayarlamak üzere, değer ya da değerleri içeren bir ActionScript dizisi oluşurun ve ShaderParameter nesnesinin
value
özelliğine bu diziyi atayın. Tek bir gölgelendirici parametresi birden çok değer gerektirebildiğinden,
value
özelliği bir Array örneği olarak tanımlanır. Gölgelendirici parametresi yalnızca tek bir değer beklese de, değeri
ShaderParameter.value
özelliğine atamak için bir Array nesnesinde sarmanız gerekir. Aşağıdaki liste,
value
özelliği olarak tek bir değer ayarlanmasını gösterir:
myShader.data.brightness.value = [75];
Gölgelendiricinin Pixel Bender kaynak kodu, parametrenin varsayılan değerini tanımlıyorsa, Shader nesnesi oluşturulduğunda varsayılan değeri veya değerleri içeren bir dizi oluşturulur ve ShaderParameter nesnesinin
value
özelliğine atanır.
value
özelliğine bir dizi atandıktan sonra (varsayılan diziyse dahil edilir), dizi öğesinin değeri değiştirilerek parametre değeri değiştirilebilir. Yeni bir dizi oluşturup bunu
value
özelliğine atamanız gerekmez.
Aşağıdaki örnek, ActionScript'te bir gölgelendiricinin parametre değerinin ayarlanmasını gösterir. Bu örnekte, gölgelendirici
color
adında bir parametreyi tanımlar.
color
parametresi, Pixel Bender kaynak kodunda bir
float4
değişkeni olarak bildirilir, başka bir deyişle bu, dört kayan nokta numarası dizisidir. Örnekte,
color
parametre değeri sürekli olarak değiştirilir ve bu değer her değiştiğinde ekranda renkli bir dikdörtgen çizmek için gölgelendirici kullanılır. Sonuçta, animasyon uygulanmış bir renk değişimi elde edilir.
Not:
Bu örneğin kodunu Ryan Taylor yazmıştır. Bu örneği bizimle paylaştığı için Ryan'a teşekkür ediyoruz. Şu adreste Ryan'ın portföyünü görebilir ve yazılarını okuyabilirsiniz:
www.boostworthy.com
.
ActionScript kodunun merkezinde üç yöntem bulunur:
-
init()
:
init()
yönteminde kod, gölgelendiriciyi içeren Pixel Bender bayt kodu dosyasını yükler. Dosya yüklendiğinde,
onLoadComplete()
yöntemi çağrılır.
-
onLoadComplete()
:
onLoadComplete()
yönteminde kod,
shader
adında bir Shader nesnesi oluşturur. Ayrıca
texture
adında bir Sprite örneği oluşturur.
renderShader()
yönteminde kod her kare için bir defa gölgelendirici sonucunu
texture
öğesine çizer.
-
onEnterFrame()
: Her kare için birer kere
onEnterFrame()
yöntemi çağrılarak animasyon efekti oluşturulur. Bu yöntemde kod, gölgelendirici parametresi değerini yeni renge ayarlar ve sonra bir dikdörtgen olarak gölgelendirici sonucunu çizmek için
renderShader()
yöntemini çağırır.
-
renderShader()
:
renderShader()
yönteminde kod, bir gölgelendirici dolgusu belirtmek için
Graphics.beginShaderFill()
yöntemini çağırır. Daha sonra gölgelendirici çıktısı (oluşturulan renk) tarafından dolgusu tanımlanan bir dikdörtgen çizer. Bir gölgelendiricinin bu şekilde kullanılması hakkında daha fazla bilgi almak için, bkz.
Gölgelendiriciyi çizim dolgusu olarak kullanma
.
Aşağıda, bu örneğin ActionScript kodu verilmiştir. Bu sınıfı Flash Builder'da yalnızca ActionScript projesi için ana uygulama sınıfı olarak veya Flash Professional'da FLA dosyasının belge sınıfı olarak kullanın:
package
{
import flash.display.Shader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public class ColorFilterExample extends Sprite
{
private const DELTA_OFFSET:Number = Math.PI * 0.5;
private var loader:URLLoader;
private var shader:Shader;
private var texture:Sprite;
private var delta:Number = 0;
public function ColorFilterExample()
{
init();
}
private function init():void
{
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, onLoadComplete);
loader.load(new URLRequest("ColorFilter.pbj"));
}
private function onLoadComplete(event:Event):void
{
shader = new Shader(loader.data);
texture = new Sprite();
addChild(texture);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void
{
shader.data.color.value[0] = 0.5 + Math.cos(delta - DELTA_OFFSET) * 0.5;
shader.data.color.value[1] = 0.5 + Math.cos(delta) * 0.5;
shader.data.color.value[2] = 0.5 + Math.cos(delta + DELTA_OFFSET) * 0.5;
// The alpha channel value (index 3) is set to 1 by the kernel's default
// value. This value doesn't need to change.
delta += 0.1;
renderShader();
}
private function renderShader():void
{
texture:graphics.clear();
texture.graphics.beginShaderFill(shader);
texture.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
texture.graphics.endFill();
}
}
}
Aşağıda, “ColorFilter.pbj” Pixel Bender bayt kodu dosyasını oluşturmak için kullanılan, ColorFilter gölgelendirici çekirdeğinin kaynak kodu verilmiştir:
<languageVersion : 1.0;>
kernel ColorFilter
<
namespace : "boostworthy::Example";
vendor : "Ryan Taylor";
version : 1;
description : "Creates an image where every pixel has the specified color value.";
>
{
output pixel4 result;
parameter float4 color
<
minValue:float4(0, 0, 0, 0);
maxValue:float4(1, 1, 1, 1);
defaultValue:float4(0, 0, 0, 1);
>;
void evaluatePixel()
{
result = color;
}
}
Parametreleri belgelenmemiş bir gölgelendirici kullanıyorsanız, ShaderParameter nesnesinin
type
özelliğini kontrol ederek, dizide hangi tür öğelerden kaç tane bulunması gerektiğini öğrenebilirsiniz.
type
özelliği, gölgelendiricide tanımlandığı şekilde parametrenin veri türünü belirtir. Her parametre türünün beklediği öğelerin sayısını ve türünü belirten bir liste için, ActionScript 3.0 Başvurusundaki
ShaderParameter.value
özelliğine bakın.
Her ShaderParameter nesnesi aynı zamanda parametrenin gölgelendiricinin parametrelerinde hangi sırada olduğunu belirten bir
index
özelliğine de sahiptir. ShaderParameter nesnesi, bu özelliklere ek olarak, gölgelendiricinin yazarı tarafından sağlanan meta veri değerlerini içeren ek özelliklere de sahip olabilir. Örneğin, yazar bir parametre için minimum, maksimum ve varsayılan değerler gibi meta veri değerleri belirtebilir. Yazarın belirttiği tüm meta veri değerleri, dinamik özellikler olarak ShaderParameter nesnesine eklenir. Bu özellikleri incelemek için,
for..in
döngüsünü kullanarak, ShaderParameter nesnesinin dinamik özellikleri üzerinde döngü uygulayarak nesnenin meta verilerini tanımlayın. Aşağıdaki örnek,
for..in
döngüsünün nasıl bir ShaderParameter nesnesinin meta verisini tanımlamak için kullanıldığını gösterir. Her meta veri değeri,
metadata
adındaki bir Vector örneğine eklenir. Bu örnekte,
myShader
adında bir Shader örneğinin önceden oluşturulduğu ve bunun
brightness
adında bir parametreye sahip olduğunun varsayıldığını unutmayın:
var brightness:ShaderParameter = myShader.data.brightness;
var metadata:Vector.<String> = new Vector.<String>();
for (var prop:String in brightness)
{
if (brightness[prop] is String)
{
metadata[metadata.length] = brightness[prop];
}
}
// do something with the metadata