首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flash player 11检查GPU加速

flash player 11检查GPU加速
EN

Stack Overflow用户
提问于 2012-07-19 06:53:55
回答 1查看 1.9K关注 0票数 3

flash Player11带来了3D GPU加速,但并不是所有的视频卡都能完成这项工作,当有不支持的视频卡时,加速会切换到软件上。我是否可以检查硬件加速是否可用于自定义我的应用程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 08:25:36

您必须获取Context3D才能查看它的driverInfo

代码语言:javascript
复制
trace("3d mode: " + context3D.driverInfo);

对我来说,这表明:

最容易测试的软件渲染,硬件加速的图形处理器将指示为DirectX或OpenGL。

这可以这样实现:

代码语言:javascript
复制
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

这可以实现为:

代码语言:javascript
复制
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指示。

代码语言:javascript
复制
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 -解码和呈现都发生在硬件中。(最佳performance.)
  • VideoStatus.SOFTWARE -硬件演示,软件解码。(可接受的performance.)
  • VideoStatus.UNAVAILABLE -没有可用的图形处理器资源来处理视频,并且不显示任何内容。回退到视频对象。
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11551539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档