Git Product home page Git Product logo

aerys / minko Goto Github PK

View Code? Open in Web Editor NEW
902.0 902.0 210.0 246.79 MB

3D framework for web, desktop and mobile devices.

Home Page: http://minko.io

License: Other

Lua 0.39% C++ 55.66% HTML 0.01% CSS 0.01% GLSL 0.30% C 41.83% Python 0.41% Shell 0.11% Java 0.13% CMake 0.33% Objective-C 0.41% JavaScript 0.04% Objective-C++ 0.03% Perl 0.06% Ruby 0.01% Batchfile 0.01% LLVM 0.03% Yacc 0.12% HLSL 0.06% Makefile 0.07%

minko's People

Contributors

adrienneveu avatar aerys-marvin avatar alioune05 avatar aurelienft avatar ezterry avatar indiscible avatar ithamar avatar jmlx42 avatar josefnpat avatar jpx avatar jupotter avatar nicozet avatar noxalus avatar pierre-ed avatar pixday avatar plepers avatar symil avatar warrenseine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

minko's Issues

Bug with null at _fsTexture

Example, using self made Shader

package {
    import aerys.minko.render.Effect;
    import aerys.minko.render.geometry.primitive.CubeGeometry;
    import aerys.minko.render.material.basic.BasicMaterial;
    import aerys.minko.render.material.basic.BasicProperties;
    import aerys.minko.render.resource.texture.TextureResource;
    import aerys.minko.scene.node.Mesh;
    import aerys.minko.type.loader.TextureLoader;
    import flash.events.Event;

    public class Main extends MinkoExampleApplication {

        [Embed("../assets/egg_bomb.png")]
        private static const ASSET_TEXTURE:Class;

        override protected function initializeScene() : void {
            super.initializeScene();

            createObjects();
        }

        private function createObjects():void {
            var texture:TextureResource = TextureLoader.loadClass(ASSET_TEXTURE);

            var m:Mesh = new Mesh(CubeGeometry.cubeGeometry, new BasicMaterial(null, new Effect(new TestShader())) );
            scene.addChild(m);
            m.properties.setProperty(BasicProperties.DIFFUSE_MAP, texture);
        }

    }
}
import aerys.minko.render.geometry.stream.format.VertexComponent;
import aerys.minko.render.material.basic.BasicProperties;
import aerys.minko.render.shader.SFloat;
import aerys.minko.render.shader.Shader;

class TestShader extends Shader {

    override protected function getVertexPosition(): SFloat {
        return localToScreen( getVertexAttribute(VertexComponent.XYZ) );
    }

    override protected function getPixelColor(): SFloat {
        var diffuseMap: SFloat = meshBindings.getTextureParameter(BasicProperties.DIFFUSE_MAP);
        return  sampleTexture(diffuseMap, interpolate(vertexUV.xy));
    }
}

Result:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at aerys.minko.render::DrawCall/apply()[\aerys\minko\render\DrawCall.as:315]
at aerys.minko.scene.controller.scene::RenderingController/render()[\aerys\minko\scene\controller\scene\RenderingController.as:299]
at aerys.minko.scene.node::Scene/render()[\aerys\minko\scene\node\Scene.as:179]

if at first set texture - no error

m.properties.setProperty(BasicProperties.DIFFUSE_MAP, texture);
scene.addChild(m);

DirectionalLight transform

It seems to me that the DirectionalLight transform doesn't work.

_light.transform.setTranslation(0, -100, 0);

In the directional light example, the light source didn't change it's position.
The shadows are on the same wall as before.

Regards!

Weird Y axis rotation bug

