Merge: gamnit: new services and a lot of bug fixes and performance improvements
[nit.git] / lib / gamnit / dynamic_resolution.nit
index 5af305c..0219db4 100644 (file)
@@ -42,7 +42,7 @@ redef class App
        #
        # This value is applied to both X and Y, so it has an exponential effect on
        # the number of pixels.
-       var dynamic_resolution_ratio = 1.0
+       var dynamic_resolution_ratio = 1.0 is writable
 
        # Minimum dynamic screen resolution
        var min_dynamic_resolution_ratio = 0.0125 is writable
@@ -54,7 +54,7 @@ redef class App
 
        private var perf_clock_dynamic_resolution = new Clock is lazy
 
-       redef fun on_create
+       redef fun create_scene
        do
                super
 
@@ -79,6 +79,7 @@ redef class App
                        # Draw directly to the screen framebuffer
                        glBindFramebuffer(gl_FRAMEBUFFER, dynamic_context.screen_framebuffer)
                        glViewport(0, 0, display.width, display.height)
+                       glClear gl_COLOR_BUFFER_BIT | gl_DEPTH_BUFFER_BIT
 
                        var gl_error = glGetError
                        assert gl_error == gl_NO_ERROR else print_error gl_error
@@ -87,13 +88,14 @@ redef class App
 
                # Draw to our dynamic framebuffer
                glBindFramebuffer(gl_FRAMEBUFFER, dynamic_context.dynamic_framebuffer)
-               glClear gl_COLOR_BUFFER_BIT | gl_DEPTH_BUFFER_BIT
 
                var ratio = dynamic_resolution_ratio
                ratio = ratio.clamp(min_dynamic_resolution_ratio, max_dynamic_resolution_ratio)
                glViewport(0, 0, (display.width.to_f*ratio).to_i,
                                                 (display.height.to_f*ratio).to_i)
 
+               glClear gl_COLOR_BUFFER_BIT | gl_DEPTH_BUFFER_BIT
+
                var gl_error = glGetError
                assert gl_error == gl_NO_ERROR else print_error gl_error
        end
@@ -134,7 +136,11 @@ redef class App
 
                # Draw
                glDrawArrays(gl_TRIANGLE_STRIP, 0, 4)
+               gl_error = glGetError
+               assert gl_error == gl_NO_ERROR else print_error gl_error
 
+               # Take down
+               glBindBuffer(gl_ARRAY_BUFFER, 0)
                gl_error = glGetError
                assert gl_error == gl_NO_ERROR else print_error gl_error
 
@@ -157,7 +163,7 @@ redef class App
        end
 end
 
-# Program drawing the dynamic screen to the real screen
+# Handles to reused GL buffers and texture
 private class DynamicContext
 
        # Real screen framebuffer
@@ -175,8 +181,6 @@ private class DynamicContext
        # Buffer name for vertex data
        var buffer_array: Int = -1
 
-       var float_per_vertex: Int is lazy do return 4 + 4 + 3
-
        # Prepare all attributes once per resolution change
        fun prepare_once(display: GamnitDisplay, max_dynamic_resolution_ratio: Float)
        do
@@ -246,7 +250,7 @@ private class DynamicContext
                # Depth
                glBindRenderbuffer(gl_RENDERBUFFER, depthbuffer)
                assert glIsRenderbuffer(depthbuffer)
-               glRenderbufferStorage(gl_RENDERBUFFER, gl_DEPTH_COMPNENT16, width, height)
+               glRenderbufferStorage(gl_RENDERBUFFER, gl_DEPTH_COMPONENT16, width, height)
                glFramebufferRenderbuffer(gl_FRAMEBUFFER, gl_DEPTH_ATTACHMENT, gl_RENDERBUFFER, depthbuffer)
                var gl_error = glGetError
                assert gl_error == gl_NO_ERROR else print_error gl_error