gnash-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gnash-dev] [PATCH 2/2] Work around rendering problem in GemCraft Ch


From: Sandro Santilli
Subject: Re: [Gnash-dev] [PATCH 2/2] Work around rendering problem in GemCraft Chapter One
Date: Fri, 25 Jan 2013 16:52:16 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

Jürgen, thank you for your contribution. Any chance you could expose
the problem in an automated testcase within the existing testsuite ?
Chances are you can produce a fully self-contained testcase (pure SWF
printing PASSED/FAILED, like those under actionscript.all).

--strk;

On Wed, Jan 16, 2013 at 10:37:24PM +0100, Jürgen Rühle wrote:
> Currently the tower defense game GemCraft Chapter One from
> gameinabottle.com/games/gemcraft1.swf doesn't draw the play map correctly,
> making the game unplayable.
> 
> It turns out that the problem is clipping: the clipping check thinks that the
> MovieClip is completely outside the update area and therefore isn't drawn at
> all. This happens because the clipping check uses the MovieClip's world
> Matrix that is potentially (and in this case actually) different from the
> transform used while drawing the MovieClip into the bitmap.
> 
> This patch works around the problem by temporarily resetting the MovieClip's
> Matrix during the draw operation.
> 
> This fixes the problem in GemCraft Chapter One and actually makes the game
> playable (though some minor problems remain).
> 
> A real fix should probably review the usage of a different transformation
> for the clipping check compared to the actual drawing operation.
> ---
>  libcore/asobj/flash/display/BitmapData_as.cpp |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/libcore/asobj/flash/display/BitmapData_as.cpp 
> b/libcore/asobj/flash/display/BitmapData_as.cpp
> index 4d36794..a9cfb4f 100644
> --- a/libcore/asobj/flash/display/BitmapData_as.cpp
> +++ b/libcore/asobj/flash/display/BitmapData_as.cpp
> @@ -1107,7 +1107,11 @@ bitmapdata_draw(const fn_call& fn)
>      fillRect(*ptr, t.matrix.tx() / 20, t.matrix.ty() / 20, (int) 
> (t.matrix.get_x_scale() * 25), (int) (t.matrix.get_y_scale() * 25), 
> 0x80000000 | (color << 19) | (color << 12) | (color << 3));
>  #endif
>  
> +    SWFMatrix oldM = mc->transform().matrix;
> +    mc->setMatrix(t.matrix, true);
>      ptr->draw(*mc, t);
> +    mc->setMatrix(oldM, true);
> +
>      return as_value();
>  }
>  
> -- 
> 1.7.4.1
> 
> 
> _______________________________________________
> Gnash-dev mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/gnash-dev

-- 

 http://www.cartodb.com - Map, analyze and build applications with your data

                                       ~~ http://strk.keybit.net 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]