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