aerys / minko-collada

Collada file format extension for Minko
http://minko.io
MIT License
14 stars 7 forks source link

Async parser refactor? #16

Open makc opened 11 years ago

makc commented 11 years ago

Some time ago I did this hack for alternativa but, looking at your source, I can't see how to repeat it here. Their parser was not really built for delayed processing, but they had one property that made it possible: they sorted collada into intermediate nodes tree with relevant portions of xml, and only after that traversed it to actually parse the data. Here, you have code like:

public static function fillStoreFromXML(...) {
    ...
    var xmlGeometries : XMLList = ...
    // this must not be in the same method: 
    for each (var xmlGeometry : XML in xmlGeometries) {
        var geometry : Geometry = Geometry.createFromXML(xmlGeometry, document);
        ...

all over, so there is simply no opportunity to interrupt the process anywhere.

JMLX42 commented 11 years ago

Hello,

MK files encoding/decoding is implemented in such a way using a tasks queuing library we wrote. So we could easily re use this library for Collada files.

But it would require to add a dependency to this library and people should use MK for obvious reasons anyway.

Yet Minko Studio has a progress bar to show external assets loading progress. It would be interesting to be able to show the parsing progress too since it can take a few seconds for big files...

I've logged this internally as the feature #1158. I'll keep you posted.

Why do you need this ?

Regards, On Jan 16, 2013 4:35 AM, "makc" notifications@github.com wrote:

Some time ago I did this hackhttps://github.com/AlternativaPlatform/Alternativa3D/commit/4bcd41ce0f0585f7883a4439b5f024d819ee3caffor alternativa but, looking at your source, I can't see how to repeat it here. Their parser was not really built for delayed processing, but they had one property that made it possible: they sorted collada into intermediate nodes tree with relevant portions of xml, and only after that traversed it to actually parse the data. Here, you have code likehttps://github.com/aerys/minko-collada/blob/master/src/aerys/minko/type/parser/collada/resource/Geometry.as#L58 :

public static function fillStoreFromXML(...) { ... var xmlGeometries : XMLList = ... // this must not be in the same method: for each (var xmlGeometry : XML in xmlGeometries) { var geometry : Geometry = Geometry.createFromXML(xmlGeometry, document); ...

all over, so there is simply no opportunity to interrupt the process anywhere.

— Reply to this email directly or view it on GitHubhttps://github.com/aerys/minko-collada/issues/16.

makc commented 11 years ago

Well, the client handed me multimegabyte dae with heavy skin and tons of animations. Synchronous parser took many seconds to swallow it, so I hacked it to unfreeze the timeline. In the end they used unity, so it does not matter now, but I think since Tim Knip introduced the idea of using dae in papervision (remember when they said custom binary format is the last thing people need) many people still work that way.

JMLX42 commented 11 years ago
but I think since Tim Knip introduced the idea of using dae in papervision (remember when they said custom binary format is the last thing people need) many people still work that way

If that custom format is easily targetable using a publishing tool and if it brings exclusive features such as 3D compression, 3D streaming, faster loading times, ATF textures, support for multiple programming languages and even more, I think the situation is quite different :)