@hicccc77/electron-liquid-glass 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Low-latency native liquid glass backdrop panels for Electron apps, powered by DX
|
|
|
14
14
|
|
|
15
15
|
- **真折射,非毛玻璃**:圆角矩形 SDF 透镜位移,边缘可见清晰的背景折射与色散,中心通透
|
|
16
16
|
- **6ms 级响应**:DXGI 零拷贝拿 GPU 桌面纹理,D3D11 渲染,DirectComposition 直接上屏,全程不落 CPU
|
|
17
|
-
-
|
|
17
|
+
- **深度节能**:全链路事件驱动 + 增量——桌面不动不画、脏区与面板不相交不画、桌面镜像按脏区增量维护(GPU 拷贝量正比实际变化面积而非全屏)、自家面板 Present 产生的 DWM 回声脏区被识别丢弃(不会自激重绘)、无面板自动休眠释放采集会话
|
|
18
18
|
- **自适应反色支持**:内置亮度带采样(均值色 + luma p15/p85),重绘驱动、与画面同帧推送(上限 ~60Hz),驱动上层文字明暗自适应
|
|
19
19
|
- **z 序锚定**:面板自动钉在指定 Electron 窗口正下方,并周期性重申(防其他置顶窗口插队)
|
|
20
20
|
- **防自采集回环**:`WDA_EXCLUDEFROMCAPTURE` 把面板从一切屏幕捕获中排除
|
|
@@ -124,22 +124,35 @@ if (glass.isSupported()) {
|
|
|
124
124
|
|---|---|---|
|
|
125
125
|
| 感知位置滞后(中位 / p90) | 77ms / 89ms | **6ms / 6ms** |
|
|
126
126
|
| 满载 CPU 增量(主+GPU+渲染进程合计) | ~1.5% | **~0.3%** |
|
|
127
|
-
| 静止桌面开销 | 持续采集出帧 | **0
|
|
127
|
+
| 静止桌面开销 | 持续采集出帧 | **0 渲染 / 0 拷贝**(事件驱动) |
|
|
128
128
|
| 首帧启动 | ~80-300ms(getUserMedia 协商) | **<150ms**(面板常驻复用后为 0) |
|
|
129
129
|
| 40 轮通知压测 | — | 面板 1 建 81 复用,内存零增长,零异常 |
|
|
130
130
|
|
|
131
131
|
测量方法:同帧差分法——同一帧屏幕采集内对比玻璃呈现内容与背景真值条纹的计数差,两个时间戳均来自绘制时刻,结果与探针自身延迟无关。
|
|
132
132
|
|
|
133
|
+
### v0.2.0 能耗优化(内部计数器实测,1080p@180Hz 压力场景)
|
|
134
|
+
|
|
135
|
+
| 场景 | v0.1.x | v0.2.0 |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| 桌面静止时的面板重绘 | 178 次/秒(Present 回声自激) | **0** |
|
|
138
|
+
| 桌面静止时的镜像拷贝带宽 | 1421 MB/s(每帧全屏) | **3.5 MB/s**(406×) |
|
|
139
|
+
| 无关区域动画时的面板重绘 | 179 次/秒 | **0**(脏区不相交不画) |
|
|
140
|
+
| 无关区域动画时的拷贝带宽 | 1423 MB/s | **350 MB/s**(正比脏区面积) |
|
|
141
|
+
| 亮度采样 GPU 同步停顿 | 458 µs/次 | **2.3 µs/次**(延后一拍读取) |
|
|
142
|
+
|
|
143
|
+
三项根因修复:① 被 `WDA_EXCLUDEFROMCAPTURE` 排除的面板自身 Present 后,DWM 仍会把面板矩形报告为 DDA 脏区(内容实际未变),形成「重绘→报脏→再重绘」自激循环,现按矩形近似相等识别并丢弃回声脏区;② 桌面镜像从每帧全屏 `CopyResource` 改为脏区包围盒增量拷贝;③ 亮度带 staging 回读从渲染同 tick 的立即 `Map`(强制等 GPU 跑完整条管线)改为下一 tick 读取上帧拷贝,等待归零且时效不变(≤8ms)。
|
|
144
|
+
|
|
133
145
|
## 源码结构
|
|
134
146
|
|
|
135
147
|
```
|
|
136
148
|
src/
|
|
137
149
|
├── addon.cc N-API 绑定层(参数解析、亮度回调线程安全投递)
|
|
138
150
|
├── session.cc/h 调度中枢:独占工作线程跑「采集→渲染→上屏」闭环、命令队列、节能策略
|
|
139
|
-
├── capture.cc/h DXGI Desktop Duplication 采集(零拷贝 GPU 纹理 +
|
|
151
|
+
├── capture.cc/h DXGI Desktop Duplication 采集(零拷贝 GPU 纹理 + 脏区 + 自回声过滤)
|
|
140
152
|
├── renderer.cc/h D3D11 三趟玻璃管线 + 亮度带直方图采样
|
|
141
153
|
├── panel.cc/h DirectComposition 无重定向位图窗口、淡入淡出、z 序锚定、捕获排除
|
|
142
154
|
├── d3d_utils.cc/h 设备创建辅助
|
|
155
|
+
├── stats.h 内部性能计数器(`_stats` 诊断导出,基准测试用)
|
|
143
156
|
└── addon_stub.cc 非 Windows 桩(isSupported() = false)
|
|
144
157
|
```
|
|
145
158
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hicccc77/electron-liquid-glass",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Low-latency native liquid glass backdrop panels for Electron apps (Windows: DXGI Desktop Duplication + D3D11 + DirectComposition)",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
Binary file
|