Note that there are some explanatory texts on larger screens.

plurals
  1. POFlash MouseMove performance issue
    text
    copied!<p>My Test Case is to draw Two triangles and then wait six millseconds. When doing this,it's fps is at 60.</p> <p>If I wave the mouse on the stage, then the fps is not stable. The Inactive time will increase and I have no way to decrease the inactive time. Why is this hapening.</p> <p>Below are several screenshots.</p> <p>Screen capture of scout: <a href="http://i.stack.imgur.com/xK0xV.png" rel="nofollow">http://i.stack.imgur.com/xK0xV.png</a></p> <p>GPUView fps Graph: <a href="http://i.stack.imgur.com/XO0HQ.png" rel="nofollow">http://i.stack.imgur.com/XO0HQ.png</a></p> <p>And the code of the application</p> <pre><code>package { import com.adobe.utils.AGALMiniAssembler; import com.adobe.utils.PerspectiveMatrix3D; import flash.display.Bitmap; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageDisplayState; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DCompareMode; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DTextureFormat; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.display3D.textures.Texture; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Matrix3D; import flash.geom.Rectangle; import flash.text.TextField; import flash.utils.getTimer; [SWF(width="1000",height="600", backgroundColor = 0x000000, frameRate="60")] public class SingleThreadRender extends Sprite { [Embed( source = "RockSmooth.jpg" )] protected const TextureBitmap:Class; protected var context3D:Context3D; protected var vertexbuffer:VertexBuffer3D; protected var indexBuffer:IndexBuffer3D; protected var program:Program3D; protected var texture:Texture; protected var projectionTransform:PerspectiveMatrix3D; private var dataReady :Boolean = false; private var text :TextField = null; public function SingleThreadRender() { text = new TextField(); text.text = "gogo"; addChild(text); stage.mouseChildren = false; startRenderThread(); } private function startRenderThread() :void { stage.stage3Ds[0].addEventListener( Event.CONTEXT3D_CREATE, initMolehill ); stage.stage3Ds[0].requestContext3D(); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.stageHeight = 600 stage.stageWidth = 800; addEventListener(Event.ENTER_FRAME, onRender); stage.addEventListener(MouseEvent.RIGHT_CLICK,rightClickHandler); } protected function initMolehill(e:Event):void { context3D = stage.stage3Ds[0].context3D; context3D.configureBackBuffer(1000, 600, 1, true); var vertices:Vector.&lt;Number&gt; = Vector.&lt;Number&gt;([ -3,-3, 0,0, 0, // x, y, z, u, v -3, 3, 0, 0, 1, 3, -3, 0, 1, 1, 3, 3, 0, 1, 0]); vertexbuffer = context3D.createVertexBuffer(4, 5); vertexbuffer.uploadFromVector(vertices, 0, 4); indexBuffer = context3D.createIndexBuffer(6); indexBuffer.uploadFromVector (Vector.&lt;uint&gt;([0, 1, 2, 2, 3, 0]), 0, 6); var bitmap:Bitmap = new TextureBitmap(); texture = context3D.createTexture(bitmap.bitmapData.width, bitmap.bitmapData.height, Context3DTextureFormat.BGRA, false); texture.uploadFromBitmapData(bitmap.bitmapData); var vertexShaderAssembler : AGALMiniAssembler = new AGALMiniAssembler(); vertexShaderAssembler.assemble( Context3DProgramType.VERTEX, "m44 op, va0, vc0\n" + // pos to clipspace "mov v0, va1" // copy uv ); var fragmentShaderAssembler : AGALMiniAssembler= new AGALMiniAssembler(); fragmentShaderAssembler.assemble( Context3DProgramType.FRAGMENT, "tex ft1, v0, fs0 &lt;2d,linear,nomip&gt;\n" + "mov oc, ft1" ); program = context3D.createProgram(); program.upload( vertexShaderAssembler.agalcode, fragmentShaderAssembler.agalcode); projectionTransform = new PerspectiveMatrix3D(); var aspect:Number = 4/3; var zNear:Number = 0.1; var zFar:Number = 1000; var fov:Number = 45*Math.PI/180; projectionTransform.perspectiveFieldOfViewLH(fov, aspect, zNear, zFar); } private function rightClickHandler(event :MouseEvent) :void { stage.removeEventListener(MouseEvent.RIGHT_CLICK,rightClickHandler); stage.fullScreenSourceRect = new Rectangle( 0,0,stage.fullScreenWidth,stage.fullScreenHeight); stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; } private var firstTime :Boolean = true; protected function onRender(e:Event):void { if(stage.frameRate != 60) { stage.frameRate = 60; } if ( !context3D ) return; var start :int = flash.utils.getTimer(); var now :int = 0; while(true) { now = flash.utils.getTimer(); if((now - start) &gt; 6) { break; } } context3D.clear ( 1,1, 1, 1 ); context3D.setDepthTest( true, Context3DCompareMode.LESS_EQUAL); context3D.setVertexBufferAt (0, vertexbuffer, 0, Context3DVertexBufferFormat.FLOAT_3); context3D.setVertexBufferAt(1, vertexbuffer, 3, Context3DVertexBufferFormat.FLOAT_2); context3D.setTextureAt(0, texture); context3D.setProgram(program); var m:Matrix3D = new Matrix3D(); m.appendTranslation(0, 0, 2); m.append(projectionTransform); context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, m, true); var i:int = 2; while(i--) context3D.drawTriangles(indexBuffer,0,2); context3D.present(); while(true) { now = flash.utils.getTimer(); if((now - start) &gt; 6) { break; } } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload