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

Re: [pygame] pygame 1.8 - problem with framerate



Hi.

I am using Windows XP and setting SDL_VIDEODRIVER solves the framerate problem, but the mouse cursor is strange. If I remove the flags pygame.DOUBLEBUF and pygame.HWSURFACE of the display.set_mode function the mouse cursor is a little better.

What may be the problem?

Thanks for your help.

Pedro.

On Fri, Jun 6, 2008 at 11:20 PM, René Dudfield <renesd@xxxxxxxxx> wrote:
hi again,

I modified my original change... because vista still uses platform as
2 like nt/2000/xp.  So I also checked the major number of the platform
was < 6 - since vista is less than 6.

cheers,

On Sat, Jun 7, 2008 at 12:01 PM, René Dudfield <renesd@xxxxxxxxx> wrote:
> hi,
>
> yeah, I'm pretty sure this is the case... usually blitting is the slow
> part - and with most older computers, directx is the fast path.
> There's also been a couple of other reports of 1.8 being slower on
> their computers...
>
> I've committed something for lib/__init__.py  ...  that uses directx
> for older windows versions.  It's untested so far, I'll boot up my
> windows machines and see if it works there.  I can only test on xp,
> and vista at the moment.
>
>
> These should run on older versions of windows.
>
> ----
> import pygame, os
> assert(os.environ.get('SDL_VIDEODRIVER', '') == 'directx')
>
>
>
> ------  this one should respect the driver set by the user.
> import os
> os.environ['SDL_VIDEODRIVER'] = 'windib'
> import pygame
> assert(os.environ.get('SDL_VIDEODRIVER', '') == 'windib')
>
>
> cu,
>
>
> On Sat, Jun 7, 2008 at 11:19 AM, Lenard Lindstrom <len-l@xxxxxxxxx> wrote:
>> Let's wait until Pedro Vieira confirms he is using Windows and that setting
>> SDL_VIDEODRIVER solves his problem. If so then yes we could patch
>> __init__.py to set SDL_VIDEODRIVER if it is not already set. Personally, I
>> see a 6X increase in framerate enabling directx for the test case below.
>>
>> Lenard
>>
>>
>> René Dudfield wrote:
>>>
>>> hi,
>>>
>>> this is probably because your computer has faster directx 2d driver
>>> than windib driver.
>>>
>>> We had to follow SDLs change of default driver, because the directx
>>> driver is broken on some platforms.
>>>
>>> However you can set the old directx driver.
>>> os.environ["SDL_VIDEODRIVER"] = "directx"
>>>
>>> I would recommend wrapping it in some OS detection - so your game
>>> would still work on the platforms where the directx driver is broken.
>>>
>>> Lenard: Maybe we can make this behaviour default in pygame 1.8.1... ?
>>> What do you think?
>>> We could use the platform module to detect if it's win9x, win2k etc,
>>> then select the directx driver if so.
>>>
>>> If you reckon, it's a good idea, I'll try and make a patch for the OS
>>> detection.
>>>
>>>
>>>
>>>
>>> On Sat, Jun 7, 2008 at 4:33 AM, Pedro Vieira <pesvieira@xxxxxxxxx> wrote:
>>>
>>>>
>>>> Hi.
>>>>
>>>> I updated the version of pygame, 1.7.1 to 1.8, and I had problem with
>>>> that.
>>>> My game started to become very slow, only by exchanging version. I was
>>>> looking to see what was happening and saw that the fps was very low. I
>>>> created a simple code to test and I saw that for the same code, ran on
>>>> both
>>>> versions, there is a big difference in FPS. What may be happening?
>>>>
>>>> Thank you.
>>>>
>>>>
>>>> The code that I used for test is below:
>>>>
>>>> import pygame
>>>>
>>>> class Game:
>>>>       screen = None
>>>>       screen_size = None
>>>>       run = True
>>>>
>>>>       def __init__( self, size, fullscreen):
>>>>               pygame.init()
>>>>               flags = pygame.DOUBLEBUF
>>>>               if fullscreen:
>>>>                       flags = (pygame.FULLSCREEN | pygame.DOUBLEBUF |
>>>> pygame.HWSURFACE)
>>>>               self.screen = pygame.display.set_mode( size, flags )
>>>>
>>>>       def handle_events( self ):
>>>>               for event in pygame.event.get():
>>>>                       if ((event.type == pygame.KEYDOWN)or(event.type ==
>>>> pygame.KEYUP)):
>>>>                               if (event.key == pygame.K_ESCAPE):
>>>>                                       self.run = False
>>>>
>>>>       def loop( self ):
>>>>               clock = pygame.time.Clock()
>>>>               while (self.run):
>>>>                       clock.tick()
>>>>                       print clock.get_fps()
>>>>                       self.screen.fill((255,255,255))
>>>>                       self.handle_events()
>>>>                       pygame.display.flip()
>>>>
>>>>
>>>> game = Game((1024,768), 1)
>>>> game.loop()
>>>>
>>
>>
>