I get that you want to understand what's going on, but beyond that, is there some problem with just using display.flip?
On Thu, Jun 12, 2014 at 3:31 AM, Abhas Bhattacharya < abhasbhattachar...@gmail.com> wrote: > The following code draws a circle and moves it by 4px to left every step. > > Problem is that at about 60 fps or more, the circle flickers and sometimes > looks cut off to me (approx. illustration - http://i.imgur.com/4nKzsCP.png). > The flickering is not like a screen flicker, more like state switching > between full circle and cut-off circle. This problems doesnt occur at all > upto 45 fps, couldnt be reproduced by screen capture or pausing the game, > as if the problem is only visible to the naked eye. > > Now, there could be two possibilities: > > * Screen is not updated over the required region. > > None of the update code depends on the fps, so the flicker should have > been fps-independent. But, the problem disappears at 30/45 fps. But, > surprisingly, it is also fixed if display.flip is used instead of update. > > * V-sync/monitor refresh problem > > Some other pygame flicker questions mentioned this problem. I thought > software rendering doesnt have this problem, but not really sure. Also, why > would display.flip fix this? > > Ver- 1.9.2 a0 > > import pygame > w,h=800,200 > fps=60 > pygame.init() > screen = pygame.display.set_mode([w, h]) > color=pygame.Color("white") > clock=pygame.time.Clock() > radius=20 > x,y=800,100 > def get_bbox(x,y): > left = x - radius > top = y - radius > width = radius * 2 > height = radius * 2 > return pygame.Rect((left, top), (width, height)) > > while True: > old_x=x > x-=4 > screen.fill(pygame.Color("black"),get_bbox(old_x,y)) > pygame.draw.circle(screen, color, (x, y), radius, 1) > pygame.display.update([get_bbox(x,y),get_bbox(old_x,y)]) > clock.tick(fps) >