• Welcome to Dark Bit Factory & Gravity.
 

What is the fastest way of copying one array to another?

Started by Shockwave, August 24, 2006

Previous topic - Next topic

0 Members and 0 Guests are viewing this topic.

Shockwave

Here's what I want to do.
I want to work in 800 X 600 resolution, usually I'll just use the erase command to clear my screen array which seems to be pretty quick, however I am thinking that it would be nice to have a template 800 * 600 array and when I clear the screen array, I clear it out with the contents of the template array.

This would mean that I could for instance draw the logo on the template array and as long as the procedure to copy the array over was fast enough I could also calculate a nice background to go behind it all.

So basically it's copying the contents of one 800 * 600 Uinteger array into another uinteger array of identical proportions.

The easy way of doing it is a simple loop but this steals fps.
I've looked at Clear, for example;

declare sub CLEAR(byref dst as any, byval value as integer = 0, byval bytes as integer)

CLEAR BYREF Array(1), 0, LEN(Array(1)) * UBOUND(Array)

But that isn't really what I am looking for as it fills the array with a solid colour.
Is there something I am missing here?
Could this be done quicker with inline asm?
If so, how would I do it, my PC Asm skills are nil!
Shockwave ^ Codigos
Challenge Trophies Won:

Blitz Amateur

I'm not sure where you'd find it, but if you look through some of the windows headers, you may be able to find the memcpy function. If you can find that, you should be able to do what you're trying to do =)

Jim

Use

memcpy(dst, src, length_in_bytes)

from

crt.bi


#include "crt.bi"

dim array1(10) as integer
dim array2(10) as integer

for x = 0 to 10
array1(x)=x
next

memcpy(@array2(0), @array1(0), 11*sizeof(integer))

for x= 0 to 10
print array2(x)
next
end


Jim
Challenge Trophies Won:

Shockwave

Neat! Thanks Chris, Thanks Jim :) That's just what I needed.
Shockwave ^ Codigos
Challenge Trophies Won:

psygate

maybe, don't know whether its working or not, but just try to

put array2,,array1 :whack:
He who controlles the minds commands the many.
He who commands the many, conqueres the minds.

Shockwave

That ought to work :) Thanks Psygate. Is it any faster?
Shockwave ^ Codigos
Challenge Trophies Won:

relsoft

Quote from: psygate on September 03, 2006
maybe, don't know whether its working or not, but just try to

put array2,,array1 :whack:

Nope, won't work. Put needs 4 bytes of headers per array, and if he's copying a generic array, things could get nasty. Jim's way is far safer and is as fast.
Challenge Trophies Won: