lib/gamnit flat: set array_enabled at each draw
[nit.git] / lib / gamnit / flat.nit
index 4c0b103..3ed34fe 100644 (file)
@@ -68,6 +68,10 @@ class Sprite
                glActiveTexture gl_TEXTURE0
                glBindTexture(gl_TEXTURE_2D, texture.root.gl_texture)
 
+               simple_2d_program.translation.array_enabled = false
+               simple_2d_program.color.array_enabled = false
+               simple_2d_program.scale.array_enabled = false
+
                simple_2d_program.translation.uniform(center.x, -center.y, center.z, 0.0)
                simple_2d_program.color.uniform(1.0, 1.0, 1.0, alpha)
                simple_2d_program.scale.uniform scale
@@ -155,14 +159,6 @@ redef class App
                        gamnit_error = tex.error
                        assert gamnit_error == null else print_error gamnit_error
                end
-
-               # Constant program values
-               program.use
-               program.coord.array_enabled = true
-               program.tex_coord.array_enabled = true
-
-               gl_error = glGetError
-               assert gl_error == gl_NO_ERROR else print gl_error
        end
 
        redef fun frame_core(display)
@@ -179,24 +175,35 @@ redef class App
                update dt
 
                # Draw and flip screen
-               # TODO optimize this draw to store constant values on the GPU
+               frame_core_draw display
+               display.flip
 
-               ## World sprites
+               # Check errors
+               gl_error = glGetError
+               assert gl_error == gl_NO_ERROR else print gl_error
+       end
+
+       # Draw sprites in `sprites` and `ui_sprites`
+       protected fun frame_core_draw(display: GamnitDisplay)
+       do
                simple_2d_program.use
+
+               # Set constant configs
+               simple_2d_program.coord.array_enabled = true
+               simple_2d_program.tex_coord.array_enabled = true
+               simple_2d_program.color.array_enabled = false
+
+               # TODO optimize this draw to store constant values on the GPU
+               # World sprites
                simple_2d_program.mvp.uniform world_camera.mvp_matrix
                for sprite in sprites do sprite.draw
 
-               ## Reset only the depth buffer
+               # Reset only the depth buffer
                glClear gl_DEPTH_BUFFER_BIT
 
-               ## UI sprites
+               # UI sprites
                simple_2d_program.mvp.uniform ui_camera.mvp_matrix
                for sprite in ui_sprites do sprite.draw
-               display.flip
-
-               # Check errors
-               gl_error = glGetError
-               assert gl_error == gl_NO_ERROR else print gl_error
        end
 
        # Main method to refine in clients to update game logic and `sprites`