AS3进行3D设备测试

package jing.utils.display
{
    import flash.display.Stage;
    import flash.display.Stage3D;
    import flash.display3D.Context3DTextureFormat;
    import flash.display3D.textures.Texture;
    import flash.events.ErrorEvent;
    import flash.events.Event;

    import jing.turbo.handle.Handle;
    import jing.turbo.handle.HandleDispatcher;

    /**
     * 3D设备显存测试工具
     * @author Jing
     *
     */
    public class Device3DTest extends HandleDispatcher
    {
        private var _report:ReportData;

        /**
         * 测试报告
         * @return
         *
         */
        public function get report():ReportData
        {
            return _report;
        }

        private var _stage3D:Stage3D;

        public function runTest(stage:Stage):void
        {
            _report = new ReportData();
            _stage3D = stage.stage3Ds[0];
            _stage3D.addEventListener(Event.CONTEXT3D_CREATE, _stage3D_context3dCreatedHandler);
            _stage3D.addEventListener(ErrorEvent.ERROR, _stage3D_errorHandler);
            _stage3D.requestContext3D();
        }

        private function _stage3D_context3dCreatedHandler(e:Event):void
        {
            var texture:Texture;
            var count:int;

            try
            {
                while (true)
                {
                    texture = _stage3D.context3D.createTexture(512, 512, Context3DTextureFormat.BGRA, false);
                    count++;
                }

            }
            catch (e:Error)
            {

            }

            _report.maxMemoryCapacity = count << 20;
            _report.support3d = true;
            end();
        }

        private function _stage3D_errorHandler(e:ErrorEvent):void
        {
            end();
        }

        private function end():void
        {
            _stage3D.removeEventListener(Event.CONTEXT3D_CREATE, _stage3D_context3dCreatedHandler);
            _stage3D.removeEventListener(ErrorEvent.ERROR, _stage3D_errorHandler);
            _stage3D.context3D.dispose();
            _stage3D = null;
            this.sendHandle(new Handle(Handle.COMPLETE));
            trace("是否支持3D:", _report.support3d, " 显存容量: ", _report.maxMemoryCapacity >> 20, "MB");
        }

    }
}

class ReportData
{
    /**
     * 是否支持3D
     */
    public var support3d:Boolean = false;

    /**
     * 最大显示内存容量
     */
    public var maxMemoryCapacity:uint = 0;
}

  

posted on 2013-06-10 15:54  jinglikeblue  阅读(229)  评论(0)    收藏  举报

导航