When you rotate something unexpected behavior happens when Y rotation is between 1/2 * Pi and 3/2 * Pi (90 and 270 degrees). In this sample it just changes rotation direction, while in our actual scene sample model gets flipped upside-down (and also it's flipping directional light for us)

package aerys.minko.example.collada.seymourplane
{
    import aerys.minko.scene.node.AbstractSceneNode;
    import aerys.minko.scene.node.Scene;
    import aerys.minko.type.loader.ILoader;
    import aerys.minko.type.loader.SceneLoader;
    import aerys.minko.type.loader.TextureLoader;
    import aerys.minko.type.loader.parser.ParserOptions;
    import aerys.minko.type.parser.collada.ColladaParser;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    import flash.net.URLRequest;

    public class SeymourPlaneExample extends MinkoExampleApplication
    {
        private var _node:AbstractSceneNode;

        override protected function initializeScene():void
        {
            super.initializeScene();

            cameraController.distance = 30;
            cameraController.distanceStep = 1;

            var options : ParserOptions     = new ParserOptions();

            options.parser                  = ColladaParser;
            options.loadDependencies        = true;
            options.mipmapTextures          = true;
            options.dependencyLoaderClosure = dependencyLoaderClosure;

            scene.load(new URLRequest("../assets/seymour_plane/seymourplane.DAE"), options);

            scene.descendantAdded.add(onAdded);
        }

        private function onAdded(param1:Scene, param2:Object):void
        {
            _node = param2 as AbstractSceneNode;

            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

        }

        private function onKeyDown(e:KeyboardEvent):void 
        {
            switch (e.keyCode) 
            {
                case Keyboard.LEFT:
                    _node.rotationY += Math.PI / 8;
                break;
                case Keyboard.RIGHT:
                    _node.rotationY -= Math.PI / 8;
                break;
                default:
            }
        }

        private function dependencyLoaderClosure(dependencyPath : String,
                                                 isTexture      : Boolean,
                                                 options        : ParserOptions) : ILoader
        {
            var loader : ILoader;

            if (isTexture)
            {
                var correctedURL : String = "../assets/seymour_plane/" 
                    + dependencyPath.match(/^.*\/([^\/]+)\..*$/)[1]
                    + ".jpg";

                loader = new TextureLoader(true);
                loader.load(new URLRequest(correctedURL));
            }
            else
            {
                loader = new SceneLoader(options);
                loader.load(new URLRequest(dependencyPath));
            }

            return loader;
        }
    }
}


Error: Another Dataprovider is already declaring the 'skinningNumBones' property.

Error: Another Dataprovider is already declaring the 'skinningNumBones' property.
    at aerys.minko.type.data::DataBindings/addProvider()[F:\minko2\mapEditor\src\aerys\minko\type\data\DataBindings.as:53]
    at aerys.minko.scene.controller.mesh::SkinningController/targetAddedHandler()[F:\minko2\mapEditor\src\aerys\minko\scene\controller\mesh\SkinningController.as:231]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[F:\minko2\mapEditor\src\aerys\minko\type\Signal.as:81]
    at aerys.minko.scene.controller::AbstractController/addTarget()[F:\minko2\mapEditor\src\aerys\minko\scene\controller\AbstractController.as:82]
    at aerys.minko.scene.node::AbstractSceneNode/addController()[F:\minko2\mapEditor\src\aerys\minko\scene\node\AbstractSceneNode.as:222]
    at aerys.minko.scene.node::AbstractSceneNode/copyControllersFrom()[F:\minko2\mapEditor\src\aerys\minko\scene\node\AbstractSceneNode.as:302]
    at aerys.minko.scene.node.mesh::Mesh/copyFrom()[F:\minko2\mapEditor\src\aerys\minko\scene\node\mesh\Mesh.as:297]
    at aerys.minko.scene.node.mesh::Mesh/clone()[F:\minko2\mapEditor\src\aerys\minko\scene\node\mesh\Mesh.as:252]
    at aerys.minko.scene.node::Group/clone()[F:\minko2\mapEditor\src\aerys\minko\scene\node\Group.as:351]
    at aerys.minko.scene.node::Group/clone()[F:\minko2\mapEditor\src\aerys\minko\scene\node\Group.as:351]
    at aerys.minko.scene.node::Group/clone()[F:\minko2\mapEditor\src\aerys\minko\scene\node\Group.as:351]
    at aerys.map::mapWorks/onImportComplete()[F:\minko2\mapEditor\src\aerys\map\mapWorks.as:114]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[F:\minko2\mapEditor\src\aerys\minko\type\Signal.as:81]
    at aerys.minko.type.loader::SceneLoader/onParseComplete()[F:\minko2\mapEditor\src\aerys\minko\type\loader\SceneLoader.as:207]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[F:\minko2\mapEditor\src\aerys\minko\type\Signal.as:81]
    at aerys.minko.types.parser::mapParser/afterAllAttachment()[F:\minko2\mapEditor\src\aerys\minko\types\parser\mapParser.as:102]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[F:\minko2\mapEditor\src\aerys\minko\type\Signal.as:81]
    at aerys.minko.types.parser.sceneDeserializer::SceneDeserializer/readyForAttachment()[F:\minko2\mapEditor\src\aerys\minko\types\parser\sceneDeserializer\SceneDeserializer.as:216]
    at aerys.minko.types.parser.sceneDeserializer::SceneDeserializer/decrementDependencyCounter()[F:\minko2\mapEditor\src\aerys\minko\types\parser\sceneDeserializer\SceneDeserializer.as:191]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[F:\minko2\mapEditor\src\aerys\minko\type\Signal.as:81]
    at aerys.minko.type.loader::TextureLoader/loadBytesCompleteHandler()[F:\minko2\mapEditor\src\aerys\minko\type\loader\TextureLoader.as:163]

Non-existent consumer error when using Effect.setExtraPasses()

The following exception is encountered when using setExtraPasses() while the application is running.

In my circumstances, I have an effect with two shader passes by default. When the user toggles on or off a specific setting, setExtraPasses() is called to invalidate the the effect and set the new shader pass list (as a pass may have been added or removed, depending on the setting).

The shaders have been created previously and stored as a private instance member for later reuse, rather than being recreated each time the setting is changed.

Error: This consumer does not exist.
    at aerys.minko.type.binding::DataBindings/removeConsumer()[C:\Work\Global\flash\frameworks\aerys\minko\minko\src\aerys\minko\type\binding\DataBindings.as:298]
    at aerys.minko.render::DrawCall/unsetBindings()[C:\Work\Global\flash\frameworks\aerys\minko\minko\src\aerys\minko\render\DrawCall.as:177]
    at aerys.minko.scene.controller.scene::RenderingController/unbindShaderInstance()[C:\Work\Global\flash\frameworks\aerys\minko\minko\src\aerys\minko\scene\controller\scene\RenderingController.as:850]
    at aerys.minko.scene.controller.scene::RenderingController/deleteDrawCalls()[C:\Work\Global\flash\frameworks\aerys\minko\minko\src\aerys\minko\scene\controller\scene\RenderingController.as:577]
    at aerys.minko.scene.controller.scene::RenderingController/effectInstancePassesChangedHandler()[C:\Work\Global\flash\frameworks\aerys\minko\minko\src\aerys\minko\scene\controller\scene\RenderingController.as:469]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[C:\Work\Global\flash\frameworks\aerys\minko\minko\src\aerys\minko\type\Signal.as:131]
    at aerys.minko.render::Effect/invalidateInstance()[C:\Work\Global\flash\frameworks\aerys\minko\minko\src\aerys\minko\render\Effect.as:106]
    at aerys.minko.render::Effect/setExtraPasses()[C:\Work\Global\flash\frameworks\aerys\minko\minko\src\aerys\minko\render\Effect.as:53]

2.0b Some minor issues with shader compiler

Shader compiler still generates unnecessary mov instructions in some cases. I thought it was fixed some time ago. Well, I'm almost sure it was. But now it's back again (maybe it was introduced with one of the latest commits)

Here is a simple shader to test:

    import aerys.minko.render.shader.SFloat;
    import aerys.minko.render.shader.Shader;
    import aerys.minko.render.shader.ShaderSettings;
    import aerys.minko.type.enum.DepthTest;
    import aerys.minko.type.enum.SamplerFiltering;
    import aerys.minko.type.enum.SamplerMipMapping;
    import aerys.minko.type.enum.SamplerWrapping;
    import aerys.minko.type.enum.TriangleCulling;

    public class SkydomeShader extends Shader {
        private var _skySphereRadius    : Number;
        private var _uvScale            : Number;

        public function SkydomeShader(skydomeRadius:Number, skySphereRadius:Number) 
        {
            super();

            _skySphereRadius = skySphereRadius;
            _uvScale = 0.5 * skySphereRadius / skydomeRadius;
        }

        override protected function getVertexPosition(): SFloat 
        {
            return multiply4x4(
                float4(
                    deltaWorldToView(
                        multiply(
                            vertexXYZ.xyz,
                            float(_skySphereRadius).xxx
                        )
                    ), 
                    1
                ), 
                projectionMatrix
            );
        }

        override protected function getPixelColor(): SFloat 
        {
            var diffuseMap: SFloat = meshBindings.getTextureParameter(
                "diffuseMap", 
                sceneBindings.getConstant("diffuseFiltering", SamplerFiltering.LINEAR),
                SamplerMipMapping.DISABLE,
                SamplerWrapping.REPEAT
            );

            var pixelColor: SFloat = sampleTexture(
                diffuseMap, 
                interpolate(
                    add(
                        multiply(
                            vertexXYZ.xz,
                            float(_uvScale).xx
                        ),
                        float(0.5).xx
                    )
                )
            );

            return pixelColor;
        }

        override protected function initializeSettings(settings:ShaderSettings): void 
        {
            settings.triangleCulling = TriangleCulling.NONE;
            settings.depthTest = DepthTest.ALWAYS;
            settings.depthWriteEnabled = false;
            settings.priority = 100500;
        }
    }

And the AGAL output it produced:

- vertex shader
mov vt0.w, vc8.xxxx
mul vt0.xyz, va0.xyzz, vc8.yyyy
m33 vt0.xyz, vt0.xyzz, vc0.xyzw
mov vt0.xyz, vt0.xyzz
m44 vt0.xyzw, vt0.xyzw, vc4.xyzw
mov op.xyzw, vt0.xyzw
mul vt0.xy, va0.xzzz, vc8.zzzz
add vt0.xy, vt0.xyyy, vc8.wwww
mov v0.xyzw, vt0.xyyy
- fragment shader
tex ft0.xyzw, v0.xyyy, fs0 <linear,mipnone,repeat,2d>
mov oc.xyzw, ft0.xyzw

As you can see, there is a useless mov instruction in the 4th line of vertex shader.

Also I've noticed that kil instruction is now always placed at the end of fragment shader (not in this particular one, but in other shaders I have). This is not good for performance. Instead, kil should be executed as early as possible to prevent unnecessary computations (like fog, lighting etc.) of absent pixels

Error at VertexStream.getMinMaxBetween

at branch:dev 23f8a88

RangeError: Error #1125: The index 3 is out of range 3.
at aerys.minko.render.geometry.stream::VertexStream/getMinMaxBetween():218
at aerys.minko.render.geometry::Geometry/updateBoundingVolumes():850
at aerys.minko.render.geometry::Geometry/initialize():207

Geometry.updateBoundingVolumes()
                ...
                var minimum : Vector.<Number>   = new Vector.<Number>(3, true);
                var maximum : Vector.<Number>   = new Vector.<Number>(3, true);

                xyzStream.getMinMaxBetween(firstIndex, numTriangles * 3, minimum, maximum);

VertexStream.getMinMaxBetween
            ...
            for (i = 0; i < numFloatsPerVertex; ++i)
            {
                min[i] = Number.MAX_VALUE;
                max[i] = -Number.MAX_VALUE;
            }

min and max have fixed size 3, but numFloatsPerVertex == 5
And VertexStream.getMinMaxBetween have a logic error.

Bug at camera.transform + getWorldToLocalTransform

package {
    import aerys.minko.render.geometry.primitive.CubeGeometry;
    import aerys.minko.scene.node.Mesh;
    import aerys.minko.type.math.Vector4;
    import flash.events.Event;

    public class Main extends MinkoExampleApplication {

        override protected function initializeScene() : void {
            super.initializeScene();

            scene.addChild(new Mesh(CubeGeometry.cubeGeometry));

            _lookAt = new Vector4();
            _position = new Vector4();
        }

        override protected function enterFrameHandler(event : Event) : void
        {
            rotateX += 0.01;

            _position.set(
                _lookAt.x + 5 * Math.sin(rotateX),
                _lookAt.y + 5 * Math.cos(rotateX),
                _lookAt.z
            );

            camera.transform.lookAt(_lookAt, _position, Vector4.Y_AXIS);

            // camera.getWorldToLocalTransform(true);

            super.enterFrameHandler(event);
        }

        private var rotateX:Number = 0;
        private var _lookAt:Vector4;
        private var _position:Vector4;
    }
}

At this example, camera rotating around cube.
If uncomment "camera.getWorldToLocalTransform(true);", camera will stop rotating.

Matrix4x4.toString() called in CameraController.localToWorldChangedHandler event chain

See the following screenshot:

This has started occurring after the latest commits to the /dev branch. This did not happen before commit d6713b6. I have attempted to follow the function chain but cannot successfully find the reason as to why toString() is being called. Removing the toString() method from Matrix4x4.as gets around the problem temporarily, but obviously this is not a reasonable solution.

difference between localToWorld.invert & worldToLocalTransform

package {
    import aerys.minko.scene.node.camera.AbstractCamera;
    import aerys.minko.type.math.Matrix4x4;

    public class Main extends MinkoExampleApplication {

        override protected function initializeScene() : void {
            super.initializeScene();

            camera.localToWorldTransformChanged.add(localToWorldChangedHandler);
        }

        private function localToWorldChangedHandler(camera          : AbstractCamera,
                                                    localToWorld    : Matrix4x4) : void
        {
            var tmp:Matrix4x4 = new Matrix4x4();
            tmp.copyFrom(localToWorld);
            tmp.invert();
            trace('1. worldToLocal', tmp);

            camera.getWorldToLocalTransform(true, tmp);
            trace('2. worldToLocal', tmp);
        }

    }
}

start:

  1. worldToLocal [Matrix4x4 (1,-3.7493993930529855e-33,-6.123234262925839e-17,0,0,1,-6.123234262925839e-17,0,6.123234262925839e-17,6.123234262925839e-17,1,0,1.3234889800848443e-23,1.3234889800848443e-23,5,1]
  2. worldToLocal [Matrix4x4 (1,-3.7493993930529855e-33,-6.123234262925839e-17,0,0,1,-6.123234262925839e-17,0,6.123234262925839e-17,6.123234262925839e-17,1,0,1.3234889800848443e-23,1.3234889800848443e-23,5,1]

rotating camera:

  1. worldToLocal [Matrix4x4 (0.9999499320983887,6.123131072144423e-19,0.009999832138419151,0,0,1,-6.123234262925839e-17,0,-0.009999833069741726,6.12292787522695e-17,0.9999499320983887,0,-4.656845575823354e-9,1.3234889800848443e-23,5,1]
  2. worldToLocal [Matrix4x4 (1,-3.7493993930529855e-33,-6.123234262925839e-17,0,0,1,-6.123234262925839e-17,0,6.123234262925839e-17,6.123234262925839e-17,1,0,1.3234889800848443e-23,1.3234889800848443e-23,5,1]

Component.getMaxWriteOffset() returns -1 causes shader compiler bug

we are coding a terrain shader with normal map,the code is very simple,

override protected function getPixelColor():SFloat
{
var diffuse:SFloat=float4(0,0,0,0);

var uv: SFloat  =float2(0.2,0.2); //interpolate(vertexXY.xy);  get uv 
var lighting:SFloat=float3(0.3,0.2,0.5); //getlayerLightingPart(0).getLightingColor();  get lighting color by normal map 
var layerFactor:SFloat=float4(0.5,0.2,0.2,0.1);//interpolate(getVertexAttribute(TerrainActiveConst.TERRAIN_TEXTURE));  get terrain layer texture
var layerDiffuseMap:SFloat= meshBindings.getTextureParameter("diffuseMap0",SamplerFiltering.LINEAR, SamplerMipMapping.LINEAR, SamplerWrapping.REPEAT);
var layerRepeat:SFloat=meshBindings.getParameter("uvScale0",1);
var layerDiffuse:SFloat=sampleTexture(layerDiffuseMap, multiply(uv.xy,layerRepeat)).scaleBy(layerFactor.x); //sample texture color 
lighting= multiply(lighting,layerDiffuse.rgb);//diffuse color
layerDiffuse =float4(lighting.rgb,layerDiffuse.a);//get layer color         
diffuse=add(diffuse,layerDiffuse);
return diffuse;

}

an error will invoke while compiling the shader,the function computeSize() of Instruction.as cause the error:
getMaxWriteOffset(component2)=-1 and getMinWriteOffset(component2)=4,
and then throw Error
at aerys.minko.render.shader.compiler.graph.nodes.vertex::Instruction/computeSize()[D:\flexwork\GameEditor\src\aerys\minko\render\shader\compiler\graph\nodes\vertex\Instruction.as:227]
at aerys.minko.render.shader.compiler.graph.nodes::AbstractNode/get size()[D:\flexwork\GameEditor\src\aerys\minko\render\shader\compiler\graph\nodes\AbstractNode.as:35]

LighAwareShaderPart.vsLocalPosition and vsLocalNormal ignore vertex transformations in vertex shader

I don't think this is a bug, its more of a limitation, but I'm posting it here just in case:

LightAwateDiffuseShaderPart.vsLocalPosition and vsLocalNormal methods rely on a VertexAnimationShaderPart.getAnimatedVertexPosition and getVertexNormal(). These methods will always read the XYZ and NORMAL vertex components. So if you want to use this in combination with any transformation in your vertex shader, the transformed vertex's position and normal will be ignored when calculating the lightings, environment, reflections, etc

For example if you want to have water surface with smooth waves calculated in the vertex shader, the reflection and lights won't update properly with the waving.

Again I know this is very minor.

StreamingAMFChannel could not be found.

this error will throw via FlashBuilder 4.7

1172: Definition mx.messaging.channels:StreamingAMFChannel could not be found.  SceneIterator.as    /minko-examples/[source path] minko-src/aerys/minko/scene   line 15 Flex Problem

actually it never use so simply remove

import mx.messaging.channels.StreamingAMFChannel;

should fix this :)

Thanks

Bug in PickingController when PickingTechnique.PIXEL_PICKING and antiAliasing > 0

Because of antialiasing the final color in backBuffer can change to id of another Mesh, and that will lead to error in detecting Mesh under cursor.
Changing antiAliasing before and after PickingShader is bad:

Configuring the buffer is a slow operation.
Avoid changing the buffer size or attributes during normal rendering operations.

So i suggest at PickingController:
at function addMesh

_pickingId = (_pickingId + ID_INCREMENT) & 0xFFFF;
var id:uint = _pickingId | 0xFF0000;
...

at function updateMouseOverElement:

if ((pixelColor & 0xFF0000) == 0xFF0000) {
 _currentMouseOver = _pickingIdToMesh[pixelColor];
} else {
  // wrong antiAliasing color
 _currentMouseOver = null;
}

JointsDebugController throw null via getValueToken

i think something need to be fix at

result.get('//mesh[hasController(SkinningController)]')

to reproduce please use master branches and
http://hub.aerys.in/index.php/Minko:JointsDebugController_Example

error detail

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at aerys.minko.scene::SceneIterator/getValueToken()[C:\fork\minko\src\aerys\minko\scene\SceneIterator.as:195]
    at aerys.minko.scene::SceneIterator/filterOnValue()[C:\fork\minko\src\aerys\minko\scene\SceneIterator.as:361]
    at aerys.minko.scene::SceneIterator/parsePredicate()[C:\fork\minko\src\aerys\minko\scene\SceneIterator.as:328]
    at aerys.minko.scene::SceneIterator/parseNodeType()[C:\fork\minko\src\aerys\minko\scene\SceneIterator.as:291]
    at aerys.minko.scene::SceneIterator/initialize()[C:\fork\minko\src\aerys\minko\scene\SceneIterator.as:128]
    at aerys.minko.scene::SceneIterator()[C:\fork\minko\src\aerys\minko\scene\SceneIterator.as:39]
    at aerys.minko.scene.node::Group/get()[C:\fork\minko\src\aerys\minko\scene\node\Group.as:385]
    at Function/<anonymous>()[C:\labs\minko-test\libs\minko-examples\src\aerys\minko\example\collada\astroboy\AstroboyExample.as:42]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[C:\fork\minko\src\aerys\minko\type\Signal.as:75]
    at aerys.minko.type.loader::SceneLoader/callLaterComplete()[C:\fork\minko\src\aerys\minko\type\loader\SceneLoader.as:213]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at SetIntervalTimer/onTimer()
    at flash.utils::Timer/_timerDispatch()
    at flash.utils::Timer/tick()

Thanks

drawCall is null

Another thing seems to be wrong with the function "meshGeometryChangedHandler" in class RenderingController. The object drawCall is always null and throws an null exception in every example with geometry's.

TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht mรถglich.
at aerys.minko.scene.controller.scene::RenderingController/meshGeometryChangedHandler()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at aerys.minko.type::Signal/execute()
at aerys.minko.scene.node::Mesh/geometryChangedHandler()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at aerys.minko.type::Signal/execute()
at aerys.minko.render.geometry::Geometry/setVertexStream()
at aerys.minko.render.geometry::Geometry/pushVertexStreamInList()
at aerys.minko.render.geometry::Geometry/computeNormals()
at aerys.minko.render::DrawCall/updateGeometry()
at aerys.minko.render::DrawCall/configure()
at aerys.minko.scene.controller.scene::RenderingController/createDrawCalls()
at aerys.minko.scene.controller.scene::RenderingController/addMesh()
at aerys.minko.scene.controller.scene::RenderingController/descendantAddedHandler()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at aerys.minko.type::Signal/execute()
at aerys.minko.scene.node::AbstractSceneNode/set parent()
at aerys.minko.scene.node::Group/addChildAt()
at aerys.minko.scene.node::Group/addChild()
at aerys.minko.example.core.teapots::TeapotsExample/addTeapot()
at aerys.minko.example.core.teapots::TeapotsExample/enterFrameHandler()

Regards

Duplicate light files in dev branch

I know this is the dev branch so I understand sometimes things won't be working, but anyway...

at this moment both minko and minko-lighting have scene/node/light and controllers/light packages. The ones in minko won't compile and need to be removed so the compiler picks the files in minko-lighting and works properly

QuadGeometry light issue

No matter what lightDirection the scene has, the QuadGeometry is just white.

Here the light direction is so set, that the QuadGeometry must be black but it's
just white.

scene.properties.setProperties({
lightEnabled : true,
lightDiffuseColor : 0xffffff,
lightDiffuse : 0.8,
lightAmbientColor : 0xffffff,
lightAmbient : 0.2,
lightDirection : new Vector4(0, 10, 0)
});

var mesh: Mesh = new Mesh(geometry, new BasicMaterial(
{
lightEnabled : true,
diffuseColor : 0xffffffff
}
));

// Rotates forward along the x axis
mesh.transform.appendRotation(
Math.PI / 2, Vector4.X_AXIS);

Regards.

Memory Leak when attempting disposal of Minko instances

There appears to be a memory leak when attempting to completely remove a Minko instance from the application.

The attached code should illustrate the problem. Press SPACE to create a Minko setup and spawn 1000 boxes. Hit space again to call dispose() and remove all references to the Minko viewport, scene, meshes and camera. System.gc() will be called after 1 second to force a clean up.

Using a DEBUG build:
Demo begins: ~7.2mb (nothing displayed)
After creating the Minko instance and rendering to the viewport: ~38mb
After disposal and GC: ~18.5mb

In theory, if everything is being cleaned up and completely removed, the memory usage should return to around about the 7-8mb mark, although I would most likely expect it to be a little higher simply due to Flash Player internals. ~18mb seems is excessive, and indicates to me that there is most likely a leak somewhere within the framework.

Also note that remove the scene.removeAllChildren() line is commented out, after disposal and GC, the application remains at ~37mb.

With more detailed monitoring, I can see that all the box, viewport, scene and camera references are cleaned up and garbage collected, as expected, so something else within the framework is holding onto memory.

package
{
    import aerys.minko.render.geometry.primitive.CubeGeometry;
    import aerys.minko.render.material.basic.BasicMaterial;
    import aerys.minko.render.material.Material;
    import aerys.minko.render.Viewport;
    import aerys.minko.scene.node.camera.Camera;
    import aerys.minko.scene.node.Mesh;
    import aerys.minko.scene.node.Scene;
    import aerys.monitor.Monitor;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.system.System;
    import flash.ui.Keyboard;
    import flash.utils.setTimeout;

    public class Main extends Sprite 
    {
        private var scene:Scene;
        private var camera:Camera;
        private var viewport:Viewport;
        private var boxes:Array;

        public function Main():void 
        {
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease);
            stage.addChild(Monitor.monitor);
        }

        private function init():void
        {
            viewport = new Viewport();
            addChild(viewport);

            camera = new Camera();
            camera.transform.translationZ = -10;

            scene = new Scene();
            scene.addChild(camera);

            boxes = [];
            for (var i:int = 0; i < 1000; ++i)
            {
                var mtl:Material = new BasicMaterial({ diffuseColor: 0xCC0000FF } );
                var box:Mesh = new Mesh(CubeGeometry.cubeGeometry, mtl);
                scene.addChild(box);
            }

            stage.addEventListener(Event.ENTER_FRAME, update);
        }

        private function dispose():void
        {
            stage.removeEventListener(Event.ENTER_FRAME, update);
            stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyRelease);

            scene.removeAllChildren();
            scene = null;

            viewport.parent.removeChild(viewport);
            viewport.dispose();
            viewport = null;

            boxes = null;

            setTimeout(function():void
            {
                System.gc();
            }, 1000);
        }

        private function update(e:Event):void
        {
            scene.render(viewport);
        }

        private function onKeyRelease(e:KeyboardEvent):void
        {
            if (e.keyCode == Keyboard.SPACE)
            {
                if (scene == null)
                    init();
                else
                    dispose();
            }
        }
    }
}

Bug at DrawCall.unsetBindings if _bindingsConsumer==null

_bindingsConsumer may be null if toggle Shader.settings.enabled
Example:

package {
    import aerys.minko.render.Effect;
    import aerys.minko.render.geometry.primitive.CubeGeometry;
    import aerys.minko.render.material.Material;
    import aerys.minko.scene.node.Mesh;

    public class Main extends MinkoExampleApplication {

        override protected function initializeScene() : void {
            super.initializeScene();

            createObjects();
        }

        private function createObjects():void {
            var shader:TestShader = new TestShader();
            var m:Mesh = new Mesh(CubeGeometry.cubeGeometry, new Material(new Effect(shader)));
            scene.addChild(m);
            m.properties.setProperty('testcolor', 0x0000FF);
        }

    }
}
import aerys.minko.render.geometry.stream.format.VertexComponent;
import aerys.minko.render.shader.SFloat;
import aerys.minko.render.shader.Shader;
import aerys.minko.render.shader.ShaderSettings;

class TestShader extends Shader {

    override protected function getVertexPosition(): SFloat {
        return localToScreen( getVertexAttribute(VertexComponent.XYZ) );
    }

    override protected function getPixelColor(): SFloat {
        return float4(meshBindings.getParameter('testcolor', 3), 1);
    }

    override protected function initializeSettings(settings:ShaderSettings):void {
        super.initializeSettings(settings);

        settings.enabled = meshBindings.getProperty('testcolor', 0) != 0;
    }

}

result:
Error: This consumer does not exist.
at aerys.minko.type.binding::DataBindings/removeConsumer()[\aerys\minko\type\binding\DataBindings.as:290]
at aerys.minko.render::DrawCall/unsetBindings()[\aerys\minko\render\DrawCall.as:175]
at aerys.minko.scene.controller.scene::RenderingController/unbindShaderInstance()[\aerys\minko\scene\controller\scene\RenderingController.as:850]
at aerys.minko.scene.controller.scene::RenderingController/applyPassInstancesBindingChanges()[\aerys\minko\scene\controller\scene\RenderingController.as:760]
at aerys.minko.scene.controller.scene::RenderingController/applyBindingChanges()[\aerys\minko\scene\controller\scene\RenderingController.as:670]
at aerys.minko.scene.controller.scene::RenderingController/render()[\aerys\minko\scene\controller\scene\RenderingController.as:229]
at aerys.minko.scene.node::Scene/render()[\aerys\minko\scene\node\Scene.as:179]

2.0b Unnecessary shader instances

If getConstant() method is used in Shader.initializeSettings(), multiple shader instances can be created with identical programs. Here is some code to prove my words:

package test 
{
    import aerys.minko.Minko;
    import aerys.minko.render.effect.Effect;
    import aerys.minko.scene.node.mesh.geometry.Geometry;
    import aerys.minko.scene.node.mesh.Mesh;
    import aerys.minko.scene.node.Scene;
    import aerys.minko.type.log.DebugLevel;
    import aerys.minko.type.stream.format.VertexComponent;
    import aerys.minko.type.stream.format.VertexFormat;
    import aerys.minko.type.stream.IndexStream;
    import aerys.minko.type.stream.IVertexStream;
    import aerys.minko.type.stream.StreamUsage;
    import aerys.minko.type.stream.VertexStream;
    import flash.display.Sprite;

    public class TestShaderInstancing extends Sprite
    {
        public function TestShaderInstancing() 
        {
            Minko.debugLevel |= DebugLevel.SHADER_AGAL;

            var scene: Scene = new Scene();
            scene.addChild(createMesh(false));
            scene.addChild(createMesh(true));
        }

        private function createMesh(value:Boolean): Mesh 
        {
            return new Mesh(
                new Geometry(
                    new <IVertexStream>[
                        new VertexStream(
                            StreamUsage.STATIC,
                            new VertexFormat(VertexComponent.XY),
                            new <Number>[-1, -1, -1, 1, 1, 1, 1, -1]
                        )
                    ],
                    new IndexStream(
                        StreamUsage.STATIC,
                        new <uint>[0, 1, 2, 0, 2, 3]
                    )
                ),
                { testConst : value },
                new Effect(new SimpleShader())
            );
        }
    }
}

import aerys.minko.render.shader.SFloat;
import aerys.minko.render.shader.Shader;
import aerys.minko.render.shader.ShaderSettings;

internal class SimpleShader extends Shader 
{
    override protected function getVertexPosition(): SFloat 
    {
        return float4(vertexXY.xy, 1, 1);
    }

    override protected function getPixelColor(): SFloat 
    {
        return rgba(0x0000ffff);
    }

    override protected function initializeSettings(settings:ShaderSettings): void 
    {
        meshBindings.getConstant("testConst", false);
    }
}

With the following output:

---------------- vertex shader ----------------
mov vt0.zw, vc0.xxxy
mov vt0.xy, va0.xyyy
mov op.xyzw, vt0.xyzw

--------------- fragment shader ---------------
mov oc.xyzw, fc0.xyzw

---------------- vertex shader ----------------
mov vt0.zw, vc0.xxxy
mov vt0.xy, va0.xyyy
mov op.xyzw, vt0.xyzw

--------------- fragment shader ---------------
mov oc.xyzw, fc0.xyzw

As you can see, generated programs are exactly the same. This behaviour can be fixed by blocking shader signature updates (which fork new instances) during initializeSettings method. I can create a patch if you agree

Error at DataProvider.removeProperty

at branch:dev 23f8a88

RangeError: Error #1125: The index -1 is out of range 8.
at aerys.minko.type.binding::DataBindings/removeBinding():139
at Function/http://adobe.com/AS3/2006/builtin::apply()
at aerys.minko.type::Signal/execute():109
at aerys.minko.type.binding::DataProvider/removeProperty():196

I call Mesh properties.removeProperty("diffuseMap")

DataProvider.removeProperty
    delete _descriptor[name];
    delete _nameToProperty[name];
    ...
    _propertyRemoved.execute(this, name);
DataBindings.removeBinding
    var bindingName     : String    = provider.dataDescriptor[propertyName];

bindingName==null because propertyName already been removed at provider

argument count mismatch for DataBindings.propertyChangedHandler() (dev)

latest version branch dev ff12aaa does not work.
Error #1063: Argument count mismatch on aerys.minko.type.binding::DataBindings/propertyChangedHandler(). Expected 4, got 2.
at Function/http://adobe.com/AS3/2006/builtin::apply()
at aerys.minko.type::Signal/execute()[aerys\minko\type\Signal.as:121]
at aerys.minko.scene.data::CameraDataProvider/set fieldOfView()[aerys\minko\scene\data\CameraDataProvider.as:63]
at aerys.minko.scene.node.camera::Camera/set fieldOfView()[aerys\minko\scene\node\camera\Camera.as:30]

bug at visible when FrustumCulling.DISABLED

package {
    import aerys.minko.render.geometry.primitive.CubeGeometry;
    import aerys.minko.scene.node.Mesh;
    import aerys.minko.type.enum.FrustumCulling;
    import flash.events.TimerEvent;
    import flash.utils.Timer;

    public class Main extends MinkoExampleApplication {

        override protected function initializeScene() : void {
            super.initializeScene();

            this.cube = new Mesh(CubeGeometry.cubeGeometry);
            this.cube.frustumCulling = FrustumCulling.DISABLED;
            scene.addChild(this.cube);

            this.timer = new Timer(1000);
            this.timer.addEventListener(TimerEvent.TIMER, onTimer);
            this.timer.start();
        }

        private function onTimer(e:TimerEvent):void {
            this.cube.visible = !this.cube.visible;
            trace(this.cube.visible);
        }

        private var cube:Mesh;
        private var timer:Timer;
    }
}

Cube disappears and don't become visible again.

reset camera WorldToLocalTransform after add new object to scene

branch:dev ed6f953

    public class Main extends MinkoExampleApplication {

        override protected function initializeScene() : void {
            super.initializeScene();

            this.timer = new Timer(1000);
            this.timer.addEventListener(TimerEvent.TIMER, timerEvent);
            this.timer.start();
        }

        private function timerEvent(e:TimerEvent):void {
            // 1. test camera WorldToLocalTransform
            var m1:Matrix4x4 = camera.getWorldToLocalTransform();
            trace('m1', m1.toString());

            // 2. add new object
            scene.addChild(new Mesh(CubeGeometry.cubeGeometry));

            // 3. test camera WorldToLocalTransform
            var m2:Matrix4x4 = camera.getWorldToLocalTransform();
            trace('m2', m2.toString());
        }

        private var timer:Timer;
    }

Output:
m1 [Matrix4x4 (1,-3.7493993930529855e-33,-6.123234262925839e-17,0,0,1,-6.123234262925839e-17,0,6.123234262925839e-17,6.123234262925839e-17,1,0,1.3234889800848443e-23,1.3234889800848443e-23,5,1]
m2 [Matrix4x4 (1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]

2.0b AbstractController "ticked" signal

_ticked private variable and get ticked() method are never used. Documentation states about "tick()" method which does not exist. Is it some kind of deprecated feature?

the bug of roationY

[code lang='as3']package
{
import aerys.minko.example.core.cubes.NormalsShader;
import aerys.minko.render.effect.Effect;
import aerys.minko.render.Viewport;
import aerys.minko.scene.controller.camera.ArcBallController;
import aerys.minko.scene.node.Camera;
import aerys.minko.scene.node.ISceneNode;
import aerys.minko.scene.node.mesh.geometry.Geometry;
import aerys.minko.scene.node.mesh.geometry.primitive.CubeGeometry;
import aerys.minko.scene.node.mesh.Mesh;
import aerys.minko.scene.node.Scene;
import aerys.minko.type.math.Vector4;
import flash.display.Sprite;
import flash.events.Event;

public class HelloWorldMinko extends Sprite 
{
    private var view:Viewport;
    private var scene:Scene;
    private var cubes:Array = [];
    public function HelloWorldMinko():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        view = new Viewport(0, 400, 400);
        addChild(view);


        scene = new Scene;

        addEventListener(Event.ENTER_FRAME, enterFrame);

        var cam:Camera = new Camera;
        var _cameraController:ArcBallController = new ArcBallController();
        _cameraController.bindDefaultControls(stage);
        _cameraController.minDistance = 1;
        _cameraController.yaw = Math.PI * -.5;
        _cameraController.pitch = Math.PI / 2;
        _cameraController.distance = 5;
        cam.addController(_cameraController);
        scene.addChild(cam);

        var EFFECT      : Effect    = new Effect(new NormalsShader());

        var c:int = 50;
        while(c-->0){
        var cube:Mesh = new Mesh(CubeGeometry.cubeGeometry,null,EFFECT);
        scene.addChild(cube);
        cubes.push(cube);
        cube.transform
            .lock()
            .appendUniformScale(0.03).appendScale(10,10,10).appendTranslation(
                -1 + Math.random() * 2,
                -1 + Math.random() * 2,
                -1 + Math.random() * 2
            )
        .unlock(); }

        addChild(new Stats);
    }

    private function enterFrame(e:Event):void 
    {
        for each(var cube:Mesh in cubes){
            cube.transform.rotationY+=.01;
        }
        scene.render(view);
    }

}

}[/code]

the rotationY no effect

2.0b In Mesh.copyFrom() properties are cloned twice

Not a bug, just a minor issue:

        protected function copyFrom(source              : Mesh,
                                    withBindings        : Boolean,
                                    cloneControllers    : Boolean) : void
        {
            var numControllers : uint = source.numControllers;

            name = source.name;
            _geometry = source._geometry;
            properties = source._properties.clone();

            var numProviders : uint = source._bindings.numProviders;

            bindings.removeAllProviders();
            for (var providerIndex : uint = 0; providerIndex < numProviders; ++providerIndex)
            {
                var provider : IDataProvider = source._bindings.getProviderAt(providerIndex);

                if (provider != source.transformData && provider != source.properties)
                    bindings.addProvider(provider);
            }

            _properties = source.properties.clone();
            bindings.addProvider(_properties);

            copyControllersFrom(source, this, cloneControllers);
            transform.copyFrom(source.transform);

            effect = source._effect;

            source.cloned.execute(this, source);
        }

As you can see, properties are cloned twice:

            ...
            properties = source._properties.clone();
            ...
            _properties = source.properties.clone();
            ...

Stack Overflow occurs when setting a normal map on a mesh

Here is the code that I use to apply to normal map. This is using the dev branch

var mat:PhongMaterial       = new PhongMaterial(m_scene);
mat.specularMultiplier = 1;
mat.shininessMultiplier = 0.1;
mat.castShadows = true;
mat.diffuseColor = color;
mat.normalMappingType = NormalMappingType.NORMAL;
mat.normalMap = TextureLoader.loadBytes(Utils.getBytes("assets/normals/wood-normal2.jpg"));

And I get this error 9 out of 10 times during the exit frame update. Interestingly enough, it doesn't happen 1 in 10 times.

Error: Error #1023: Stack overflow occurred.
    at Vector$object/http://adobe.com/AS3/2006/builtin::indexOf()
    at aerys.minko.render.geometry.stream.format::VertexFormat/hasComponent()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/stream/format/VertexFormat.as:123]
    at aerys.minko.render::DrawCall/updateGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:223]
    at aerys.minko.render::DrawCall/setGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:240]
    at aerys.minko.scene.controller.scene::RenderingController/meshGeometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/controller/scene/RenderingController.as:707]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.scene.node::Mesh/geometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/node/Mesh.as:276]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.render.geometry::Geometry/vertexStreamChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:942]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.render.geometry.stream::VertexStream/unlock()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/stream/VertexStream.as:321]
    at aerys.minko.render.geometry::Geometry/fillNormalsData()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:617]
    at aerys.minko.render.geometry::Geometry/computeTangentSpace()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:465]
    at aerys.minko.render::DrawCall/updateGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:225]
    at aerys.minko.render::DrawCall/setGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:240]
    at aerys.minko.scene.controller.scene::RenderingController/meshGeometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/controller/scene/RenderingController.as:707]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.scene.node::Mesh/geometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/node/Mesh.as:276]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.render.geometry::Geometry/vertexStreamChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:942]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.render.geometry.stream::VertexStream/unlock()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/stream/VertexStream.as:321]
    at aerys.minko.render.geometry::Geometry/fillNormalsData()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:617]
    at aerys.minko.render.geometry::Geometry/computeTangentSpace()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:465]
    at aerys.minko.render::DrawCall/updateGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:225]
    at aerys.minko.render::DrawCall/setGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:240]
    at aerys.minko.scene.controller.scene::RenderingController/meshGeometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/controller/scene/RenderingController.as:707]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.scene.node::Mesh/geometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/node/Mesh.as:276]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.render.geometry::Geometry/vertexStreamChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:942]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.render.geometry.stream::VertexStream/unlock()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/stream/VertexStream.as:321]
    at aerys.minko.render.geometry::Geometry/fillNormalsData()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:617]
    at aerys.minko.render.geometry::Geometry/computeTangentSpace()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:465]
    at aerys.minko.render::DrawCall/updateGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:225]
    at aerys.minko.render::DrawCall/setGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:240]
    at aerys.minko.scene.controller.scene::RenderingController/meshGeometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/controller/scene/RenderingController.as:707]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.scene.node::Mesh/geometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/node/Mesh.as:276]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.render.geometry::Geometry/vertexStreamChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:942]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.render.geometry.stream::VertexStream/unlock()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/stream/VertexStream.as:321]
    at aerys.minko.render.geometry::Geometry/fillNormalsData()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:617]
    at aerys.minko.render.geometry::Geometry/computeTangentSpace()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/geometry/Geometry.as:465]
    at aerys.minko.render::DrawCall/updateGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:225]
    at aerys.minko.render::DrawCall/setGeometry()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/render/DrawCall.as:240]
    at aerys.minko.scene.controller.scene::RenderingController/meshGeometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/controller/scene/RenderingController.as:707]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at aerys.minko.type::Signal/execute()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/type/Signal.as:75]
    at aerys.minko.scene.node::Mesh/geometryChangedHandler()[/Users/jonathan/workspaces/flash/minko/src/aerys/minko/scene/node/Mesh.as:276]

Random flicker with sorted draw calls

Hi,

when you have sorted draw calls due to alpha blending and some calls happen to have the same depth ( lots of triangles in tight space, I guess ) the sorting method in RenderController.render generates random order for the calls woth equal depth, and the result is flickering.

I was able to quick-fix the issue going to line 250:

var callso : Array = _passInstanceToDrawCalls[pass];
var calls : Array = []
for(var f:int=0;f<callso.length;f++) calls[f] = callso[f]

creating a copy of the array to sort it instead of resort the original array everytime, and then changing

Sort.flashSort(sortValues, calls, numCalls);

with

calls.sortOn("depth",Array.NUMERIC|Array.DESCENDING)

I don't know if this last step is necessary, probably not, probably only working woth a copy of the array was enough. Anyway this is very dirty, I suppose the ideal situation is a sorting alogythm that always generates the same order for calls that have the same depth, instead of shifting them around

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.