С Flash Player 11 появилось 3D-ускорение с помощью графического процессора, но не каждая видеокарта может справиться с этой задачей, а когда неподдерживаемое ускорение видеокарты переключается на программное. Могу ли я проверить, доступно ли аппаратное ускорение, чтобы настроить мое приложение.
flash player 11 проверить ускорение графического процессора
Ответы (1)
Вы должны получить Context3D
, чтобы просмотреть его driverInfo
:
trace("3d mode: " + context3D.driverInfo);
Для меня это указывает:
Проще всего протестировать программный рендеринг, аппаратное ускорение графического процессора будет указано 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);
}
}
}
Для StageVideo с GPU-ускорением вы прослушиваете 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
— Ресурсы графического процессора недоступны для обработки видео, и ничего не отображается. Вернитесь к объекту Video.
person
Jason Sturges
schedule
19.07.2012
Вы не можете использовать
stage
в конструкторе Sprite
, вы пропустили шаг.
- person BlueRaja - Danny Pflughoeft; 18.03.2014
@BlueRaja-DannyPflughoeft Это изолированный пример, где присутствует
stage
, поскольку этот класс является корневым представлением приложения; не запутан стандартным жизненным циклом Event.ADDED_TO_STAGE
обработчиков, требуемых дочерними экранными объектами.
- person Jason Sturges; 18.03.2014