# HG changeset patch # User Neil Muller # Date 1378478083 -7200 # Node ID b67ea65dae2bf27a23d0147ba058ab3e43d8e265 # Parent bf43cc2d8d0a93cd788c9463095724efe185445e Faster tiled renderer diff -r bf43cc2d8d0a -r b67ea65dae2b nagslang/render.py --- a/nagslang/render.py Fri Sep 06 16:14:03 2013 +0200 +++ b/nagslang/render.py Fri Sep 06 16:34:43 2013 +0200 @@ -197,21 +197,23 @@ self._tile_image = tile_image self.outline = outline self._tiled = None + self._offset = None def _make_surface(self, surface): if not self._tiled: size = surface.get_size() - self._tiled = tile_surface(size, self._tile_image) mask = pygame.surface.Surface(size, pgl.SRCALPHA) mask.fill(pygame.color.Color(0, 0, 0, 0)) pointlist = [pymunk.pygame_util.to_pygame(p, surface) for p in self.outline] - pygame.draw.polygon(mask, pygame.color.THECOLORS['white'], - pointlist, 0) - self._tiled.blit(mask, (0, 0), special_flags=pgl.BLEND_RGBA_MULT) - return self._tiled + rect = pygame.draw.polygon(mask, pygame.color.THECOLORS['white'], + pointlist, 0) + self._offset = (rect.x, rect.y) + self._tiled = tile_surface((rect.w, rect.h), self._tile_image) + self._tiled.blit(mask, (0, 0), rect, + special_flags=pgl.BLEND_RGBA_MULT) def render(self, surface): - tiled = self._make_surface(surface) - surface.blit(tiled, (0, 0)) + self._make_surface(surface) + surface.blit(self._tiled, self._offset) super(TiledRenderer, self).render(surface)