changeset 511:a98ae2bc4957

Fix slow rendering. \o/
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 07 Sep 2013 19:28:27 +0200
parents 2cdfbc483d57
children a46767c61ad6
files nagslang/screens/area.py
diffstat 1 files changed, 13 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/screens/area.py	Sat Sep 07 19:22:15 2013 +0200
+++ b/nagslang/screens/area.py	Sat Sep 07 19:28:27 2013 +0200
@@ -92,6 +92,8 @@
         self.add_game_objects()
         self.save_progress()
         sound.play_music("POL-cyber-factory-short.ogg")
+        self._background = None
+        self._surface = None
 
     def teardown(self):
         sound.stop()
@@ -230,17 +232,19 @@
     def render(self, surface):
         if self._disable_render:
             return
-        background = self._level.get_background()
-        render_rect = self._calc_viewport(background, surface)
-        #mysurface = background.copy()
-        mysurface = pygame.surface.Surface(background.get_size())
-        mysurface.set_clip(render_rect)
-        mysurface.blit(background, render_rect.topleft, render_rect)
+        if self._background is None:
+            bg = self._level.get_background()
+            self._background = pygame.surface.Surface(bg.get_size())
+            self._background.blit(bg, (0, 0))
+            self._surface = pygame.surface.Surface(self._background.get_size())
+        render_rect = self._calc_viewport(self._surface, surface)
+        self._surface.set_clip(render_rect)
+        self._surface.blit(self._background, render_rect.topleft, render_rect)
         for drawable in self._drawables:
-            drawable.render(mysurface)
-        surface.blit(mysurface, (0, 0), render_rect)
+            drawable.render(self._surface)
+        surface.blit(self._surface, (0, 0), render_rect)
         # Maximum width we allow for overlays
-        max_width = min(render_rect.width, mysurface.get_width())
+        max_width = min(render_rect.width, self._surface.get_width())
         for overlay in self._level.overlay_drawables:
             if overlay.is_visible():
                 overlay.render(surface, render_rect.topleft, max_width)