template< >
void SurfaceDid<16>::Fill ( U32 col )
{
U16 c = (U16)col;
U8
*line=PixelPtr( 0, 0 ),
*pixel=line;
for ( S16 y = 0; y < 320; y++, line+=640, pixel=line )
for ( S16 x =0; x < 320; x++, pixel+=2 )
*(U16*)pixel=c;
}
Pavel wrote:
> Hi.
>
> Using CW 9.3
> Linker : Palm OS 68k
>
> Trying to do some drawing without PalmOS API.
>
> template< U8 bpp >
> void SurfaceDid<bpp>::Fill ( COLOR col )
> {
> PixelType c = (PixelType)col;
> U8 *l=PixelPtr( 0, 0 ), *p=l;
> for ( S16 y = 0; y < Height(); y++,NextY( l ), p=l ) // Height,NextY
inlined
> for ( S16 x =0; x < Width(); x++,NextX( p ) ) // Width,NextX
inlined
> SetBitmapPixel( p, x, c ); // inlined
> }
>
> On device Tungsten|T PalmOS 5.0 performace is not acceptable : moving this
> code to ArmLet will slove the problem ?
> What will be ratio between this code and analogous realized with PalmOS
API
> on earlyer devices ?
First of all, using comma-expressions in your for-loop incrementor is a bad
idea. Optimizers do some tricky stuff with loops, and doing anything weird
may cause it to fall back to safe (but slow) methods.
Second of all, you haven't shown the implementations of NextX, NextY, or
SetBitmapPixel, and you don't seem to use bpp anywhere. This makes it very
hard to figure out where your performance problem is, since it's not even
apparent what many of your variables are; for instance, what is p? Is bpp
in units of bits or bytes, and where is it even used? Is SetBitmapPixel an
assignment, or does it involve reading and bit manipulations? And for that
matter, what about Width() and Height()? Those should be evaluated once,
not every iteration. You're asking the compiler to do too much to those
little loops - it can't catch everything.
--
For information on using the Palm Developer Forums, or to unsubscribe,
please see http://www.palmos.com/dev/support/forums/
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/support/forums/