In our previous episode, James Richters said:
> >putimage can be accelerated, although it would still have to do a memory 
> >copy.
> 
> Like this?
> https://github.com/Zaaphod/ptcpas/compare/Zaaphod_Custom?expand=1#diff-fb31461e009ff29fda5c35c5115978b4
> 
> This is amazingly faster.   I ran a test of just ptcgraph.putimage() in a
> loop, putting the same image over and over 1000 times and timing it.  The
> original ptcgraph.putimage() took 18.017 seconds.  After I applied this,
> the same loop took 1.056 seconds.  Quite an improvement!  It's still
> nowhere near as fast as just drawing stuff with ptcgraph directly, but for
> doing a memory copy of the entire screen, it's very fast

Try rearranging that like this:


var pdest,psrc: pword;
     

for j:=Y to Y1 do
   Begin
     inc(k,deltaX);
     pdest:=@pixels[X+j*PTCWidth];
     psrc:=@pt(bitmap)[k];
     case BitBlt of
           XORPut:       for i:=0 to X1-X do
                           begin
                             pdest^:=pdest^ xor psrc^;
                             inc(pdest); inc(psrc);
                           end;
              // etc other cases similarly
            end;
     inc(k,x1-x+1); // we must make up for as many K updates as the for loop.
     inc(k,deltaX1);
    end;

Note that all array calculation and the case is removed from the inner most
loop, at the expense of duplicating the for loop. The index is not used in
the for loop and made 0 based to allow the tighest FOR loop code generation.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to