[squeak-dev] The Trunk: Morphic-mt.1955.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Mar 31 07:26:59 UTC 2022


Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1955.mcz

==================== Summary ====================

Name: Morphic-mt.1955
Author: mt
Time: 31 March 2022, 9:26:46.023388 am
UUID: 905714e6-1f97-484f-8891-07064d9af418
Ancestors: Morphic-mt.1954

Make #disableDeferredUpdates an actual pragma-based preference. Users should be able to enable this when a VM's graphics backend is flickering on some platform or when dragging within Morphic is invisible.

Note that primitive 126 never fails (for boolean arguments) at the moment. So we cannot know if the graphics backend does actually support that extra display buffer.

You can observe the effect of this preference by inspecting "Project current world canvas" and on which kind of form it is drawing.

=============== Diff against Morphic-mt.1954 ===============

Item was changed:
+ ----- Method: WorldState class>>disableDeferredUpdates (in category 'preferences') -----
- ----- Method: WorldState class>>disableDeferredUpdates (in category 'accessing') -----
  disableDeferredUpdates
+ 	<preference: 'Disable deferred updates (Morphic only)'
+ 		categoryList: #(Morphic Performance Graphics)
+ 		description: 'When enabled, use an extra image-side buffer for compositing screen contents.
+ 		When deferred updating is used, Morphic performs double-buffered screen updates by telling the VM to de-couple the Display from the hardware display buffer, drawing directly into the Display, and then forcing the changed regions of the Display to be copied to the screen. This saves both time (an extra BitBlt is avoided) and space (an extra display buffer is avoided). However, on platforms on which the Display points directly to the hardware screen buffer, deferred updating can''t be used. In this case, the drawing should be composited into an offscreen FormCanvas and then copied to the hardware display buffer.
+ 		Enable this preference when morphs become invisible while dragging them in the world or when you see ugly flashing while the layers of the drawing are assembled.'
+ 		type: #Boolean>
- 
  	^DisableDeferredUpdates ifNil: [DisableDeferredUpdates := false]
  !

Item was changed:
+ ----- Method: WorldState class>>disableDeferredUpdates: (in category 'preferences') -----
+ disableDeferredUpdates: aBooleanOrNil
+ 	
+ 	DisableDeferredUpdates = aBooleanOrNil ifTrue: [^ self].
+ 	DisableDeferredUpdates := aBooleanOrNil ifNil: [false].
+ 	Project allMorphicProjects do: [:ea | ea world canvas: nil].!
- ----- Method: WorldState class>>disableDeferredUpdates: (in category 'accessing') -----
- disableDeferredUpdates: aBoolean
- 	"If the argument is true, disable deferred screen updating."
- 	"Details: When deferred updating is used, Morphic performs double-buffered screen updates by telling the VM to de-couple the Display from the hardware display buffer, drawing directly into the Display, and then forcing the changed regions of the Display to be copied to the screen. This saves both time (an extra BitBlt is avoided) and space (an extra display buffer is avoided). However, on platforms on which the Display points directly to the hardware screen buffer, deferred updating can't be used (you'd see ugly flashing as the layers of the drawing were assembled). In this case, the drawing is composited into an offscreen FormCanvas  and then copied to the hardware display buffer."
- 
- 	DisableDeferredUpdates := aBoolean.
- 	Project current isMorphic ifTrue: [Project currentWorld canvas: nil].!



More information about the Squeak-dev mailing list