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