MCPcopy Create free account
hub / github.com/XboxNahida/ghostty-blackhole-main

github.com/XboxNahida/ghostty-blackhole-main @v1.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.0 ↗ · + Follow
2,294 symbols 4,869 edges 39 files 690 documented · 30% updated 4d agov1.1 · 2026-07-01★ 3843 open issues

Browse by type

Functions 2,033 Types & classes 261
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Black Hole — Windows 桌面黑洞屏保

demo

基于 Eric Bruneton 黑洞着色器的 Windows 桌面黑洞可视化程序。捕获桌面画面,实时渲染史瓦西黑洞的引力透镜、吸积盘、光子环等相对论效应。

技术细节(空闲检测原理、双进程设计、WGC vs DXGI、D3D11 实验、已知问题等)请参见 TECHNICAL.md


目前新功能还在开发中,新UI已完成, 旧UI仍可使用。 发布版本在release.zip里。 作者最近比较忙,更新会比较慢。

运行要求

操作系统

要求 说明
最低 Windows 10 1803+ (build 17134),64 位
推荐 Windows 11 22H2+ (build 22621)

Win10 1803 是 WGC (Windows.Graphics.Capture) 的最低版本。Win11 22H2 额外支持 IsBorderRequired(false) 进一步抑制黄边框。

显卡兼容性

当前渲染路径:WGC 桌面捕获 → CPU 回读 → OpenGL 3.3 渲染。WGC 内部依赖 D3D11,但程序本身不做 D3D11 渲染。

桌面独显

厂商 系列 兼容性 备注
NVIDIA GeForce GTX 400 系列及以上 (2010+) ✅ 完全支持 Fermi 架构起支持 OpenGL 3.3
AMD Radeon HD 7000 系列及以上 (2012+, GCN) ✅ 完全支持 GCN 第一代起支持
Intel Arc 独显系列 ✅ 完全支持

集显(核显)

厂商 系列 兼容性 备注
Intel HD Graphics 4000 及以上 (2012+, Ivy Bridge) ✅ 可用 OpenGL 驱动偶有小问题,ImGui 已内置 Intel 兼容处理
Intel UHD / Iris Xe (2017+) ✅ 良好
AMD Radeon Vega 核显 (Ryzen 2000+) ✅ 良好
AMD RDNA2/3 核显 (Radeon 680M/780M) ✅ 良好

笔记本混合显卡(双显卡)

类型 兼容性 说明
NVIDIA Optimus(Intel 核显 + NVIDIA 独显) ✅ 可用 CPU 回读路径天然隔离 GPU 差异,不依赖 GPU 间纹理共享
AMD Switchable Graphics(核显 + AMD 独显) ✅ 可用 同上
纯集显笔记本 ✅ 良好 单一 GPU,无需协调

混合显卡下 D3D11 设备默认创建在核显上(WGC 内部需要),OpenGL 渲染在系统默认 GPU。数据经 CPU 中转,不依赖跨 GPU 纹理共享。

运行时依赖

程序 依赖
blackhole.exe 无额外依赖,静态链接
appBlakholeUI.exe Qt 6.8+ 运行时 DLL(release/ 已附带)

编译要求

工具 版本 用途
MSYS2 最新 UCRT64 编译环境
GCC 12+ (mingw-w64-ucrt-x86_64-gcc) C++17 编译
CMake 3.20+ 构建系统
GLFW3 3.3+ (pacman -S mingw-w64-ucrt-x86_64-glfw) 窗口/输入(ImGui 用)
Qt 6 6.8+ (qt6-base, qt6-declarative) 仅 Blakhole_UI 需要

快速开始

  1. 双击 Blakhole_UI\release\appBlakholeUI.exe(release\blackhole.exe为旧版UI)
  2. 配置参数 → 点击 "启动"
  3. 黑洞在空闲时自动显示,动鼠标/键盘即消失
  4. 右下角托盘图标 → 右键可退出

两种模式

模式 行为
始终显示 黑洞常驻桌面
空闲检测 空闲 N 秒后显示,活跃时自动隐藏

空闲时间在配置页面设置(默认 300 秒)。支持三层检测:D3D 全屏检测、窗口尺寸检测、音视频进程名单匹配。


配置参数

  • 14 个可调参数:色温、倾角、旋转、半径、不透明度、多普勒、光束指数、亮度增益、条纹对比度、缠绕紧度、旋转速度、曝光度、星空亮度
  • 16 个预设,支持复制/粘贴、上移/下移排序
  • 三种播放模式:顺序 / 循环 / 随机

