存取著色器中繼資料
Flash Player 10 以及更新的版本,Adobe AIR 1.5 以及更新的版本
建立 Pixel Bender 著色器核心時,作者也可以在 Pixel Bender 原始碼中指定有關著色器的中繼資料。在 ActionScript 中使用著色器時,您也可以檢查著色器並擷取其中繼資料。
當您建立 Shader 實體並連結至 Pixel Bender 著色器時,就會建立包含有關著色器資料的 ShaderData 物件,並儲存在 Shader 物件的
data
屬性中。ShaderData 類別不會定義本身的任何屬性。但是在執行階段,則會為著色器原始碼中所定義的每個中繼資料值,以動態方式將屬性加入至 ShaderData 物件。每個屬性的名稱都與中繼資料內所指定的名稱相同。例如,假設 Pixel Bender 著色器的原始碼包含下列中繼資料定義:
namespace : "Adobe::Example";
vendor : "Bob Jones";
version : 1;
description : "Creates a version of the specified image with the specified brightness.";
那麼,便會以下列屬性和值為該著色器建立 ShaderData 物件:
-
namespace
(String):
"Adobe::Example"
-
vendor
(String):
"Bob Jones"
-
version
(String):
"1"
-
description
(String):
"Creates a version of the specified image with the specified brightness"
由於中繼資料屬性是以動態方式加入至 ShaderData 物件,您可以使用
for..in
迴圈來檢查 ShaderData 物件。您可以使用這項技巧,查明著色器是否有任何中繼資料以及中繼資料的值。除了中繼資料屬性以外,ShaderData 物件也可以具有代表在著色器中所定義輸入和參數的屬性。當您使用
for..in
迴圈來檢查 ShaderData 物件時,請檢查每個屬性的資料類型,以判斷屬性是輸入 (ShaderInput 實體)、參數 (ShaderParameter 實體) 或中繼資料值 (String 實體)。下列範例說明如何使用
for..in
迴圈來檢查著色器
data
屬性的動態屬性。每一個中繼資料值都會加入至 Vector 實體
metadata
。請注意,這個範例是假設 Shader 實體
myShader
已經建立:
var shaderData:ShaderData = myShader.data;
var metadata:Vector.<String> = new Vector.<String>();
for (var prop:String in shaderData)
{
if (!(shaderData[prop] is ShaderInput) && !(shaderData[prop] is ShaderParameter))
{
metadata[metadata.length] = shaderData[prop];
}
}
// do something with the metadata
此範例還有另一種版本,可同時擷取著色器輸入和參數,請參閱
識別著色器輸入和參數
。如需有關輸入和參數屬性的詳細資訊,請參閱
指定著色器輸入和參數值
。
|
|
|