在独立模式下使用着色器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 对象的数据量。 注: 您可以一步完成 ShaderJob 对象 shader、target、width 和 height 属性的设置,方法是将相应的参数传递给 ShaderJob() 构造函数,如:var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);
准备好执行着色器时,调用 ShaderJob 对象的 start() 方法: job.start(); 默认情况下,调用 start() 导致 ShaderJob 以异步方式执行。在这种情况下,程序立即继续执行下一行代码,而不等待着色器完成处理。着色器操作完成时,ShaderJob 对象调用其 complete 事件的侦听器,通知它们操作已完成。在这里(即 complete 事件侦听器代码中),target 对象获得着色器操作结果。 注: 也可以不使用 target 属性对象,直接从传递给侦听器方法的事件对象处取得着色器结果。该事件对象是一个 ShaderEvent 实例。根据设置为 target 属性的对象的数据类型,ShaderEvent 对象有三个可用于访问结果的属性:ShaderEvent.bitmapData、ShaderEvent.byteArray 和 ShaderEvent.vector。
或者,可以将 true 参数传递给 start() 方法。在该情形下,着色器操作将同步执行。所有代码(包括与用户界面及所有其他事件的交互)在着色器执行时暂停。着色器完成处理后,target 对象包含着色器结果,程序继续执行下一行代码。 job.start(true); |
|