changeset 353:b67ea65dae2b

Faster tiled renderer
author Neil Muller <drnlmuller@gmail.com>
date Fri, 06 Sep 2013 16:34:43 +0200
parents bf43cc2d8d0a
children 55752fc7b753
files nagslang/render.py
diffstat 1 files changed, 9 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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)