项目结构

双程序架构

程序 技术栈 用途
blackhole.exe C++17 / OpenGL+WGL / ImGui 原始实现:桌面黑洞渲染 + ImGui 配置面板
Blakhole_UI/appBlakholeUI.exe Qt6 QML / OpenGL FBO 新版 UI:可视化配置 + 实时预览 + 进程管理

源代码模块

✅ 活跃模块(正在使用)

文件 功能
src/main.cpp 主入口,双进程架构、shader 编译、uniform 注入、空闲检测
src/win32_gl.cpp/h Win32+WGL 原生窗口(替代 GLFW)
src/capture_wgc.cpp/h WGC 桌面捕获(默认捕获方案
src/gl_texture.cpp/h D3D11→OpenGL 纹理上传
src/gui_config.cpp/h ImGui 配置面板(旧版 UI)
src/imgui/ Dear ImGui 库
blackhole.glsl 核心黑洞着色器(运行时字符串替换)
shaders/vert.glsl OpenGL 顶点着色器
shaders/frag_desktop_header.glsl 桌面版 uniform 声明
shaders/frag_preview_header.glsl 预览版 uniform 声明
shaders/blackhole_preview.glsl 预览版着色器(Blakhole_UI FBO 用)

🔒 预留/实验模块(完整实现,当前未启用)

文件 说明
src/capture_dxgi.cpp/h DXGI Duplication 备用捕获。存在 INVALID_CALL 问题,保留供未来修复
src/d3d11_renderer.cpp/h D3D11 渲染器。因 WGC 纹理池化+GPU 异步导致画面冻结,已回退
src/win32_window.cpp/h 纯 Win32 窗口(配合 D3D11 路径)
src/renderer_interface.h IRenderer 抽象接口(OpenGL/D3D11 双路径预留)
src/texture_source.h ITextureSource 纹理源抽象(面向未来扩展)
shaders/blackhole.hlsl HLSL 翻译(D3D11 路径)
shaders/fullscreen_vs.hlsl D3D11 全屏顶点着色器

目录说明

目录 内容
src/ blackhole.exe 源代码
shaders/ GLSL/HLSL 着色器
Blakhole_UI/ Qt6/QML 新版配置面板(独立 CMake 项目)
Doc/ 技术文档
build/ blackhole.exe 构建输出
release/ 发布目录(exe + DLL + shaders)
.vscode/ VS Code 配置

编译

# 使用 MSYS2 UCRT64
.\build_blackhole.ps1

# 或 CMake
cmake -B build -G "MinGW Makefiles"
cmake --build build

D3D11 路径可通过 CMakeLists.txt 取消注释以下行启用:

target_compile_definitions(blackhole PRIVATE BLACKHOLE_USE_D3D11)

技术栈

组件 技术 说明
桌面捕获 Windows Graphics Capture (WGC) 通过 D3D11 设备捕获 DWM 合成快照
纹理传输 CPU 回读 (Staging → Map → glTexSubImage2D) 跨厂商兼容,隔离 GPU 差异
渲染 OpenGL 3.3 + WGL 原生 Win32 窗口,全屏顶层覆盖
配置面板(旧) ImGui blackhole.exe 内置
配置面板(新) Qt 6 + QML Blakhole_UI,独立进程,含实时 FBO 预览
构建 MinGW-w64 (UCRT64) + CMake

DXGI Duplication 和 D3D11 渲染器代码保留在仓库中,当前未启用。详见 TECHNICAL.md

灵感来源

Eric Bruneton's black hole shader (BSD-3-Clause)

License

MIT — 见 LICENSE

Core symbols most depended-on inside this repo

Shape

Method 1,319
Function 714
Class 181
Enum 80

Languages

C++100%

Modules by API surface

src/imgui/imgui.cpp607 symbols
src/imgui/imgui_internal.h345 symbols
src/imgui/imgui_widgets.cpp294 symbols
src/imgui/imgui.h201 symbols
src/imgui/imgui_draw.cpp175 symbols
src/imgui/imstb_truetype.h151 symbols
Blakhole_UI/core/blackholecore.cpp141 symbols
src/imgui/imgui_tables.cpp100 symbols
Blakhole_UI/core/blackholepreviewfbo.cpp42 symbols
src/imgui/imgui_impl_glfw.cpp37 symbols
src/imgui/imstb_textedit.h32 symbols
src/main.cpp19 symbols

For agents

$ claude mcp add ghostty-blackhole-main \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page