Flash Player11には3DGPUアクセラレーションが付属していますが、すべてのビデオカードがその機能を実行できるわけではなく、サポートされていないビデオカードがある場合はアクセラレーションがソフトウェアに切り替えられます。アプリケーションをカスタマイズするためにハードウェアアクセラレーションが利用可能かどうかを確認できますか?
質問する
1911 次
1 に答える
8
Context3D
を表示するには、を取得する必要がありますdriverInfo
。
trace("3d mode: " + context3D.driverInfo);
私にとって、これは次のことを示しています。
ソフトウェアレンダリングのテストが最も簡単なハードウェアアクセラレーションGPUは、DirectXまたはOpenGLで示されます。
これは次のように実装できます。
package
{
import flash.display.Sprite;
import flash.display.Stage3D;
import flash.display3D.Context3D;
import flash.display3D.Context3DRenderMode;
import flash.events.Event;
import flash.system.ApplicationDomain;
import flash.system.Capabilities;
public class X extends Sprite
{
public function X()
{
super();
if (ApplicationDomain.currentDomain.hasDefinition("flash.display.Stage3D"))
{
stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, onContext3DCreate);
stage.stage3Ds[0].requestContext3D();
}
}
private function onContext3DCreate(event:Event):void
{
// obtain context
var t:Stage3D = event.target as Stage3D;
var context3D:Context3D = t.context3D;
// detect software mode
if ((context3D.driverInfo == Context3DRenderMode.SOFTWARE)
|| (context3D.driverInfo.indexOf('oftware') > -1))
{
trace("Software mode detected!");
}
trace("Flash Version: " + Capabilities.version);
trace("3D mode: " + context3D.driverInfo);
}
}
}
GPUで高速化されたStageVideoの場合、StageVideoAvailabilityEvent
確認のためにリッスンしますStageVideoAvailability.AVAILABLE
。
これは次のように実装できます。
package
{
import flash.display.Sprite;
import flash.events.StageVideoAvailabilityEvent;
import flash.media.StageVideoAvailability;
public class X extends Sprite
{
public function X()
{
super();
stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, onStageVideoState);
}
private function onStageVideoState(event:StageVideoAvailabilityEvent):void
{
if (event.availability == StageVideoAvailability.AVAILABLE)
trace("available");
}
}
}
StageVideoを作成すると、レンダリング状態はで示されStageVideoEvent.RENDER_STATE
ます。
var stageVideo = stage.stageVideos[0];
stageVideo.addEventListener(StageVideoEvent.RENDER_STATE, stageVideoStateChange);
function stageVideoStateChange(event:StageVideoEvent):void
{
trace("Render State: " + event.status);
}
レンダリング状態は、次のものによって導出され、次のものStageVideoEvent.status
が含まれます。
VideoStatus.ACCELERATED
-デコードと表示はどちらもハードウェアで行われます。(最高のパフォーマンス。)VideoStatus.SOFTWARE
-ハードウェアでのプレゼンテーション、ソフトウェアでのデコード。(許容できるパフォーマンス。)VideoStatus.UNAVAILABLE
-ビデオを処理するために使用できるGPUリソースがなく、何も表示されません。Videoオブジェクトにフォールバックします。
于 2012-07-19T00:25:36.140 に答える