| 套件 | flash.display |
| 類別 | public final dynamic class ShaderData |
| 繼承 | ShaderData Object |
| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | Flash Player 10, AIR 1.5 |
這些屬性都會在建立時新增到 ShaderData 物件。屬性的名稱符合著色器原始碼中指定的名稱。每一個屬性的資料類型依據屬性所代表的著色器層面而各有不同。根據每個屬性的資料類型而言,代表著色器參數的屬性為 ShaderParameter 實體,代表輸入影像的屬性為 ShaderInput 實體,而代表著色器中繼資料的屬性則為 ActionScript 類別的實體 (例如,文字中繼資料的屬性為 String 實體,而 uint 中繼資料的屬性則是 uint)。
以這個著色器為例,它使用 1 個輸入影像 (src)、2 個參數 (size 和 radius),以及 3 個中繼資料值 (nameSpace、version,以及 description) 來定義:
<languageVersion : 1.0;>
kernel DoNothing
<
namespace: "Adobe::Example";
vendor: "Adobe examples";
version: 1;
description: "A shader that does nothing, but does it well.";
>
{
input image4 src;
output pixel4 dst;
parameter float2 size
<
description: "The size of the image to which the kernel is applied";
minValue: float2(0.0, 0.0);
maxValue: float2(100.0, 100.0);
defaultValue: float2(50.0, 50.0);
>;
parameter float radius
<
description: "The radius of the effect";
minValue: 0.0;
maxValue: 50.0;
defaultValue: 25.0;
>;
void evaluatePixel()
{
float2 one = (radius / radius) ∗ (size / size);
dst = sampleNearest(src, outCoord());
}
}
如果您藉由載入此著色器的位元組碼來建立 Shader 實體,則位於自身 data 屬性裡的 ShaderData 實體會包含下列 3 個屬性:
| 屬性 | 資料類型 | 值 |
|---|---|---|
| name | 字串 | "DoNothing" |
| nameSpace | 字串 | "Adobe::Example" |
| version | 字串 | "1" |
| 說明 | 字串 | "A shader that does nothing, but does it well." |
| src | ShaderInput | [A ShaderInput instance] |
| size | ShaderParameter | [A ShaderParameter instance, with properties for the parameter metadata] |
| radius | ShaderParameter | [A ShaderParameter instance, with properties for the parameter metadata] |
請注意,任何在著色器原始碼中定義,但未用於著色器之 evaluatePixel() 函數的輸入影像或參數,會在著色器被編譯為位元組碼時遭到移除。在這種情況下,就不會新增任何對應的 ShaderInput 或 ShaderParameter 實體做為 ShaderData 實體的屬性。
一般而言,開發人員程式碼不會建立 ShaderData 實體。包含著色器資料、參數以及輸入的 ShaderData 實體可當作 Shader 實體的 data 屬性來使用。
相關 API 元素
公用方法
| 方法 | 定義自 | ||
|---|---|---|---|
ShaderData(byteCode:ByteArray)
建立 ShaderData 實體。 | ShaderData | ||
![]() |
指出物件是否有已定義的指定屬性。 | Object | |
![]() |
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | |
![]() |
指出指定的屬性是否存在,以及是否可列舉。 | Object | |
![]() |
為迴圈作業設定動態屬性的可用性。 | Object | |
![]() |
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | |
![]() |
會傳回指定之物件的字串形式。 | Object | |
![]() |
會傳回指定之物件的基本值。 | Object | |
建構函式詳細資料
ShaderData | () | 建構函式 |
範例 如何使用本範例
ShaderDataExample.1.as
以下範例會載入著色器並將 ShaderData 實體列舉在自身的
data 屬性中,以顯示著色器的輸入、參數與中繼資料屬性。
請注意,此範例假設和應用程式輸出目錄相同的目錄中存在一個名為「donothing.pbj」的著色器位元組碼檔案。
//
// Source code for the shader:
//
<languageVersion : 1.0;>
kernel DoNothing
<
namespace: "Adobe::Example";
vendor: "Adobe examples";
version: 1;
description: "A shader that does nothing, but does it well.";
>
{
input image4 src;
output pixel4 dst;
parameter float2 size
<
description: "The size of the image to which the shader is applied";
minValue: float2(0.0, 0.0);
maxValue: float2(100.0, 100.0);
defaultValue: float2(50.0, 50.0);
>;
parameter float radius
<
description: "The radius of the effect";
minValue: float(0.0);
maxValue: float(50.0);
defaultValue: float(25.0);
>;
void evaluatePixel()
{
float2 one = (radius / radius) * (size / size);
dst = sampleNearest(src, outCoord());
}
}
//
// ActionScript source code:
//
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 ShaderDataExample extends Sprite {
private var loader:URLLoader;
public function ShaderDataExample() {
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
loader.load(new URLRequest("donothing.pbj"));
}
private function loadCompleteHandler(event:Event):void {
var shader:Shader = new Shader();
shader.byteCode = loader.data;
for (var p:String in shader.data) {
trace(p, ":", shader.data[p]);
for (var d:String in shader.data[p]) {
trace("\t", d, ":", shader.data[p][d]);
}
}
}
}
}
Tue Jun 12 2018, 03:47 PM Z
隱藏繼承公用屬性
顯示繼承公用屬性