mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
75 lines
2.4 KiB
Zig
75 lines
2.4 KiB
Zig
//! Renderer implementation and utilities. The renderer is responsible for
|
|
//! taking the internal screen state and turning into some output format,
|
|
//! usually for a screen.
|
|
//!
|
|
//! The renderer is closely tied to the windowing system which usually
|
|
//! has to prepare the window for the given renderer using system-specific
|
|
//! APIs. The renderers in this package assume that the renderer is already
|
|
//! setup (OpenGL has a context, Vulkan has a surface, etc.)
|
|
|
|
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
const build_config = @import("build_config.zig");
|
|
const WasmTarget = @import("os/wasm/target.zig").Target;
|
|
|
|
const cursor = @import("renderer/cursor.zig");
|
|
const message = @import("renderer/message.zig");
|
|
const size = @import("renderer/size.zig");
|
|
pub const shadertoy = @import("renderer/shadertoy.zig");
|
|
pub const Metal = @import("renderer/Metal.zig");
|
|
pub const OpenGL = @import("renderer/OpenGL.zig");
|
|
pub const WebGL = @import("renderer/WebGL.zig");
|
|
pub const Options = @import("renderer/Options.zig");
|
|
pub const Thread = @import("renderer/Thread.zig");
|
|
pub const State = @import("renderer/State.zig");
|
|
pub const CursorStyle = cursor.Style;
|
|
pub const Message = message.Message;
|
|
pub const Size = size.Size;
|
|
pub const Coordinate = size.Coordinate;
|
|
pub const CellSize = size.CellSize;
|
|
pub const ScreenSize = size.ScreenSize;
|
|
pub const GridSize = size.GridSize;
|
|
pub const Padding = size.Padding;
|
|
pub const cursorStyle = cursor.style;
|
|
|
|
/// Possible implementations, used for build options.
|
|
pub const Impl = enum {
|
|
opengl,
|
|
metal,
|
|
webgl,
|
|
|
|
pub fn default(
|
|
target: std.Target,
|
|
wasm_target: WasmTarget,
|
|
) Impl {
|
|
if (target.cpu.arch == .wasm32) {
|
|
return switch (wasm_target) {
|
|
.browser => .webgl,
|
|
};
|
|
}
|
|
|
|
if (target.isDarwin()) return .metal;
|
|
return .opengl;
|
|
}
|
|
};
|
|
|
|
/// The implementation to use for the renderer. This is comptime chosen
|
|
/// so that every build has exactly one renderer implementation.
|
|
pub const Renderer = switch (build_config.renderer) {
|
|
.metal => Metal,
|
|
.opengl => OpenGL,
|
|
.webgl => WebGL,
|
|
};
|
|
|
|
/// The health status of a renderer. These must be shared across all
|
|
/// renderers even if some states aren't reachable so that our API users
|
|
/// can use the same enum for all renderers.
|
|
pub const Health = enum(c_int) {
|
|
healthy = 0,
|
|
unhealthy = 1,
|
|
};
|
|
|
|
test {
|
|
@import("std").testing.refAllDecls(@This());
|
|
}
|