2012-07-18 5 views
3

플래시 플레이어 11에서는 3D GPU 가속이 제공되지만 모든 비디오 카드가 작업을 수행 할 수있는 것은 아니며 지원되지 않는 비디오 카드가있을 때 소프트웨어로 가속이 전환됩니다. 내 애플리케이션을 사용자 정의하기 위해 하드웨어 가속을 사용할 수 있는지 확인할 수 있습니까?플래시 플레이어 11 GPU 가속 확인

trace("3d mode: " + context3D.driverInfo); 

은 나를 위해,이 나타냅니다 :

context3d

소프트웨어 렌더링을 테스트하는 것이 가장 쉬운 방법, 하드웨어 가속 GPU에 의해 표시 될 것이다

답변

8

당신은 Context3D 그것이 driverInfo의 볼 받아야합니다 DirectX 또는 OpenGL.

이 같은 구현 될 수있다 : GPU를 들어

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

    } 
} 

가 StageVideo 가속, 당신은 StageVideoAvailability.AVAILABLE을 확인 StageVideoAvailabilityEvent 수신. 당신이 StageVideo가 있으면

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

    } 
} 

이 상태가 StageVideoEvent.RENDER_STATE로 표시됩니다 렌더링 :

는 다음과 같이 구현 될 수있다. 디코딩 및 프레젠테이션 모두 하드웨어로 발생할 -

  • VideoStatus.ACCELERATED :

    var stageVideo = stage.stageVideos[0]; 
    stageVideo.addEventListener(StageVideoEvent.RENDER_STATE, stageVideoStateChange); 
    
    function stageVideoStateChange(event:StageVideoEvent):void 
    { 
        trace("Render State: " + event.status); 
    } 
    

    상태 StageVideoEvent.status 의해 유도 포함 렌더. (최상의 성능.)

  • VideoStatus.SOFTWARE - 소프트웨어로 디코딩, 하드웨어로 표현. (허용되는 성능)
  • VideoStatus.UNAVAILABLE - 비디오를 처리하는 데 사용할 수있는 GPU 리소스가 없으며 아무 것도 표시되지 않습니다. Video 객체로 돌아갑니다.
+0

감사합니다. @Jason Sturges. – Yovo

+0

'Sprite' 생성자에서'stage'를 사용할 수 없습니다, 당신은 [단계가 빠져 있습니다] (http://stackoverflow.com/a/13444450/238419). –

+0

@ BlueRaja-DannyPflughoeft이 ​​클래스는 애플리케이션의 루트 뷰이므로 '스테이지'가있는 별개의 예제입니다. 자손 디스플레이 객체가 필요로하는'Event.ADDED_TO_STAGE' 핸들러의 표준 라이프 사이클에 의해 복잡하지 않습니다. –