Gölgelendiriciyi bağımsız modda kullanma

Flash Player 10 ve üstü, Adobe AIR 1.5 ve üstü

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