Well unfortunately the theory is busted, and having to wait until the first 
render()
before calling update() really messes up my class/object design...

This is what I ended up doing to avoid having to hack the away3d sources;
I extended MovieMaterial and overrode updateMaterial():


        public override function updateMaterial(source:Object3D, 
view:View3D):void
        {
            var origAutoUpdate:Boolean = autoUpdate;
            if (_renderBitmap == null) {
                // Workaround for autoUpdate-false bug + update() before any 
renders
                // See our post at 
http://groups.google.com/group/away3d-dev/browse_thread/thread/7a398d69cb860756
                this.autoUpdate = true;
            }
            super.updateMaterial(source, view);
            this.autoUpdate = origAutoUpdate;
        }

(Unfortunately "rendered" is private, not protected, so I had to check on 
_renderBitmap instead)

On Tue, Feb 02, 2010 at 19:03:57 +0000, Rob Bateman wrote:
> I would try leaving the MovieMaterial with autoUpdate = false - in theory
> this should trigger update() once on view.render() and copy the contents to
> _renderBitmap, then only again if you set autoUpdate to true or call update
> manually. If this doesn't work, try setting autopUpdate to true by default,
> then false after the first view.render(). should do the trick
> 
> Rob
> 
> 
> On Tue, Feb 2, 2010 at 1:50 PM, Post Mesteren <[email protected]> wrote:
> 
> > Hello, I'm having issues with MovieMaterials with autoUpdate = false,
> > especially wrt calling update() on the MovieMaterial instance before
> > being rendered. I.e.,
> >  1. Create a Sprite with some contents
> >  2. Create a new MovieMaterial(contentSprite, {autoUpdate:false,
> > transparent:false})
> >  3. Assign material to some object but don't add the object to the scene
> > yet
> >  4. Call .update() on the moviematerial
> >
> > The material is rendered all black.
> >
> > I think this happens because the "movie" is only ever rendered by update()
> > if the _renderBitmap is non-null, but it's null before any calls to
> > view.render().
> >
> > What do you think about the following patch, which seems to make things
> > work out nicely?
> >
> > Index: src/away3d/materials/MovieMaterial.as
> > ===================================================================
> > --- src/away3d/materials/MovieMaterial.as       (revision 2164)
> > +++ src/away3d/materials/MovieMaterial.as       (working copy)
> > @@ -158,7 +158,7 @@
> >         {
> >                super.updateMaterial(source, view);
> >
> > -               if (autoUpdate)
> > +               if (autoUpdate || !rendered)
> >                 update();
> >
> >             _session = source.session;
> >
> >
> 

Reply via email to