Karl Zylinski 4 месяцев назад
Родитель
Сommit
cb8ac64d83
3 измененных файлов с 13 добавлено и 2 удалено
  1. 3 0
      karl2d.odin
  2. 9 2
      render_backend_gl.odin
  3. 1 0
      window_win32.odin

+ 3 - 0
karl2d.odin

@@ -31,6 +31,7 @@ init :: proc(window_width: int, window_height: int, window_title: string,
             window_creation_flags := Window_Flags {},
             allocator := context.allocator, loc := #caller_location) -> ^State {
 	assert(s == nil, "Don't call 'init' twice.")
+	context.allocator = allocator
 
 	s = new(State, allocator, loc)
 	s.frame_allocator = runtime.arena_allocator(&s.frame_arena)
@@ -101,6 +102,7 @@ shutdown_wanted :: proc() -> bool {
 // Closes the window and cleans up the internal state.
 shutdown :: proc() {
 	assert(s != nil, "You've called 'shutdown' without calling 'init' first")
+	context.allocator = s.allocator
 
 	destroy_font(s.default_font)
 	rb.destroy_texture(s.shape_drawing_texture)
@@ -821,6 +823,7 @@ destroy_font :: proc(font: Font_Handle) {
 
 	// TODO fontstash has no "destroy font" proc... I should make my own version of fontstash
 	delete(s.fs.fonts[f.fontstash_handle].glyphs)
+	s.fs.fonts[f.fontstash_handle].glyphs = {}
 }
 
 get_default_font :: proc() -> Font_Handle {

+ 9 - 2
render_backend_gl.odin

@@ -540,14 +540,21 @@ gl_describe_pixel_format :: proc(f: Pixel_Format) -> (format: u32, num_component
 }
 
 gl_destroy_shader :: proc(h: Shader_Handle) {
-	
+	shd := hm.get(&s.shaders, h)
+
+	if shd == nil {
+		log.errorf("Invalid shader: %v", h)
+		return
+	}
+
+	delete(shd.constant_buffers, s.allocator)
+	delete(shd.constants, s.allocator)
 }
 
 gl_default_shader_vertex_source :: proc() -> string {
 	return #load("default_shader_vertex.glsl")
 }
 
-
 gl_default_shader_fragment_source :: proc() -> string {
 	return #load("default_shader_fragment.glsl")
 }

+ 1 - 0
window_win32.odin

@@ -7,6 +7,7 @@ package karl2d
 WINDOW_INTERFACE_WIN32 :: Window_Interface {
 	state_size = win32_state_size,
 	init = win32_init,
+	shutdown = win32_shutdown,
 	window_handle = win32_window_handle,
 	process_events = win32_process_events,
 	get_events = win32_get_events,