2007-09-30

Speedy Screen Dragging

Stripped out the old screen dragging code (that used the new drawing functions), and replaced it with a much more complicated system involving the clipping system’s rectangle calculations and the DMA hardware. Screen dragging now runs at full speed, without flicker. Are there any problems that can’t be solved by throwing DMA_Copy() at it?

Actually, there is one. Having had such a success with screen dragging, I thought about using the DMA hardware to do solid window moving. The problem is, though, that horizontal movement will screw it all up. Screen dragging works because we’re always copying entire rows of pixels up or down. With window dragging, we could move left or right. If we tried to move a window right two pixels (for example), the first two pixels would be copied over the next two pixels, so we’d end up with the first two pixels repeated along the width of the window.

Rats.

Anyway, here’s a new demo:

Woopsi Demo V0.21

Forgot to mention in my last post that screens can now have backgrounds attached to them, via the use of the SuperBitmap class. Same goes for windows, too.

Comments

amigappc on 2007-10-01 at 14:45 said:

This is fantastic, I’ve been trying the demo and I’m impressed.

I always wanted to have an amiga emulator or a version of aros for the ds but this is the closest thing to have amiga in the nintendo ds.

It would be great if other homebrew used woopsy.

Simone on 2007-10-02 at 20:07 said:

I’m using cyclods with the latest firmware (just downlaoaded) and i’ve experienced a problem with Woopsi V 0.21 . When i tried to acces the game folder, the program fails and it seems that nothing is on the cyclods, i tought that could be the new firmware, but first i tried to delete woopsi and it worked. hope that could help u with ur work!! GO ON YOU ROCK!

ant on 2007-10-02 at 22:32 said:

That’s interesting. Woopsi doesn’t do anything out of the ordinary with its file name. I’ll try updating my Cyclo and see what happens.

Jeff on 2007-10-03 at 08:20 said:

The secret to the zippiest blitting is to optimize the special cases. You should be fine to use DMA_Copy() provided that there is a delta-Y involved. Only fall back on doing it the hard way if the movement is completely horizontal.