GetImage() has a nice explanation of the process of Sync() and how to use ClearScreen() to keep things in order...
Quote: "
...When Sync is called AppGameKit updates the positions of all objects with Update, then draws them all to the back buffer with Render, without clearing it, then displays the back buffer to the screen with Swap. It then clears the back buffer and returns to your code, so if you were to call GetImage immediately after Sync you would get a blank image filled with the current clear color. Therefore if you want to grab an image of the current scene fully drawn you must call Render then GetImage then ClearScreen to clear the back buffer so Sync doesn't redraw everything over a fully drawn depth buffer. If you are already using Update, Render, and Swap yourself instead of Sync, then call GetImage between Render and Swap.
"
So, while this may not be much help it still explains a little about things being able to get quirky if one of the steps are omitted, or out of place.
Quote: "
I am using drawsprite() to repeatedly draw the same sprite in the same frame a lot."
I don't use DrawSprite(), as I just set things invisible or move them off screen.
I often cheat when having a lot of images share the same space and set them up in one sprite using an animation and just set/play the frame(s) I want.
(even have a blank frame at the end of the animation to cheat on the invisible sometimes)
I depend mostly on just Sync() and do not go into the separate processes.
Coding things my way since 1981 -- Currently using AppGameKit V2 Tier 1