ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> pygame-users
pygame-users
RE: [pygame] blitting surface with surface-alpha to fullscreen display
by Scott Nelson other posts by this author
May 19 2006 11:21AM messages near this date
Re: [pygame] blitting surface with surface-alpha to fullscreen display | Re: [pygame] blitting surface with surface-alpha to fullscreen display
Thanks DR0ID...  Removing pygame.HWSURFACE was all I needed to do!  The
fade now runs in realtime on both the fullscreen and windowed display!

So, if I understand this correctly, with the pygame.HWSURFACE flag, my
display surface was a hardware surface.  And, when blitting a surface
with alpha to my hardware display surface, each pixel had to be read
from the display surface first (to calculate the alpha blending).  And,
if the reading of pixels from a hardware surface is a slow operation
(which makes sense), this explains why I saw the massive slowdown when
in fullscreen mode (since I had the HWSURFACE flag).  So, it was running
fine in windowed mode because the display was a software surface which
makes for a much faster pixel reading operation (since it doesn't have
to mess with communicating with the vid card).

Makes sense to me.  Thanks for the help, all!

-Scott

-----Original Message-----

Nelson, Scott schrieb:
> 
>  I've been messing with pygame for awhile and am having a blast! Thanks

>  for a great site, pygame.org people! And, I just got on this list and 
>  already its been very helpful!
> 
>  I ran into a performance snag trying to blit a surface with 
>  surface-alpha to a fullscreen display surface (trying to do a 
>  fade-to-black for the screen). It works great (realtime) when the 
>  display is windowed. Lotsa fun! But, when the display is fullscreen, 
>  each blit takes almost a second to complete in 640x480 on a beefy
machine.
> 
>  Now, I've read the pygame docs on surfaces and displays and searched 
>  this list (finding some related discussions) and can't quite nail down

>  what my problem is.
> 
>  So, my question is: why does it take me so long to blit in fullscreen 
>  mode? And, how can I create the surfaces in such a way that the blit 
>  performs at realtime in both windowed and fullscreen mode?
> 
>  Here's some snatches of my code. I grabbed the important bits, as it 
>  would be too much code to post all my classes in their entirety.
> 
>  ...Set up windowed mode:
> 
>  pygame.display.set_mode((640, 480))
> 
>  ...or set up fullscreen mode:
> 
>  pygame.display.set_mode((640, 480), pygame.FULLSCREEN |
pygame.HWSURFACE)
> 
>  ...creating the surface to do the fade:
> 
>  self._fadeSurface = pygame.Surface(size)
> 
>  self._fadeSurface.fill(color)
> 
>  self._fadeSurface.set_alpha(alpha)
> 
>  self._fadeSurface = self._fadeSurface.convert()
> 
>  ...blitting the fade surface to the display:
> 
>  self._targetSurface.blit(self._fadeSurface, (0, 0))
> 
>  In windowed mode, pygame.display.Info() returns:
> 
>  <VideoInfo(hw = 1, wm = 1,video_mem = 238032
> 
>  blit_hw = 1, blit_hw_CC = 1, blit_hw_A = 0,
> 
>  blit_sw = 1, blit_sw_CC = 1, blit_sw_A = 0,
> 
>  bitsize = 32, bytesize = 4,
> 
>  masks = (16711680, 65280, 255, 0),
> 
>  shifts = (16, 8, 0, 0),
> 
>  losses = (0, 0, 0, 8)>
> 
>  In fullscreen mode, pygame.display.Info() returns:
> 
>  <VideoInfo(hw = 1, wm = 1,video_mem = 244688
> 
>  blit_hw = 1, blit_hw_CC = 1, blit_hw_A = 0,
> 
>  blit_sw = 1, blit_sw_CC = 1, blit_sw_A = 0,
> 
>  bitsize = 32, bytesize = 4,
> 
>  masks = (16711680, 65280, 255, 0),
> 
>  shifts = (16, 8, 0, 0),
> 
>  losses = (0, 0, 0, 8)>
> 
>  So, the alpha HW acceleration capabilities of the display in either 
>  mode are the same. I do a convert() on the surface before blitting so 
>  it's format should match the display's. Why is the blit so slow in one

>  case (fullscreen surface) and realtime in the other (windowed 
>  surface)? I'm sure this has something to do with mismatches in surface

>  modes, but I haven't been able to get a handle on the details.
> 
>  Thanks in advance...
> 
>  -Scott
> 
Hi

try to use convert_alpha() instead of convert() and the screen without 
the pygame.HWSURFACE flag.

~DR0ID
Thread:
Scott Nelson
Dr0id
Scott Nelson
Dr0id
Rene Dudfield

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved