Line drawing optimizations, vertex indexing
This commit is contained in:
parent
c1cd614040
commit
4da430a02b
|
@ -104,10 +104,31 @@ pub fn setColor(self: *Self, r: u8, g: i32, b: i32, a: i32) void {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn drawRectangle(self: *Self, x: i32, y: i32, w: i32, h: i32) void {
|
pub fn drawRectangle(self: *Self, x: i32, y: i32, w: i32, h: i32) void {
|
||||||
self.fillRectangle(x, y, 1, h);
|
var xf = @intToFloat(f32, x);
|
||||||
self.fillRectangle(x, y, w, 1);
|
var yf = @intToFloat(f32, y);
|
||||||
self.fillRectangle(w+x-1, y, 1, h);
|
var wf = @intToFloat(f32, w);
|
||||||
self.fillRectangle(x, h+y-1, w, 1);
|
var hf = @intToFloat(f32, h);
|
||||||
|
|
||||||
|
gl.enableVertexAttribArray(0);
|
||||||
|
gl.vertexAttribPointer(0, 2, .float, false, 0, 0);
|
||||||
|
|
||||||
|
const vertex_buffer = [_]f32{
|
||||||
|
xf, yf ,
|
||||||
|
xf + wf, yf ,
|
||||||
|
xf + wf, yf + hf,
|
||||||
|
xf, yf + hf,
|
||||||
|
};
|
||||||
|
|
||||||
|
const indices = [_]u8{0, 1, 1, 2, 2, 3, 3, 0};
|
||||||
|
|
||||||
|
self.buffer.data(f32, &vertex_buffer, .static_draw);
|
||||||
|
|
||||||
|
gl.uniform4fv(self.color_loc, &.{ self.color });
|
||||||
|
_ = indices;
|
||||||
|
|
||||||
|
gl.drawElements(.lines, 8, .u8, @ptrToInt(&indices));
|
||||||
|
|
||||||
|
gl.disableVertexAttribArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fillRectangle(self: *Self, x: i32, y: i32, w: i32, h: i32) void {
|
pub fn fillRectangle(self: *Self, x: i32, y: i32, w: i32, h: i32) void {
|
||||||
|
@ -117,22 +138,22 @@ pub fn fillRectangle(self: *Self, x: i32, y: i32, w: i32, h: i32) void {
|
||||||
var hf = @intToFloat(f32, h);
|
var hf = @intToFloat(f32, h);
|
||||||
|
|
||||||
gl.enableVertexAttribArray(0);
|
gl.enableVertexAttribArray(0);
|
||||||
gl.vertexAttribPointer(0, 3, .float, false, 0, 0);
|
gl.vertexAttribPointer(0, 2, .float, false, 0, 0);
|
||||||
|
|
||||||
const vertex_buffer = [_]f32{
|
const vertex_buffer = [_]f32{
|
||||||
xf, yf , 0.0,
|
xf + wf, yf ,
|
||||||
xf + wf, yf , 0.0,
|
xf, yf + hf,
|
||||||
xf, yf + hf, 0.0,
|
xf, yf ,
|
||||||
xf + wf, yf + hf, 0.0,
|
xf + wf, yf + hf,
|
||||||
xf + wf, yf , 0.0,
|
|
||||||
xf, yf + hf, 0.0,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const indices = [_]u8{0, 1, 2, 0, 1, 3};
|
||||||
|
|
||||||
self.buffer.data(f32, &vertex_buffer, .static_draw);
|
self.buffer.data(f32, &vertex_buffer, .static_draw);
|
||||||
|
|
||||||
gl.uniform4fv(self.color_loc, &.{ self.color });
|
gl.uniform4fv(self.color_loc, &.{ self.color });
|
||||||
gl.drawArrays(.triangles, 0, 3);
|
|
||||||
gl.drawArrays(.triangles, 3, 6);
|
gl.drawElements(.triangles, 6, .u8, @ptrToInt(&indices));
|
||||||
|
|
||||||
gl.disableVertexAttribArray(0);
|
gl.disableVertexAttribArray(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,15 @@ pub fn main() !void {
|
||||||
.main_menu => main_menu.tick(),
|
.main_menu => main_menu.tick(),
|
||||||
.game => game.tick(),
|
.game => game.tick(),
|
||||||
};
|
};
|
||||||
|
const start = SDL.getTicks64();
|
||||||
|
|
||||||
|
|
||||||
renderer.render();
|
renderer.render();
|
||||||
|
|
||||||
|
const delay = SDL.getTicks64() - start;
|
||||||
|
std.debug.print("{} ms\n", .{delay});
|
||||||
|
if (delay < 16) {
|
||||||
|
SDL.delay(16 - @intCast(u32, delay));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#version 330 core
|
#version 330 core
|
||||||
|
|
||||||
uniform mat4 mvp;
|
uniform mat4 mvp;
|
||||||
layout(location = 0) in vec3 vertexPosition_modelspace;
|
layout(location = 0) in vec2 pos;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = mvp * vec4(vertexPosition_modelspace, 1);
|
gl_Position = mvp * vec4((pos + vec2(0.5, 0.5)), 0, 1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue