독립 실행형 모드에서 셰이더 사용

Flash Player 10 이상, Adobe AIR 1.5 이상

셰이더를 독립 실행형 모드에서 사용하는 경우 셰이더 처리는 의도한 출력 사용 방법과 관계없이 실행됩니다. 실행할 셰이더를 지정하고 입력 및 매개 변수 값을 설정한 다음 결과 데이터를 배치할 객체를 지정합니다. 다음과 같은 두 가지 목적으로 셰이더를 독립 실행 모드에서 사용할 수 있습니다.

  • 이미지가 아닌 데이터 처리: 독립 실행형 모드에서는 비트맵 이미지 데이터 이외에 임의의 이진 또는 숫자 데이터를 셰이더에 전달할 수 있습니다. 셰이더 결과가 비트맵 이미지 데이터뿐 아니라 이진 데이터 또는 숫자 데이터로 반환되도록 할 수도 있습니다.

  • 백그라운드 처리: 셰이더를 독립 실행형 모드에서 실행할 경우 기본적으로 셰이더는 비동기적으로 실행됩니다. 즉, 셰이더는 응용 프로그램이 실행되는 동안 백그라운드에서 계속 실행되며 셰이더 처리가 완료되면 코드로 알림이 전달됩니다. 실행하는 데 오랜 시간이 걸리며 셰이더가 실행되는 동안 응용 프로그램 사용자 인터페이스나 그 밖의 처리를 중지시키지 않는 셰이더를 사용할 수 있습니다.

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);