Archives on Januar, 2016

Buffered MorphOS Drawing

Posted by ALB42 on 31. Januar 20162 Comments

I noticed something strange in MorphOS LCL, I made a little Painting program in LCL. When the mouse moves over the image and the window is not active it works as expected (coordinate and pixel color) but when clicked into the Painting area or the window is active it becomes very slow and the mouse pointer stops.
I made some tests and noticed the difference is that the main painting region gets repainted and there it becomes slow, but its not the drawing routine self.
 

MorphOS SimplePaint

MorphOS SimplePaint


 

The drawing works at the moment in this (buffered) way:

  • MUIM_Draw – Event appears
  • MUI_AddClipping – set a Clipping
  • Create a new Buffer RastPort
  • Create a Bitmap (AllocBitmap) for the Buffer Rastport, with width and height of the drawing area, Depth from the MUI rastport (from Renderinfo), BMF_MINPLANES or BMF_CLEAR and the bitmap of the MUI rastports Bitmap as Friend Bitmap
  • ClipBlit of the MUI Rastport to the Buffer Rastport
  • Drawing of the LCL things to the Buffer Rastport
  • ClipBlit of the Buffer Rastport to the MUI RastPort
  • Destroy Buffer Rastport and Bitmap
  • Remove Clipping
  • Leave Draw Event

If I remove the Buffering, so draw directly onto the MUI RastPort it stays fast and the mouse pointer makes no problems. When the program starts this stuttering mouse pointer is maybe related to it also? I noticed also other programs have this stuttering mouse on start (OWB for example). I still have no idea why.

VarArgs Changes

Posted by ALB42 on 24. Januar 2016One Comment

This weekend I did some bigger changes in the AROSUnits for better use of variadic functions in the SDK. The „array of const“ is replaced by „array of PtrUInt“ for all variadic wrappers. Because of this changes all this wrappers can be defined as inline and the arrays does not need to be copied inside the wrapper so it should be a little bit faster (even the effect is not that big I guess).
Also all dependencies to objfpc is removed so if someone want to write a freepascal program without objfpc dependency it should be possible now.
All this changes were discussed here.
But this all means that sources using such variadic functions must be changed, I changed already the fpGUI, LCL and example sources.