Ports the terminal-independent half of ZIG/src/renderer (OpenGL only): - opengl/*: buffers, frames, pipelines, render passes, samplers, targets, textures and the OpenGL GraphicsAPI backend on top of glow; the GTK GLArea glue is replaced by a get_proc_address loader closure - the GLSL shaders, copied verbatim and embedded; uniform/vertex structs as bytemuck Pod types with std140 offsets asserted in tests - shadertoy custom shaders converted with naga (GLSL in -> validate -> GLSL 430 out) instead of glslang + spirv-cross - size (screen/grid/cell/padding math), cursor style logic, backend health, options and message types The crate opts into unsafe_code = "deny"; unsafe glow calls live only in opengl/gl.rs. A headless EGL integration test builds every pipeline and the converted shadertoy shaders on Mesa and reads back rendered pixels. Note: Zig's shadertoy Uniforms order the selection background/foreground colors opposite to the GLSL block (likely an upstream bug); kept as in Zig for parity and recorded in the notes. Deferred to the next renderer pass: generic, cell, image, link, row, State, Thread, Overlay (need terminal render state). Test Plan: - cargo test -p ghostty-renderer (33 tests incl. tests/egl_headless.rs)
53 lines
1.6 KiB
GLSL
53 lines
1.6 KiB
GLSL
#version 430 core
|
|
|
|
layout(binding = 1, std140) uniform Globals {
|
|
uniform vec3 iResolution;
|
|
uniform float iTime;
|
|
uniform float iTimeDelta;
|
|
uniform float iFrameRate;
|
|
uniform int iFrame;
|
|
uniform float iChannelTime[4];
|
|
uniform vec3 iChannelResolution[4];
|
|
uniform vec4 iMouse;
|
|
uniform vec4 iDate;
|
|
uniform float iSampleRate;
|
|
uniform vec4 iCurrentCursor;
|
|
uniform vec4 iPreviousCursor;
|
|
uniform vec4 iCurrentCursorColor;
|
|
uniform vec4 iPreviousCursorColor;
|
|
uniform int iCurrentCursorStyle;
|
|
uniform int iPreviousCursorStyle;
|
|
uniform int iCursorVisible;
|
|
uniform float iTimeCursorChange;
|
|
uniform float iTimeFocus;
|
|
uniform int iFocus;
|
|
uniform vec3 iPalette[256];
|
|
uniform vec3 iBackgroundColor;
|
|
uniform vec3 iForegroundColor;
|
|
uniform vec3 iCursorColor;
|
|
uniform vec3 iCursorText;
|
|
uniform vec3 iSelectionForegroundColor;
|
|
uniform vec3 iSelectionBackgroundColor;
|
|
};
|
|
|
|
#define CURSORSTYLE_BLOCK 0
|
|
#define CURSORSTYLE_BLOCK_HOLLOW 1
|
|
#define CURSORSTYLE_BAR 2
|
|
#define CURSORSTYLE_UNDERLINE 3
|
|
#define CURSORSTYLE_LOCK 4
|
|
|
|
layout(binding = 0) uniform sampler2D iChannel0;
|
|
|
|
// These are unused currently by Ghostty:
|
|
// layout(binding = 1) uniform sampler2D iChannel1;
|
|
// layout(binding = 2) uniform sampler2D iChannel2;
|
|
// layout(binding = 3) uniform sampler2D iChannel3;
|
|
|
|
layout(location = 0) in vec4 gl_FragCoord;
|
|
layout(location = 0) out vec4 _fragColor;
|
|
|
|
#define texture2D texture
|
|
|
|
void mainImage( out vec4 fragColor, in vec2 fragCoord );
|
|
void main() { mainImage (_fragColor, gl_FragCoord.xy); }
|