vertpingouin,

If you are doing that every frame as part of the sprite's .draw or .update
method , it's still possible the transform is what is taking up CPU time.
 You may want to use something like this instead:

class MySpriteThing( pygame.sprite.Sprite):
    image = None
    def __init___( self ):

        .....
        if MySpriteThing.image is None:
            MySpriteThing.image = pygame.image.load( "foo.png" )
            size = MySpriteThing.image.get_size()
            new_width = size[0] * X_SCALE # where X_SCALE is the ratio
between RESOLUTION_X (the big resolution) and GRAPHICS_X (the resolution
the images were made at) ; ( 1920 / 640 )
            new_height = size[1] * Y_SCALE
            MySpriteThing..image = pygame.transform.scale( self.image, (
new_width, new_height ) )

        self.image = MySpriteThing.image

........

# then, in your main loop, blit the sprite's .image attribute to your
display surface

mySpriteGroup.draw( screen )

pygame.display.update()



On Mon, Jul 28, 2014 at 4:41 PM, vertpingouin <
sylvain.bousse...@vertpingouin.fr> wrote:

> to Sam :
> I'm using HWSURFACE flag but I got exatly the same framerate. The ideal
> would be to rewrite everything in openGL but I don't know it well...
> yet.
>
> to Noel:
> On the topic of performing transform one time only, I'm not sure what
> mean here. If I scale my surface one time, it gets, say, 1920x1080, but
> then blitting is done only of a 640x480 part of the surface... So maybe
> I misunderstood something here.
>
> I'm using this to transform :
>
> pygame.transform.scale(self.native, (SCREENWIDTH, SCREENHEIGHT),
> self.screen)
>
> where native is the little one and screen the big one. I assume that
> self.native is scaled then blit onto self.screen...
>
> I think this is the blitting that is slow because if I use a lesser
> resolution for self.screen, I almost get back my precious frames per
> second.
>
> It will be really cool to send my little native surface to my graphic
> card, then let it scale by itself. Don't know if it's even possible.
>
>
> Le lundi 28 juillet 2014 à 11:50 -0400, Noel Garwick a écrit :
> > Right now you are blitting tiles to a 640x480 surface, and then
> > performing a transform on the whole surface and then blitting it to
> > the display?
> >
> >
> > If this is the case, then try to only perform the scale operation when
> > the resolution is changed (instead of once each frame) and see how
> > that works.  I know you mentioned that the full screen blit operation
> > seems to be the main bottleneck, but this should help too.
> >
> >
> >
> >
> >
> >
> >
> > On Mon, Jul 28, 2014 at 7:32 AM, Sam Bull <sam.hack...@sent.com>
> > wrote:
> >         On lun, 2014-07-28 at 06:54 +0200, VertPingouin wrote:
> >         > So I came up with the idea of an hardware opengl texture
> >         stretching
> >         > instead of a dumb blit but I don't know how to achieve it.
> >         >
> >         > Anyone has already done this ?
> >         >
> >
> >
> >         You would just need to code the graphics in OpenGL without
> >         using
> >         pygame.Surface and pygame.draw. First though, check you are
> >         using the
> >         HWSURFACE flag, if you are running fullscreen, it's possible
> >         this might
> >         provide the necessary speedup without going to OpenGL.
> >
> >
> http://www.pygame.org/docs/ref/display.html#pygame.display.set_mode
> >
> >
>
>
>

Reply via email to