home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / e / dbuffer.lha / doublebuffer.e next >
Text File  |  1997-01-22  |  2KB  |  65 lines

  1. /*my attempt at double buffering made easy*/
  2. OPT MODULE
  3. OPT EXPORT
  4. MODULE 'intuition/screens',  -> Screen data structures
  5.        'graphics/rastport',  -> RastPort and other structures
  6.        'graphics/view',      -> ViewPort and other structures
  7.        'graphics/gfx'        -> BitMap and other structures
  8.  
  9. OBJECT dscreen
  10.  screen:PTR TO screen
  11.  bm1:PTR TO bitmap
  12.  bm2:PTR TO bitmap
  13. ENDOBJECT
  14.  
  15. PROC opendscreen(ns:PTR TO ns)
  16. DEF p:PTR TO dscreen
  17. DEF plane_num, planes:PTR TO LONG
  18. p:=New(SIZEOF dscreen)
  19. p.bm1:=New(SIZEOF bitmap)
  20. p.bm2:=New(SIZEOF bitmap)
  21. InitBitMap(p.bm1,ns.depth,ns.width,ns.height)
  22. InitBitMap(p.bm2,ns.depth,ns.width,ns.height)
  23.   planes:=p.bm1.planes
  24.   FOR plane_num:=0 TO ns.depth-1
  25.     planes[plane_num]:=AllocRaster(ns.width, ns.height)
  26.     BltClear(planes[plane_num], (ns.width/8)*ns.height, 1)
  27.   ENDFOR
  28.   planes:=p.bm2.planes
  29.   FOR plane_num:=0 TO ns.depth-1
  30.     planes[plane_num]:=AllocRaster(ns.width, ns.height)
  31.     BltClear(planes[plane_num], (ns.width/8)*ns.height, 1)
  32.   ENDFOR
  33. ns.custombitmap:=p.bm1
  34. ns.type:=ns.type OR $155
  35. p.screen:=OpenScreen(ns)
  36. p.screen.rastport.flags:=p.screen.rastport.flags OR RPF_DBUFFER
  37. SetStdRast(p.screen.rastport)
  38. dswitch(p)
  39. ENDPROC p
  40.  
  41. PROC dswitch(p:PTR TO dscreen)
  42. DEF t
  43. t:=p.bm1
  44. p.bm1:=p.bm2
  45. p.bm2:=t
  46. MakeScreen(p.screen)
  47. RethinkDisplay()
  48. p.screen.rastport.bitmap:=p.bm1
  49. p.screen.viewport.rasinfo.bitmap:=p.bm1
  50. ENDPROC
  51.  
  52. PROC closedscreen(p:PTR TO dscreen)
  53. DEF plane_num, planes:PTR TO LONG
  54. CloseScreen(p.screen)
  55.   planes:=p.bm1.planes
  56.   FOR plane_num:=0 TO p.bm1.depth-1
  57.     IF planes[plane_num] THEN FreeRaster(planes[plane_num], p.screen.width, p.screen.height)
  58.   ENDFOR
  59.   planes:=p.bm2.planes
  60.   FOR plane_num:=0 TO p.bm2.depth-1
  61.     IF planes[plane_num] THEN FreeRaster(planes[plane_num], p.screen.width, p.screen.height)
  62.   ENDFOR
  63. stdrast:=NIL
  64. ENDPROC
  65.