aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/src/renderer/opengl/Target.zig
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-04-04 19:22:04 +0300
committerCan Celik <ogulcancelik@gmail.com>2026-04-05 01:23:06 +0300
commit41dd733ca7123c9ac4bfc6c781697a660e95b052 (patch)
tree3fc91815ca139ef2e0b281bba0abda4ef15175f4 /vendor/libghostty-vt/src/renderer/opengl/Target.zig
parent55c138263e190a1e79d4b997bfb9397306c0ec1f (diff)
feat: finish ghostty pane backend integration
Diffstat (limited to 'vendor/libghostty-vt/src/renderer/opengl/Target.zig')
-rw-r--r--vendor/libghostty-vt/src/renderer/opengl/Target.zig60
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/src/renderer/opengl/Target.zig b/vendor/libghostty-vt/src/renderer/opengl/Target.zig
new file mode 100644
index 00000000..5c6d818f
--- /dev/null
+++ b/vendor/libghostty-vt/src/renderer/opengl/Target.zig
@@ -0,0 +1,60 @@
+//! Represents a render target.
+//!
+//! In this case, an OpenGL renderbuffer-backed framebuffer.
+const Self = @This();
+
+const std = @import("std");
+const Allocator = std.mem.Allocator;
+const gl = @import("opengl");
+
+const log = std.log.scoped(.opengl);
+
+/// Options for initializing a Target
+pub const Options = struct {
+ /// Desired width
+ width: usize,
+ /// Desired height
+ height: usize,
+
+ /// Internal format for the renderbuffer.
+ internal_format: gl.Texture.InternalFormat,
+};
+
+/// The underlying `gl.Framebuffer` instance.
+framebuffer: gl.Framebuffer,
+
+/// The underlying `gl.Renderbuffer` instance.
+renderbuffer: gl.Renderbuffer,
+
+/// Current width of this target.
+width: usize,
+/// Current height of this target.
+height: usize,
+
+pub fn init(opts: Options) !Self {
+ const rbo = try gl.Renderbuffer.create();
+ const bound_rbo = try rbo.bind();
+ defer bound_rbo.unbind();
+ try bound_rbo.storage(
+ opts.internal_format,
+ @intCast(opts.width),
+ @intCast(opts.height),
+ );
+
+ const fbo = try gl.Framebuffer.create();
+ const bound_fbo = try fbo.bind(.framebuffer);
+ defer bound_fbo.unbind();
+ try bound_fbo.renderbuffer(.color0, rbo);
+
+ return .{
+ .framebuffer = fbo,
+ .renderbuffer = rbo,
+ .width = opts.width,
+ .height = opts.height,
+ };
+}
+
+pub fn deinit(self: *Self) void {
+ self.framebuffer.destroy();
+ self.renderbuffer.destroy();
+}