[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Fullscreen vs Windowed Alpha Blit speed?



random thought here:

Maybe full screen mode is going into a different color depth?


On Sat, 22 Jan 2005 12:24:23 -0800, Fred Burton <flbl@xxxxxxxxxxxxxx> wrote:
> I was writing a simple slideshow program last night (which fades images
> in and out),
> and was wondering why for some reason bliting with alpha seems to run
> much slower when in fullscreen than when not.
> 
> Can someone tell me how to make it run as fast in fullscreen as in a
> window? (I tried a few things last night, but none of them seemed to help)
> 
> 
> import pygame
> import os
> 
> fade_time = 1000
> hang_time = 10000
> imgdir = 'images/'
> 
> fullscreen = 0
> bgcolor = 0
> 
> # 20 minute software by Fred Burton: flbl@xxxxxxxxxxxxxx
> 
> files = os.listdir(imgdir)
> 
> pics = []
> for pic in files:
>     if pic.lower()[-4:] == '.jpg':
>         pics.append(pic)
> 
> pics.sort()
> 
> class ErrorQuit:
>     pass
> 
> skip = '*'
> 
> def think():
>     global gamequit
>     global skip
>     remainingEvents = pygame.event.get()
>     for event in remainingEvents:
>         if event.type == pygame.QUIT:
>             raise ErrorQuit
>         if event.type == pygame.KEYDOWN:
>             if event.key == pygame.K_ESCAPE:
>                 raise ErrorQuit
>             if event.key == pygame.K_SPACE:
>                 skip = 1
>             if event.key == pygame.K_n:
>                 skip = 1
>             if event.key == pygame.K_p:
>                 skip = -1
>             if event.key == pygame.K_b:
>                 skip = -1
>         if event.type == pygame.MOUSEBUTTONDOWN:
>                 if event.button == 1:
>                     skip = 1
>                 if event.button == 3:
>                     skip = -1
> 
> def find_pred(name):
>     dl = pics
>     if len(dl) == 0:
>         return None
>     try:
>         i = dl.index(name)
>     except:
>         return dl[-1]
>     i -= 1
>     if i<0:
>         i = -1
>     return dl[i]
> 
> def find_succ(name):
>     dl = pics
>     if len(dl) == 0:
>         return None
>     try:
>         i = dl.index(name)
>     except:
>         return dl[0]
>     i += 1
>     if i>=len(dl):
>         i = 0
>     return dl[i]
> 
> try:
> 
>     pygame.init()
>     if fullscreen:
>         screen = pygame.display.set_mode((1024,768), pygame.DOUBLEBUF | pygame.FULLSCREEN)
>     else:
>         screen = pygame.display.set_mode((1024,768), pygame.DOUBLEBUF)
> 
>     ifname = pics[0]
>     while (1):
>         if skip == -1:
>             ifname = find_pred(ifname)
>         elif skip != '*':
>             ifname = find_succ(ifname)
>         skip = 0
> 
>         img = pygame.image.load(imgdir+ifname)
> #        pos = (0,0)
>         pos = (0.5*(screen.get_width()-img.get_width()), 0.5*(screen.get_height()-img.get_height()))
> 
>         t0 = pygame.time.get_ticks()
>         t1 = t0
>         while (t1-t0)<fade_time:
>             n = (255*(t1-t0))/fade_time
>             screen.fill(bgcolor)
>             img.set_alpha(int(n))
>             screen.blit(img, pos)
>             pygame.display.flip()
>             think()
> 
>             pygame.time.wait(1)
>             t1 = pygame.time.get_ticks()
> 
>         img.set_alpha(255)
>         screen.blit(img, pos)
>         pygame.display.flip()
> 
>         t0 = pygame.time.get_ticks()
>         t1 = t0
>         while ((t1-t0)<hang_time) and (skip == 0):
>             n = (255*(t1-t0))/fade_time
>             think()
>             pygame.time.wait(10)
>             t1 = pygame.time.get_ticks()
> 
>         t0 = pygame.time.get_ticks()
>         t1 = t0
>         while (t1-t0)<fade_time:
>             n = 255-((255*(t1-t0))/fade_time)
>             screen.fill(bgcolor)
>             img.set_alpha(int(n))
>             screen.blit(img, pos)
>             pygame.display.flip()
>             pygame.time.wait(1)
>             think()
>             t1 = pygame.time.get_ticks()
> 
>         screen.fill(bgcolor)
>         pygame.display.flip()
> 
> finally:
>     pygame.quit()
> 
> 
>