ftp.nice.ch/pub/next/developer/resources/libraries/gamekit_proj.NI.sa.tar.gz#/gamekit_proj/Headers/gamekit/DirtPile.h

This is DirtPile.h in view mode; [Download] [Up]

// This object tracks the dirty rectangle of the frame buffer.
// If two rects overlap, they are coalesced.  If they don't
// overlap, they are kept separate.  This way, when a redraw
// is done, we have two flushes that are small rather than one
// large flush.  (The large flush would draw *lots* of unnecessary
// pixels!)

// Many thanks to Sam Streeper for giving me the idea to create this object.
// It is based mostly upon code snippets which he gave me, which were taken
// the game BoinkOut.  Thanks, Sam!

#import <appkit/appkit.h>

#define MAX_RECTS	1024	// should be more than enough, and it's easier than
	// making it dynamic.  (Not that I couldn't.... :-)  )

extern BOOL coalesce(NXRect *p1, NXRect *p2);

@interface DirtPile:Object
{
	int maxRects;		// max number of rects in list
	int numRects;		// number of rects in list
	NXRect rectList[MAX_RECTS];	// list of dirty rects
}

- init;							// initialize the instance
- addRegion:(float)x :(float)y :(float)w :(float)h;	// add a dirty rect
- addRegion:(NXRect *)rect;							// add a dirty rect
- fullRedraw:sender :buffer;	// assumed to be a view
- doRedraw:buffer;	// flush dirty rects from buffer to screen

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.