mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
build: add glslang
This commit is contained in:
@ -643,6 +643,10 @@ fn addDeps(
|
|||||||
.optimize = step.optimize,
|
.optimize = step.optimize,
|
||||||
.@"enable-libpng" = true,
|
.@"enable-libpng" = true,
|
||||||
});
|
});
|
||||||
|
const glslang_dep = b.dependency("glslang", .{
|
||||||
|
.target = step.target,
|
||||||
|
.optimize = step.optimize,
|
||||||
|
});
|
||||||
const mach_glfw_dep = b.dependency("mach_glfw", .{
|
const mach_glfw_dep = b.dependency("mach_glfw", .{
|
||||||
.target = step.target,
|
.target = step.target,
|
||||||
.optimize = step.optimize,
|
.optimize = step.optimize,
|
||||||
@ -718,6 +722,7 @@ fn addDeps(
|
|||||||
fontconfig_dep.module("fontconfig"),
|
fontconfig_dep.module("fontconfig"),
|
||||||
);
|
);
|
||||||
step.addModule("freetype", freetype_dep.module("freetype"));
|
step.addModule("freetype", freetype_dep.module("freetype"));
|
||||||
|
step.addModule("glslang", glslang_dep.module("glslang"));
|
||||||
step.addModule("harfbuzz", harfbuzz_dep.module("harfbuzz"));
|
step.addModule("harfbuzz", harfbuzz_dep.module("harfbuzz"));
|
||||||
step.addModule("xev", libxev_dep.module("xev"));
|
step.addModule("xev", libxev_dep.module("xev"));
|
||||||
step.addModule("pixman", pixman_dep.module("pixman"));
|
step.addModule("pixman", pixman_dep.module("pixman"));
|
||||||
@ -743,6 +748,10 @@ fn addDeps(
|
|||||||
try static_libs.append(tracy_dep.artifact("tracy").getEmittedBin());
|
try static_libs.append(tracy_dep.artifact("tracy").getEmittedBin());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Glslang
|
||||||
|
step.linkLibrary(glslang_dep.artifact("glslang"));
|
||||||
|
try static_libs.append(glslang_dep.artifact("glslang").getEmittedBin());
|
||||||
|
|
||||||
// Dynamic link
|
// Dynamic link
|
||||||
if (!static) {
|
if (!static) {
|
||||||
step.addIncludePath(freetype_dep.path(""));
|
step.addIncludePath(freetype_dep.path(""));
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
.cimgui = .{ .path = "./pkg/cimgui" },
|
.cimgui = .{ .path = "./pkg/cimgui" },
|
||||||
.fontconfig = .{ .path = "./pkg/fontconfig" },
|
.fontconfig = .{ .path = "./pkg/fontconfig" },
|
||||||
.freetype = .{ .path = "./pkg/freetype" },
|
.freetype = .{ .path = "./pkg/freetype" },
|
||||||
|
.glslang = .{ .path = "./pkg/glslang" },
|
||||||
.harfbuzz = .{ .path = "./pkg/harfbuzz" },
|
.harfbuzz = .{ .path = "./pkg/harfbuzz" },
|
||||||
.libpng = .{ .path = "./pkg/libpng" },
|
.libpng = .{ .path = "./pkg/libpng" },
|
||||||
.macos = .{ .path = "./pkg/macos" },
|
.macos = .{ .path = "./pkg/macos" },
|
||||||
|
35
src/App.zig
35
src/App.zig
@ -73,6 +73,41 @@ pub fn create(
|
|||||||
};
|
};
|
||||||
errdefer app.surfaces.deinit(alloc);
|
errdefer app.surfaces.deinit(alloc);
|
||||||
|
|
||||||
|
// TODO: remove this temporary crap
|
||||||
|
// const glslang = @import("glslang");
|
||||||
|
// try glslang.init();
|
||||||
|
// {
|
||||||
|
// const c = glslang.c;
|
||||||
|
// const glsl_input: c.glslang_input_t = .{
|
||||||
|
// .language = c.GLSLANG_SOURCE_GLSL,
|
||||||
|
// .stage = c.GLSLANG_STAGE_FRAGMENT,
|
||||||
|
// .client = c.GLSLANG_CLIENT_VULKAN,
|
||||||
|
// .client_version = c.GLSLANG_TARGET_VULKAN_1_2,
|
||||||
|
// .target_language = c.GLSLANG_TARGET_SPV,
|
||||||
|
// .target_language_version = c.GLSLANG_TARGET_SPV_1_5,
|
||||||
|
// .code = @embedFile("temp.frag"),
|
||||||
|
// .default_version = 100,
|
||||||
|
// .default_profile = c.GLSLANG_NO_PROFILE,
|
||||||
|
// .force_default_version_and_profile = 0,
|
||||||
|
// .forward_compatible = 0,
|
||||||
|
// .messages = c.GLSLANG_MSG_DEFAULT_BIT,
|
||||||
|
// .resource = c.glslang_default_resource(),
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// const shader = try glslang.Shader.create(&glsl_input);
|
||||||
|
// defer shader.delete();
|
||||||
|
// try shader.preprocess(&glsl_input);
|
||||||
|
// try shader.parse(&glsl_input);
|
||||||
|
//
|
||||||
|
// const program = try glslang.Program.create();
|
||||||
|
// defer program.delete();
|
||||||
|
// program.addShader(shader);
|
||||||
|
// try program.link(c.GLSLANG_MSG_SPV_RULES_BIT | c.GLSLANG_MSG_VULKAN_RULES_BIT);
|
||||||
|
// program.spirvGenerate(c.GLSLANG_STAGE_FRAGMENT);
|
||||||
|
// const size = program.spirvGetSize();
|
||||||
|
// log.warn("SPIRV PROGRAM size={d}", .{size});
|
||||||
|
// }
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
84
src/temp.frag
Normal file
84
src/temp.frag
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#version 430 core
|
||||||
|
|
||||||
|
layout(binding = 0) 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;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout(binding = 0) uniform sampler2D iChannel0;
|
||||||
|
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); }
|
||||||
|
|
||||||
|
// Loosely based on postprocessing shader by inigo quilez, License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
|
||||||
|
|
||||||
|
vec2 curve(vec2 uv)
|
||||||
|
{
|
||||||
|
uv = (uv - 0.5) * 2.0;
|
||||||
|
uv *= 1.1;
|
||||||
|
uv.x *= 1.0 + pow((abs(uv.y) / 5.0), 2.0);
|
||||||
|
uv.y *= 1.0 + pow((abs(uv.x) / 4.0), 2.0);
|
||||||
|
uv = (uv / 2.0) + 0.5;
|
||||||
|
uv = uv *0.92 + 0.04;
|
||||||
|
return uv;
|
||||||
|
}
|
||||||
|
void mainImage( out vec4 fragColor, in vec2 fragCoord )
|
||||||
|
{
|
||||||
|
vec2 q = fragCoord.xy / iResolution.xy;
|
||||||
|
vec2 uv = q;
|
||||||
|
uv = curve( uv );
|
||||||
|
vec3 oricol = texture( iChannel0, vec2(q.x,q.y) ).xyz;
|
||||||
|
vec3 col;
|
||||||
|
float x = sin(0.3*iTime+uv.y*21.0)*sin(0.7*iTime+uv.y*29.0)*sin(0.3+0.33*iTime+uv.y*31.0)*0.0017;
|
||||||
|
|
||||||
|
col.r = texture(iChannel0,vec2(x+uv.x+0.001,uv.y+0.001)).x+0.05;
|
||||||
|
col.g = texture(iChannel0,vec2(x+uv.x+0.000,uv.y-0.002)).y+0.05;
|
||||||
|
col.b = texture(iChannel0,vec2(x+uv.x-0.002,uv.y+0.000)).z+0.05;
|
||||||
|
col.r += 0.08*texture(iChannel0,0.75*vec2(x+0.025, -0.027)+vec2(uv.x+0.001,uv.y+0.001)).x;
|
||||||
|
col.g += 0.05*texture(iChannel0,0.75*vec2(x+-0.022, -0.02)+vec2(uv.x+0.000,uv.y-0.002)).y;
|
||||||
|
col.b += 0.08*texture(iChannel0,0.75*vec2(x+-0.02, -0.018)+vec2(uv.x-0.002,uv.y+0.000)).z;
|
||||||
|
|
||||||
|
col = clamp(col*0.6+0.4*col*col*1.0,0.0,1.0);
|
||||||
|
|
||||||
|
float vig = (0.0 + 1.0*16.0*uv.x*uv.y*(1.0-uv.x)*(1.0-uv.y));
|
||||||
|
col *= vec3(pow(vig,0.3));
|
||||||
|
|
||||||
|
col *= vec3(0.95,1.05,0.95);
|
||||||
|
col *= 2.8;
|
||||||
|
|
||||||
|
float scans = clamp( 0.35+0.35*sin(3.5*iTime+uv.y*iResolution.y*1.5), 0.0, 1.0);
|
||||||
|
|
||||||
|
float s = pow(scans,1.7);
|
||||||
|
col = col*vec3( 0.4+0.7*s) ;
|
||||||
|
|
||||||
|
col *= 1.0+0.01*sin(110.0*iTime);
|
||||||
|
if (uv.x < 0.0 || uv.x > 1.0)
|
||||||
|
col *= 0.0;
|
||||||
|
if (uv.y < 0.0 || uv.y > 1.0)
|
||||||
|
col *= 0.0;
|
||||||
|
|
||||||
|
col*=1.0-0.65*vec3(clamp((mod(fragCoord.x, 2.0)-1.0)*2.0,0.0,1.0));
|
||||||
|
|
||||||
|
float comp = smoothstep( 0.1, 0.9, sin(iTime) );
|
||||||
|
|
||||||
|
// Remove the next line to stop cross-fade between original and postprocess
|
||||||
|
// col = mix( col, oricol, comp );
|
||||||
|
|
||||||
|
fragColor = vec4(col,1.0);
|
||||||
|
}
|
Reference in New Issue
Block a user