gamnit: reset SpriteSet at create to support recreating the GPU context
[nit.git] / lib / gamnit / flat / flat_core.nit
index 932a584..55da8e7 100644 (file)
@@ -459,10 +459,15 @@ redef class App
                        glTexParameteri(gl_TEXTURE_2D, gl_TEXTURE_MIN_FILTER, gl_LINEAR)
                        glTexParameteri(gl_TEXTURE_2D, gl_TEXTURE_MAG_FILTER, gl_LINEAR)
                end
+
+               sprites.reset
+               ui_sprites.reset
        end
 
        redef fun on_stop
        do
+               super
+
                # Clean up
                simple_2d_program.delete
 
@@ -961,6 +966,10 @@ class SpriteSet
        do
                # Remap sprites that may need to change context
                for sprite in sprites_to_remap do
+
+                       # Skip if it was removed from this set after being modified
+                       if sprite.sprite_set != self then continue
+
                        unmap_sprite sprite
                        map_sprite sprite
                end
@@ -999,6 +1008,23 @@ class SpriteSet
                for c in contexts_items do c.destroy
                contexts_map.clear
                contexts_items.clear
+               sprites_to_remap.clear
+       end
+
+       private fun reset
+       do
+               for sprite in self do
+                       sprite.context = null
+               end
+
+               for c in contexts_items do c.destroy
+               contexts_map.clear
+               contexts_items.clear
+               sprites_to_remap.clear
+
+               for sprite in self do
+                       map_sprite sprite
+               end
        end
 end