@@ -16,6 +16,7 @@ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
1616var camera : delve.graphics.camera.Camera = undefined ;
1717var camera_offscreen : delve.graphics.camera.Camera = undefined ;
1818
19+ var shader : delve.platform.graphics.Shader = undefined ;
1920var material1 : graphics.Material = undefined ;
2021var material2 : graphics.Material = undefined ;
2122var material3 : graphics.Material = undefined ;
@@ -36,6 +37,7 @@ pub fn main() !void {
3637 .tick_fn = on_tick ,
3738 .pre_draw_fn = pre_draw ,
3839 .draw_fn = on_draw ,
40+ .cleanup_fn = on_cleanup ,
3941 };
4042
4143 // Pick the allocator to use depending on platform
@@ -45,7 +47,8 @@ pub fn main() !void {
4547 // See https://github.com/ziglang/zig/issues/19072
4648 try delve .init (std .heap .c_allocator );
4749 } else {
48- try delve .init (gpa .allocator ());
50+ // Using the default allocator will let us detect memory leaks
51+ try delve .init (delve .mem .createDefaultAllocator ());
4952 }
5053
5154 try delve .modules .registerModule (example );
@@ -66,24 +69,24 @@ pub fn on_init() !void {
6669 offscreen_pass = graphics .RenderPass .init (.{ .width = 1024 , .height = 768 });
6770 offscreen_pass_2 = graphics .RenderPass .init (.{ .width = 640 , .height = 480 });
6871
69- const shader = delve .platform .graphics .Shader .initFromBuiltin (.{ .vertex_attributes = delve .graphics .mesh .getShaderAttributes () }, delve .shaders .default_mesh );
72+ shader = delve .platform .graphics .Shader .initFromBuiltin (.{ .vertex_attributes = delve .graphics .mesh .getShaderAttributes () }, delve .shaders .default_mesh ).? ;
7073
7174 // Create a material out of the texture
72- material1 = graphics .Material .init (.{
75+ material1 = try graphics .Material .init (.{
7376 .shader = shader ,
7477 .texture_0 = tex ,
7578 .samplers = &[_ ]graphics.FilterMode {.NEAREST },
7679 });
7780
7881 // Create a material that uses our main offscreen render texture
79- material2 = graphics .Material .init (.{
82+ material2 = try graphics .Material .init (.{
8083 .shader = shader ,
8184 .texture_0 = offscreen_pass .render_texture_color ,
8285 .samplers = &[_ ]graphics.FilterMode {.NEAREST },
8386 });
8487
8588 // Create a material that uses our secondary offscreen render texture
86- material3 = graphics .Material .init (.{
89+ material3 = try graphics .Material .init (.{
8790 .shader = shader ,
8891 .texture_0 = offscreen_pass_2 .render_texture_color ,
8992 .samplers = &[_ ]graphics.FilterMode {.NEAREST },
@@ -100,19 +103,19 @@ pub fn on_init() !void {
100103 const flip_mod : math.Vec3 = if (! is_opengl ) math .Vec3 .new (1 , 1 , 1 ) else math .Vec3 .new (1 , -1 , 1 );
101104
102105 // make a cube
103- cube1 = delve .graphics .mesh .createCube (math .Vec3 .new (0 , 0 , 0 ), math .Vec3 .new (2 , 3 , 1 ), delve .colors .white , & material1 ) catch {
106+ cube1 = delve .graphics .mesh .createCube (math .Vec3 .new (0 , 0 , 0 ), math .Vec3 .new (2 , 3 , 1 ), delve .colors .white , material1 ) catch {
104107 delve .debug .log ("Could not create cube!" , .{});
105108 return ;
106109 };
107110
108111 // and another
109- cube2 = delve .graphics .mesh .createCube (math .Vec3 .new (3 , 0 , -1 ), math .Vec3 .new (1 , 1 , 2 ).mul (flip_mod ), delve .colors .white , & material3 ) catch {
112+ cube2 = delve .graphics .mesh .createCube (math .Vec3 .new (3 , 0 , -1 ), math .Vec3 .new (1 , 1 , 2 ).mul (flip_mod ), delve .colors .white , material3 ) catch {
110113 delve .debug .log ("Could not create cube!" , .{});
111114 return ;
112115 };
113116
114117 // and then a screen
115- cube3 = delve .graphics .mesh .createCube (math .Vec3 .new (0 , 0 , 0 ), math .Vec3 .new (20 , 12.0 , 0.25 ).mul (flip_mod ), delve .colors .white , & material2 ) catch {
118+ cube3 = delve .graphics .mesh .createCube (math .Vec3 .new (0 , 0 , 0 ), math .Vec3 .new (20 , 12.0 , 0.25 ).mul (flip_mod ), delve .colors .white , material2 ) catch {
116119 delve .debug .log ("Could not create cube!" , .{});
117120 return ;
118121 };
@@ -183,3 +186,17 @@ pub fn on_draw() void {
183186 // reset the clear color back to ours
184187 graphics .setClearColor (delve .colors .examples_bg_dark );
185188}
189+
190+ pub fn on_cleanup () ! void {
191+ shader .destroy ();
192+ material1 .deinit ();
193+ material2 .deinit ();
194+ material3 .deinit ();
195+ cube1 .deinit ();
196+ cube2 .deinit ();
197+ cube3 .deinit ();
198+
199+ // cleanup the nested examples too
200+ if (nested_example_1 .cleanup_fn ) | cleanup_fn | try cleanup_fn ();
201+ if (nested_example_2 .cleanup_fn ) | cleanup_fn | try cleanup_fn ();
202+ }
0 commit comments