lib/gamnit: fix `Subtexture::gl_texture` not being set
[nit.git] / lib / gamnit / textures.nit
index ee66213..ce5546e 100644 (file)
@@ -23,24 +23,6 @@ abstract class Texture
        # Prepare a texture located at `path` within the `assets` folder
        new (path: Text) do return new GamnitAssetTexture(path.to_s)
 
-       # Prepare and load a colorful small texture of 2x2 pixels
-       new checker
-       do
-               var pixels = [0xFFu8, 0x00u8, 0x00u8,
-                             0x00u8, 0xFFu8, 0x00u8,
-                             0x00u8, 0x00u8, 0xFFu8,
-                             0xFFu8, 0xFFu8, 0xFFu8]
-               var cpixels = new CByteArray.from(pixels)
-
-               var tex = new GamnitRootTexture
-               tex.width = 2.0
-               tex.height = 2.0
-               tex.load_from_pixels(cpixels.native_array, 2, 2, gl_RGB)
-
-               cpixels.destroy
-               return tex
-       end
-
        # Root texture of which `self` is derived
        fun root: GamnitRootTexture is abstract
 
@@ -57,7 +39,7 @@ abstract class Texture
        var error: nullable Error = null
 
        # OpenGL handle to this texture
-       var gl_texture: Int is noinit
+       fun gl_texture: Int do return root.gl_texture
 
        # Prepare a subtexture from this texture
        fun subtexture(left, top, width, height: Numeric): GamnitSubtexture
@@ -67,12 +49,40 @@ abstract class Texture
                return subtex
        end
 
+       # Offset of the left border on `root` from 0.0 to 1.0
        fun offset_left: Float do return 0.0
+
+       # Offset of the top border on `root` from 0.0 to 1.0
        fun offset_top: Float do return 0.0
+
+       # Offset of the right border on `root` from 0.0 to 1.0
        fun offset_right: Float do return 1.0
+
+       # Offset of the bottom border on `root` from 0.0 to 1.0
        fun offset_bottom: Float do return 1.0
 end
 
+# Colorful small texture of 2x2 pixels
+class CheckerTexture
+       super GamnitRootTexture
+
+       redef fun load(force)
+       do
+               var pixels = [0xFFu8, 0x00u8, 0x00u8,
+                             0x00u8, 0xFFu8, 0x00u8,
+                             0x00u8, 0x00u8, 0xFFu8,
+                             0xFFu8, 0xFFu8, 0xFFu8]
+
+               var cpixels = new CByteArray.from(pixels)
+
+               width = 2.0
+               height = 2.0
+               load_from_pixels(cpixels.native_array, 2, 2, gl_RGB)
+
+               cpixels.destroy
+       end
+end
+
 # Texture with its own pixels
 class GamnitRootTexture
        super Texture
@@ -82,6 +92,8 @@ class GamnitRootTexture
        # Has this texture been loaded yet?
        var loaded = false
 
+       redef var gl_texture = -1
+
        init do all_root_textures.add self
 
        private fun load_from_pixels(pixels: Pointer, width, height: Int, format: GLPixelFormat)
@@ -177,7 +189,8 @@ class GamnitSubtexture
 end
 
 redef class Sys
-       private var all_root_textures = new TextureSet
+       # All declared root textures
+       var all_root_textures = new TextureSet
 end
 
 # Group of `Texture`