패키지 | 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).
예를 들어 이 셰이더는 하나의 입력 이미지(src
), 두 개의 매개 변수(size
, radius
) 그리고 세 개의 메타데이터 값(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 인스턴스에는 다음과 같은 속성이 포함됩니다.
속성 | 데이터 유형 | 값 |
---|---|---|
name | String | "DoNothing" |
nameSpace | String | "Adobe::Example" |
version | String | "1" |
description | String | "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()
함수에 사용되지 않은 모든 입력 이미지 또는 매개 변수는 셰이더가 바이트 코드에 컴파일될 때 제거됩니다. 이런 경우 ShaderData 인스턴스의 속성으로 추가되는 ShaderInput 또는 ShaderParameter 인스턴스는 없습니다.
일반적으로 개발자 코드는 ShaderData 인스턴스를 만들지 않습니다. 셰이더의 데이터, 매개 변수 및 입력을 포함하는 ShaderData 인스턴스는 Shader 인스턴스의 data
속성으로 제공됩니다.
관련 API 요소
메서드 | 정의 주체 | ||
---|---|---|---|
ShaderData(byteCode:ByteArray)
ShaderData 인스턴스를 만듭니다. | ShaderData | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
ShaderData | () | 생성자 |
data
속성에 ShaderData 인스턴스를 나열한 것입니다.
이 예제에서는 응용 프로그램의 출력 디렉토리와 동일한 디렉토리에 "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:17 PM Z