mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
draw text using ebo, some work to be done to clean that up
This commit is contained in:
@ -115,12 +115,16 @@ pub fn render(
|
||||
const b = color[2];
|
||||
const a: f32 = 1.0;
|
||||
|
||||
var vertices: std.ArrayListUnmanaged([6][9]f32) = .{};
|
||||
var vertices: std.ArrayListUnmanaged([4][9]f32) = .{};
|
||||
try vertices.ensureUnusedCapacity(self.alloc, text.len);
|
||||
defer vertices.deinit(self.alloc);
|
||||
|
||||
var indices: std.ArrayListUnmanaged([6]u32) = .{};
|
||||
try indices.ensureUnusedCapacity(self.alloc, text.len);
|
||||
defer indices.deinit(self.alloc);
|
||||
|
||||
var curx: f32 = x;
|
||||
for (text) |c| {
|
||||
for (text) |c, i| {
|
||||
if (ftgl.texture_font_get_glyph(self.font, &c)) |glyph_ptr| {
|
||||
const glyph = glyph_ptr.*;
|
||||
const kerning = 0; // for now
|
||||
@ -137,17 +141,21 @@ pub fn render(
|
||||
|
||||
std.log.info("CHAR ch={} x0={} y0={} x1={} y1={}", .{ c, x0, y0, x1, y1 });
|
||||
|
||||
const vert = [6][9]f32{
|
||||
const vert = [4][9]f32{
|
||||
.{ x0, y0, 0, s0, t0, r, g, b, a },
|
||||
.{ x0, y1, 0, s0, t1, r, g, b, a },
|
||||
.{ x1, y1, 0, s1, t1, r, g, b, a },
|
||||
.{ x0, y0, 0, s0, t0, r, g, b, a },
|
||||
.{ x1, y1, 0, s1, t1, r, g, b, a },
|
||||
.{ x1, y0, 0, s1, t0, r, g, b, a },
|
||||
};
|
||||
|
||||
vertices.appendAssumeCapacity(vert);
|
||||
|
||||
const idx = @intCast(u32, 4 * i);
|
||||
indices.appendAssumeCapacity([6]u32{
|
||||
idx, idx + 1, idx + 2, // 0, 1, 2
|
||||
idx, idx + 2, idx + 3, // 0, 2, 3
|
||||
});
|
||||
|
||||
curx += glyph.advance_x;
|
||||
}
|
||||
}
|
||||
@ -163,6 +171,8 @@ pub fn render(
|
||||
const vao = try gl.VertexArray.create();
|
||||
defer vao.destroy();
|
||||
try vao.bind();
|
||||
|
||||
// Array buffer
|
||||
const vbo = try gl.Buffer.create();
|
||||
defer vbo.destroy();
|
||||
var binding = try vbo.bind(.ArrayBuffer);
|
||||
@ -172,7 +182,15 @@ pub fn render(
|
||||
try binding.attribute(1, 2, [9]f32, 3);
|
||||
try binding.attribute(2, 4, [9]f32, 5);
|
||||
|
||||
try gl.drawArrays(gl.c.GL_TRIANGLES, 0, @intCast(c_int, vertices.items.len * 6));
|
||||
// Element buffer
|
||||
const ebo = try gl.Buffer.create();
|
||||
defer ebo.destroy();
|
||||
var ebobinding = try ebo.bind(.ElementArrayBuffer);
|
||||
defer ebobinding.unbind();
|
||||
try ebobinding.setData(indices.items, .DynamicDraw);
|
||||
|
||||
//try gl.drawArrays(gl.c.GL_TRIANGLES, 0, @intCast(c_int, vertices.items.len * 6));
|
||||
try gl.drawElements(gl.c.GL_TRIANGLES, @intCast(c_int, indices.items.len * 6), gl.c.GL_UNSIGNED_INT, 0);
|
||||
try gl.VertexArray.unbind();
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ id: c.GLuint,
|
||||
/// Enum for possible binding targets.
|
||||
pub const Target = enum(c_uint) {
|
||||
ArrayBuffer = c.GL_ARRAY_BUFFER,
|
||||
ElementArrayBuffer = c.GL_ELEMENT_ARRAY_BUFFER,
|
||||
_,
|
||||
};
|
||||
|
||||
@ -40,9 +41,6 @@ pub const Binding = struct {
|
||||
usage: Usage,
|
||||
) !void {
|
||||
const info = dataInfo(data);
|
||||
std.log.info("SET DATA {}", .{
|
||||
info.size,
|
||||
});
|
||||
c.glBufferData(@enumToInt(b.target), info.size, info.ptr, @enumToInt(usage));
|
||||
try errors.getError();
|
||||
}
|
||||
|
@ -14,6 +14,12 @@ pub fn drawArrays(mode: c.GLenum, first: c.GLint, count: c.GLsizei) !void {
|
||||
try errors.getError();
|
||||
}
|
||||
|
||||
pub fn drawElements(mode: c.GLenum, count: c.GLsizei, typ: c.GLenum, offset: usize) !void {
|
||||
const offsetPtr = if (offset == 0) null else @intToPtr(*const anyopaque, offset);
|
||||
c.glDrawElements(mode, count, typ, offsetPtr);
|
||||
try errors.getError();
|
||||
}
|
||||
|
||||
pub fn viewport(x: c.GLint, y: c.GLint, width: c.GLsizei, height: c.GLsizei) !void {
|
||||
c.glViewport(x, y, width, height);
|
||||
}
|
||||
|
Reference in New Issue
Block a user