diff options
-rw-r--r-- | src/main.zig | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/main.zig b/src/main.zig index 7543090..13ff58b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -70,7 +70,7 @@ fn checkGlError( const err = success == 0; if (err) { getLogFn(obj, 512, null, &gl_log); - std.debug.print("Shader compilation error: {s}\n", .{gl_log}); + std.debug.print("OpenGL shader error: {s}\n", .{gl_log}); } return err; } @@ -117,11 +117,23 @@ pub const Window = struct { /// OpenGl triangle shader program shader_prog: c_uint = undefined, /// Triangle vertices - vertices: [9]f32, + vertices: [12]f32 = .{ + -0.5, -0.5, 0.0, // bl + 0.5, -0.5, 0.0, // br + 0.5, 0.5, 0.0, // tr + -0.5, 0.5, 0.0, // tl + }, + /// Triangles indices + indices: [6]c_uint = .{ + 0, 1, 2, + 2, 3, 0, + }, /// OpenGL vertex buffer object vbo: c_uint = undefined, /// OpenGL vertex array object vao: c_uint = undefined, + // OpenGL element buffer object + ebo: c_uint = undefined, /// This window's title title: [*:0]const u8, /// Width in pixels @@ -147,11 +159,6 @@ pub const Window = struct { .allocator = allocator, .wl_surface = try compositor.createSurface(), .title = title, - .vertices = .{ - -0.5, -0.5, 0.0, - 0.5, -0.5, 0.0, - 0.0, 0.5, 0.0, - }, }; win.xdg_surface = try wm_base.getXdgSurface(win.wl_surface); errdefer win.xdg_surface.destroy(); @@ -187,6 +194,7 @@ pub const Window = struct { c.glGenVertexArrays(1, &win.vao); c.glGenBuffers(1, &win.vbo); + c.glGenBuffers(1, &win.ebo); c.glBindVertexArray(win.vao); @@ -198,6 +206,14 @@ pub const Window = struct { c.GL_STATIC_DRAW, ); + c.glBindBuffer(c.GL_ELEMENT_ARRAY_BUFFER, win.ebo); + c.glBufferData( + c.GL_ELEMENT_ARRAY_BUFFER, + @sizeOf(@TypeOf(win.indices)), + &win.indices, + c.GL_STATIC_DRAW, + ); + c.glVertexAttribPointer(0, 3, c.GL_FLOAT, c.GL_FALSE, 3 * @sizeOf(f32), null); c.glEnableVertexAttribArray(0); @@ -240,7 +256,7 @@ pub const Window = struct { c.glUseProgram(win.shader_prog); c.glBindVertexArray(win.vao); - c.glDrawArrays(c.GL_TRIANGLES, 0, 3); + c.glDrawElements(c.GL_TRIANGLES, 6, c.GL_UNSIGNED_INT, null); try egl_display.swapBuffers(win.egl_surface); } |