home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 18
/
aminetcdnumber181997.iso
/
Aminet
/
dev
/
e
/
dbuffer.lha
/
doublebuffer.e
next >
Wrap
Text File
|
1997-01-22
|
2KB
|
65 lines
/*my attempt at double buffering made easy*/
OPT MODULE
OPT EXPORT
MODULE 'intuition/screens', -> Screen data structures
'graphics/rastport', -> RastPort and other structures
'graphics/view', -> ViewPort and other structures
'graphics/gfx' -> BitMap and other structures
OBJECT dscreen
screen:PTR TO screen
bm1:PTR TO bitmap
bm2:PTR TO bitmap
ENDOBJECT
PROC opendscreen(ns:PTR TO ns)
DEF p:PTR TO dscreen
DEF plane_num, planes:PTR TO LONG
p:=New(SIZEOF dscreen)
p.bm1:=New(SIZEOF bitmap)
p.bm2:=New(SIZEOF bitmap)
InitBitMap(p.bm1,ns.depth,ns.width,ns.height)
InitBitMap(p.bm2,ns.depth,ns.width,ns.height)
planes:=p.bm1.planes
FOR plane_num:=0 TO ns.depth-1
planes[plane_num]:=AllocRaster(ns.width, ns.height)
BltClear(planes[plane_num], (ns.width/8)*ns.height, 1)
ENDFOR
planes:=p.bm2.planes
FOR plane_num:=0 TO ns.depth-1
planes[plane_num]:=AllocRaster(ns.width, ns.height)
BltClear(planes[plane_num], (ns.width/8)*ns.height, 1)
ENDFOR
ns.custombitmap:=p.bm1
ns.type:=ns.type OR $155
p.screen:=OpenScreen(ns)
p.screen.rastport.flags:=p.screen.rastport.flags OR RPF_DBUFFER
SetStdRast(p.screen.rastport)
dswitch(p)
ENDPROC p
PROC dswitch(p:PTR TO dscreen)
DEF t
t:=p.bm1
p.bm1:=p.bm2
p.bm2:=t
MakeScreen(p.screen)
RethinkDisplay()
p.screen.rastport.bitmap:=p.bm1
p.screen.viewport.rasinfo.bitmap:=p.bm1
ENDPROC
PROC closedscreen(p:PTR TO dscreen)
DEF plane_num, planes:PTR TO LONG
CloseScreen(p.screen)
planes:=p.bm1.planes
FOR plane_num:=0 TO p.bm1.depth-1
IF planes[plane_num] THEN FreeRaster(planes[plane_num], p.screen.width, p.screen.height)
ENDFOR
planes:=p.bm2.planes
FOR plane_num:=0 TO p.bm2.depth-1
IF planes[plane_num] THEN FreeRaster(planes[plane_num], p.screen.width, p.screen.height)
ENDFOR
stdrast:=NIL
ENDPROC