3
隨着閃存播放器11來了3D GPU加速但不是每個視頻卡都可以做這項工作,並且當不支持的視頻卡加速切換到軟件。我可以檢查硬件加速是否可用以定製我的應用程序。閃存播放器11檢查GPU加速
隨着閃存播放器11來了3D GPU加速但不是每個視頻卡都可以做這項工作,並且當不支持的視頻卡加速切換到軟件。我可以檢查硬件加速是否可用以定製我的應用程序。閃存播放器11檢查GPU加速
您必須獲得一個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對象。
謝謝@Jason Sturges。 – Yovo 2012-07-19 08:34:43
您不能在'Sprite'構造函數中使用'stage',[缺少一個步驟](http://stackoverflow.com/a/13444450/238419)。 – 2014-03-17 22:54:52
@ BlueRaja-DannyPflughoeft這是一個孤立的例子,其中stage是存在的,因爲這個類是應用程序的根視圖;不會被後代顯示對象所需的'Event.ADDED_TO_STAGE'處理程序的標準生命週期所捲入。 – 2014-03-18 02:30:36