Bir gölgelendiriciyi bağımsız modda kullandığınızda, gölgelendirici işleme, çıktıyı nasıl kullanmayı planladığınızdan bağımsız olarak çalışır. Çalıştırılacak bir gölgelendirici belirtirsiniz, girdi ve parametre değerlerini ayarlarsınız ve sonuçta elde edilen verilerin yerleştirileceği bir nesne atarsınız. İki nedenden dolayı bağımsız modda bir gölgelendirici kullanabilirsiniz:
-
Görüntü dışındaki verileri işleme: Bağımsız modda, gölgelendiriciye bitmap görüntü verisi yerine rastgele bir ikili veri veya sayı verisi iletmeyi seçebilirsiniz. Gölgelendirici sonucunun bitmap görüntü verisine ek olarak ikili veri veya sayı verisi olarak döndürülmesini seçebilirsiniz.
-
Arka planda işleme: Bir gölgelendiriciyi bağımsız modda çalıştırdığınızda, varsayılan olarak gölgelendirici eşzamansız şekilde çalıştırılır. Başka bir deyişle, uygulamanız çalışmaya devam ederken gölgelendirici arka planda çalışır ve gölgelendirici işlemesi sona erince bu, kodunuza bildirilir. Çalıştırılması uzun süren ve gölgelendirici çalışırken uygulama kullanıcı arabirimini veya diğer işlemeleri dondurmayan bir gölgelendirici kullanabilirsiniz.
Gölgelendiriciyi bağımsız modda çalıştırmak için bir ShaderJob nesnesi kullanabilirsiniz. İlk olarak ShaderJob nesnesi oluşturur ve bunu çalıştırılacak gölgelendiriciyi temsil eden Shader nesnesine bağlarsınız:
var job:ShaderJob = new ShaderJob(myShader);
Daha sonra, gölgelendiricinin beklediği girdi veya parametre değerlerini ayarlarsınız. Gölgelendiriciyi arka planda çalıştırıyorsanız, ayrıca ShaderJob nesnesinin
complete
olayı için bir dinleyici kaydedersiniz. Gölgelendirici işini bitirdiğinde dinleyiciniz çağrılır:
function completeHandler(event:ShaderEvent):void
{
// do something with the shader result
}
job.addEventListener(ShaderEvent.COMPLETE, completeHandler);
Daha sonra, işlem sona erince gölgelendirici işlemi sonucunun yazıldığı bir nesne oluşturursunuz. Bu nesneyi ShaderJob nesnesinin
target
özelliğine atarsınız:
var jobResult:BitmapData = new BitmapData(100, 75);
job.target = jobResult;
Görüntü işlemeyi gerçekleştirmek için ShaderJob kullanıyorsanız,
target
özelliğine bir BitmapData atayın. İkili veri veya sayı verisi işliyorsanız,
target
özelliğine bir ByteArray nesnesi veya Vector <Number> örneği atayın. Bu durumda,
target
nesnesine verilecek veri miktarını belirtmek için ShaderJob nesnesinin
width
ve
height
özelliklerini ayarlamanız gerekir.
Not:
ShaderJob()
yapıcısına şu şekilde argümanlar ileterek tek bir adımda ShaderJob nesnesinin
shader
,
target
,
width
ve
height
özelliklerini ayarlayabilirsiniz:
var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);
Gölgelendiriciyi çalıştırmaya hazır olduğunuzda, ShaderJob nesnesinin
start(
) yöntemini çağırırsınız:
job.start();
Varsayılan olarak,
start()
yönteminin çağrılması, ShaderJob öğesinin senkronize olmadan çalıştırılmasına neden olur. Bu durumda program çalıştırması, gölgelendiricinin sona ermesi beklenmeden hemen bir sonraki kod satırıyla birlikte devam eder. Gölgelendirici işlemi sona erdiğinde, ShaderJob nesnesi
complete
olay dinleyicilerini çağırarak işlemin bittiğini bildirir. Bu noktada (başka bir deyişle,
complete
olay dinleyicinizin gövdesinde),
target
nesnesi gölgelendirici işleminin sonucunu içerir.
Not:
target
özellik nesnesini kullanmak yerine, gölgelendirici sonucunu doğrudan dinleyici yönteminize iletilen olay nesnesinden alabilirsiniz. Olay nesnesi bir ShaderEvent örneğidir. ShaderEvent nesnesi,
target
özelliği olarak ayarladığınız nesnenin veri türüne bağlı olarak sonuca erişmek için kullanılabilecek üç özelliğe sahiptir:
ShaderEvent.bitmapData
,
ShaderEvent.byteArray
ve
ShaderEvent.vector
.
Alternatif olarak,
start()
yöntemine bir
true
argümanı iletebilirsiniz. Bu durumda gölgelendirici işlemi eşzamanlı olarak çalıştırılır. Tüm kod (kullanıcı arabirimiyle etkileşim ve diğer olaylar dahil), gölgelendirici çalıştırılırken duraklatılır. Gölgelendirici sona erdiğinde,
target
nesnesi, gölgelendirici sonucunu içerir ve program bir sonraki kod satırıyla devam eder.
job.start(true);