|This is a topic that I am sure will raise the eye browse of many. Given the speed of the Apollo Core's CPU and memory controller and contrasting that with the performance of chip ram and the Amiga's aged chip set, it is worth exploring the bypassing of the Amiga's chip set and utilise the raw power of the 68080. In that vein, the best approach is a natural follow on discussion. This question applies mostly to writing new applications.|
But let me set a context here because the topic isn't universally applicable (exception-finders need not apply). I have been writing a GUI based application which required me to write my own BOOPSI objects. To maximise compatibility, I used Amiga OS functions for all drawing. My impression was, that the hard work of drawing lines and moving image data around in chip ram was done by the Amiga's own custom chips. What I can see is that even with simple animations, which require lots of line drawing (let's say 100 lines per animated frame), the frame rate starts to suffer quite badly. Now I am hoping someone might see the flaw in my thinking but my assumptions which explains this are:
* ECS for example is only twice as fast as a 7Mhz 68000 in primative drawing operations (this I read somewhere but is perhaps incorrect). But it is quite old and understandable.
* Chip ram is slow not only because it is shared by multiple chips, but it is a slower hardware (when compared to fast ram on the Vampire especially)
* All drawing operations (lines, ellipses, blitting) are done by the custom chips, even when using the Amiga OS's functions
If my thinking is correct, then drawing everything in fast ram first (perhaps writing my own functions for doing this), and copying the final result to chip ram for display would reap significant performance gains. The user would see a much more fluid and snappier GUI.
For the purposes of my questions, I would like to exclude such points as "You don't need animated GUIs" or "Just use MUI/React/MyFavouriteGUI.library" as these could be debated separately ad nauseam.
So my questions are:
* How is this best done? I don't find a generic library that exists that could do this for me for just my programme. Is my google capabilities just poor or must I write this myself?
* I have seen some patches which can do this system wide (FBlit). Does there not exist something which I implement for my programme alone?
* Is there another approach that I have perhaps not considered? My goal is "Faster than ECS/AGA primative drawing operations".
Constructive thoughts and feedback?