diff --git a/lib/renderer/g_buffer.rb b/lib/renderer/g_buffer.rb index da0f1f8..5388caf 100644 --- a/lib/renderer/g_buffer.rb +++ b/lib/renderer/g_buffer.rb @@ -151,15 +151,13 @@ class IMICFPS end def clean_up - glDeleteFramebuffers(@framebuffer) + glDeleteFramebuffers(1, [@framebuffer].pack("L")) - @textures.values.each do |id| - glDeleteTextures(id) - end + glDeleteTextures(@textures.values.size, @textures.values.pack("L*")) - glDeleteBuffers(@positions_buffer_id) - glDeleteBuffers(@uvs_buffer_id) - glDeleteVertexArrays(@screen_vbo) + glDeleteBuffers(2, [@positions_buffer_id, @uvs_buffer_id].pack("L*")) + glDeleteVertexArrays(1, [@screen_vbo].pack("L")) + gl_error? end end end \ No newline at end of file diff --git a/lib/renderer/opengl_renderer.rb b/lib/renderer/opengl_renderer.rb index 2eb69c2..01f9e0b 100644 --- a/lib/renderer/opengl_renderer.rb +++ b/lib/renderer/opengl_renderer.rb @@ -8,8 +8,15 @@ class IMICFPS @g_buffer = GBuffer.new end + def canvas_size_changed + @g_buffer.unbind_framebuffer + @g_buffer.clean_up + + @g_buffer = GBuffer.new + end + def render(camera, lights, entities) - if Shader.available?("default") + if Shader.available?("default") && Shader.available?("render_screen") @g_buffer.bind_for_writing gl_error? diff --git a/lib/renderer/renderer.rb b/lib/renderer/renderer.rb index 66b213e..31a30d5 100644 --- a/lib/renderer/renderer.rb +++ b/lib/renderer/renderer.rb @@ -28,6 +28,10 @@ class IMICFPS @opengl_renderer.render(camera, lights, entities) end + def canvas_size_changed + @opengl_renderer.canvas_size_changed + end + def finalize # cleanup end end diff --git a/lib/window.rb b/lib/window.rb index eb64235..a416f4d 100644 --- a/lib/window.rb +++ b/lib/window.rb @@ -27,6 +27,8 @@ class IMICFPS @renderer.preload_default_shaders @scene = TurnTableScene.new + @canvas_size = Vector.new(self.width, self.height) + at_exit do @config.save! end @@ -45,6 +47,12 @@ class IMICFPS @console.draw if @show_console draw_cursor if needs_cursor + + _canvas_size = Vector.new(self.width, self.height) + if @canvas_size != _canvas_size + @renderer.canvas_size_changed + @canvas_size = _canvas_size + end end def draw_cursor