셰이더를 독립 실행형 모드에서 사용하는 경우 셰이더 처리는 의도한 출력 사용 방법과 관계없이 실행됩니다. 실행할 셰이더를 지정하고 입력 및 매개 변수 값을 설정한 다음 결과 데이터를 배치할 객체를 지정합니다. 다음과 같은 두 가지 목적으로 셰이더를 독립 실행 모드에서 사용할 수 있습니다.
-
이미지가 아닌 데이터 처리: 독립 실행형 모드에서는 비트맵 이미지 데이터 이외에 임의의 이진 또는 숫자 데이터를 셰이더에 전달할 수 있습니다. 셰이더 결과가 비트맵 이미지 데이터뿐 아니라 이진 데이터 또는 숫자 데이터로 반환되도록 할 수도 있습니다.
-
백그라운드 처리: 셰이더를 독립 실행형 모드에서 실행할 경우 기본적으로 셰이더는 비동기적으로 실행됩니다. 즉, 셰이더는 응용 프로그램이 실행되는 동안 백그라운드에서 계속 실행되며 셰이더 처리가 완료되면 코드로 알림이 전달됩니다. 실행하는 데 오랜 시간이 걸리며 셰이더가 실행되는 동안 응용 프로그램 사용자 인터페이스나 그 밖의 처리를 중지시키지 않는 셰이더를 사용할 수 있습니다.
ShaderJob 객체를 사용하여 독립 실행형 모드에서 셰이더를 실행할 수 있습니다. 먼저 ShaderJob 객체를 만들고 이 객체를 실행할 셰이더를 나타내는 Shader 객체에 연결합니다.
var job:ShaderJob = new ShaderJob(myShader);
그런 다음 셰이더에 필요한 입력 또는 매개 변수 값을 설정합니다. 셰이더를 백그라운드에서 실행할 경우 ShaderJob 객체의
complete
이벤트에 대한 리스너도 등록합니다. 리스너는 셰이더의 작업이 완료될 때 호출됩니다.
function completeHandler(event:ShaderEvent):void
{
// do something with the shader result
}
job.addEventListener(ShaderEvent.COMPLETE, completeHandler);
그런 다음 셰이더 작업이 완료될 때 해당 결과를 쓸 객체를 만듭니다. ShaderJob 객체의
target
속성에 해당 객체를 할당합니다.
var jobResult:BitmapData = new BitmapData(100, 75);
job.target = jobResult;
ShaderJob을 사용하여 이미지 처리를 수행하는 경우에는
target
속성에 BitmapData 인스턴스를 할당합니다. 이진 또는 숫자 데이터를 처리하는 경우에는 ByteArray 객체 또는 Vector.<Number> 인스턴스를
target
속성에 할당합니다. 이러한 경우 ShaderJob 객체의
width
및
height
속성을 설정하여
target
객체에 출력할 데이터의 양을 지정해야 합니다.
참고:
var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);
과 같이
ShaderJob()
생성자에 인수를 전달하여 ShaderJob 객체의
shader
,
target
,
width
및
height
속성을 한 번에 설정할 수 있습니다.
셰이더를 실행할 준비가 되면 ShaderJob 객체의
start()
메서드를 호출합니다.
job.start();
기본적으로
start()
를 호출하면 ShaderJob이 비동기적으로 실행됩니다. 이 경우 셰이더가 완료될 때까지 기다리지 않고 코드의 다음 행에서 즉시 프로그램 실행을 계속할 수 있습니다. 셰이더 작업이 완료되면 ShaderJob 객체는 작업이 완료되었음을 알리는
complete
이벤트 리스너를 호출합니다. 이때, 즉
complete
이벤트 리스너의 본문에서
target
객체에는 셰이더 작업 결과가 포함됩니다.
참고:
target
속성 객체를 사용하는 대신 리스너 메서드에 전달된 이벤트 객체에서 직접 셰이더 결과를 가져올 수 있습니다. 이벤트 객체는 ShaderEvent 인스턴스입니다. ShaderEvent 객체에는
target
속성으로 설정한 객체의 데이터 유형에 따라 결과에 액세스하는 데 사용할 수 있는
ShaderEvent.bitmapData
,
ShaderEvent.byteArray
및
ShaderEvent.vector
속성이 있습니다.
또한
start()
메서드에
true
인수를 전달할 수 있습니다. 이 경우 셰이더 작업은 동기적으로 실행됩니다. 사용자 인터페이스 및 다른 이벤트와의 상호 작용을 포함하는 모든 코드는 셰이더가 실행되는 동안 일시 중지됩니다. 셰이더가 완료되면
target
객체에는 셰이더 결과가 포함되고 프로그램은 다음 코드 행에서 계속 실행됩니다.
job.start(true);