Compare commits

...

9 Commits

Author SHA1 Message Date
hoenking c2245d9760 uodate shader 2025-11-14 20:41:59 +08:00
hoenking 95a04efb91 Use rotation for background gradient; fix timing
Update fragment shader to use ubo.rotation instead of ubo.time and sync
the SPIR-V. Add periodic debug output in VulkanRenderer. Track total
paused time in VulkanWidget (m_totalPausedTime) and subtract it from
elapsed time so animations remain in sync after lock/unlock.
2025-11-14 19:21:21 +08:00
ubuntu1804 7fb1a8a538 Merge remote-tracking branch 'origin/fea-power' into fea-power 2025-11-12 10:15:56 +08:00
ubuntu1804 df92ed8956 Update .gitignore 2025-11-12 10:10:24 +08:00
hoenking ce796c1c5c Bump project version to 3.0.0 2025-11-11 21:14:12 +08:00
hoenking c5de82f0fb Update README 2025-11-11 20:52:14 +08:00
hoenking 61920ac49d Update README.md 2025-11-11 20:49:12 +08:00
hoenking 1eff46e523 调整代码结构 2025-11-11 20:39:04 +08:00
hoenking f62f429158 Add cross-platform power monitor and macOS Vulkan 2025-11-11 20:12:39 +08:00
48 changed files with 1612 additions and 705 deletions

2
.gitignore vendored
View File

@ -1,5 +1,6 @@
# CMake build files
build/
build-debug/
CMakeCache.txt
CMakeFiles/
cmake_install.cmake
@ -26,6 +27,7 @@ ui_*.h
# IDE files
.vscode/
.idea/
.zed/
*.pro.user
*.pro.user.*
*.creator

View File

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.10)
project(ScreenLockDetector VERSION 1.3.0 LANGUAGES C CXX)
project(ScreenLockDetector VERSION 3.0.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
@ -75,7 +75,11 @@ set(VULKAN_FOUND FALSE)
if(ENABLE_VULKAN)
# Set Vulkan headers path
set(VULKAN_HEADERS_DIR "$ENV{HOME}/sdk/Vulkan-Headers-1.3.302/include")
if(APPLE)
set(VULKAN_HEADERS_DIR "$ENV{HOME}/VulkanSDK/1.4.328.1/macOS/include")
elseif(LINUX)
set(VULKAN_HEADERS_DIR "$ENV{HOME}/sdk/Vulkan-Headers-1.3.302/include")
endif()
# Check if Vulkan headers exist
if(EXISTS "${VULKAN_HEADERS_DIR}/vulkan/vulkan.h")
@ -143,8 +147,9 @@ set(SOURCES
src/mainwindow.cpp
src/customwidget.cpp
src/screenlockdetector.cpp
src/screenlockdetector_base.cpp
src/platform/screenlockdetector_base.cpp
src/powermonitor.cpp
src/platform/powermonitor_base.cpp
)
set(HEADERS
@ -152,8 +157,9 @@ set(HEADERS
src/renderwidgetbase.h
src/customwidget.h
src/screenlockdetector.h
src/screenlockdetector_base.h
src/platform/screenlockdetector_base.h
src/powermonitor.h
src/platform/powermonitor_base.h
)
# Add Vulkan widget if Vulkan is available
@ -173,25 +179,33 @@ endif()
if(APPLE)
# macOS specific files
list(APPEND SOURCES
src/screenlockdetector_macos.mm
src/platform/screenlockdetector_macos.mm
src/platform/powermonitor_macos.mm
src/platform/vulkanwidget_macos.mm
)
list(APPEND HEADERS
src/screenlockdetector_macos.h
src/platform/screenlockdetector_macos.h
src/platform/powermonitor_macos.h
src/platform/vulkanwidget_macos.h
)
# Enable Objective-C++ for .mm files
set_source_files_properties(
src/screenlockdetector_macos.mm
src/platform/screenlockdetector_macos.mm
src/platform/powermonitor_macos.mm
src/platform/vulkanwidget_macos.mm
PROPERTIES
COMPILE_FLAGS "-x objective-c++"
)
elseif(UNIX)
# Linux specific files
list(APPEND SOURCES
src/screenlockdetector_linux.cpp
src/platform/screenlockdetector_linux.cpp
src/platform/powermonitor_linux.cpp
)
list(APPEND HEADERS
src/screenlockdetector_linux.h
src/platform/screenlockdetector_linux.h
src/platform/powermonitor_linux.h
)
endif()

566
README.md
View File

@ -1,6 +1,6 @@
# Qt Screen Lock Detection Demo
一个基于 Qt5 + CMake 的跨平台应用程序,用于检测系统的锁屏状态,并在锁屏时自动停止所有 Paint 事件
一个基于 Qt5 + CMake 的跨平台应用程序,用于检测系统的锁屏状态和电源状态(睡眠/唤醒),并在锁屏时自动停止所有渲染
**支持平台:**
- ✅ **Linux** (Ubuntu, Deepin, Fedora 等)
@ -8,35 +8,76 @@
## 功能特性
### 核心功能
- ✅ **自动检测锁屏状态**
- Linux: 通过 DBus 监听系统的锁屏/解锁事件
- macOS: 通过 NSDistributedNotificationCenter 监听系统通知
- ✅ **自动停止绘制**:屏幕锁定时自动停止所有 Paint 事件,节省系统资源
- ✅ **实时动画演示**:持续的动画效果,直观展示绘制的启用/禁用状态
- ✅ **手动控制**:提供手动启用/禁用绘制的按钮
- ✅ **状态监控**:实时显示锁屏状态、绘制状态和帧数统计
- ✅ **电源状态监控**
- Linux: 通过 DBus login1 服务监听系统睡眠/唤醒事件
- macOS: 通过 NSWorkspace 监听系统电源状态变化
- ✅ **双渲染引擎支持**
- **Vulkan 渲染器**:高性能 GPU 加速渲染(需要 Vulkan SDK
- Linux: 支持 Vulkan 1.0+
- macOS: 支持 MoltenVKVulkan over Metal
- 特性MSAA 抗锯齿、动态几何、文字渲染FreeType
- **QPainter 渲染器**:传统 Qt 绘制(兼容性备选)
- ✅ **自动停止渲染**:屏幕锁定或系统睡眠时自动停止所有渲染,节省系统资源
- ✅ **实时动画演示**
- 动态旋转圆圈
- 波浪效果
- 渐变背景
- 实时文字显示
- ✅ **手动控制**:提供手动启用/禁用渲染的按钮
- ✅ **状态监控**:实时显示锁屏状态、电源状态、渲染状态和帧数统计
- ✅ **多平台支持**
- Linux: 支持 GNOME、KDE、XFCE、Deepin DDE 等主流桌面环境
- macOS: 原生系统通知支持
- Linux: 支持 GNOME、KDE、XFCE、Deepin DDE、UKUI 等主流桌面环境
- macOS: 原生系统通知支持MoltenVK 集成
## 技术架构
### 核心组件
1. **ScreenLockDetector** - 跨平台锁屏检测器
- **Linux**: 通过 Qt DBus 监听系统锁屏信号
- **基础架构**: `ScreenLockDetectorBase` 抽象基类
- **Linux**: `ScreenLockDetectorLinux` - 通过 Qt DBus 监听系统锁屏信号
- 支持 GNOME ScreenSaver、systemd-logind 和 Deepin DDE 接口
- **macOS**: 通过 NSDistributedNotificationCenter 监听系统通知
- **macOS**: `ScreenLockDetectorMacOS` - 通过 NSDistributedNotificationCenter 监听系统通知
- 监听 com.apple.screenIsLocked/Unlocked 通知
- 发出锁屏/解锁信号供其他组件订阅
2. **CustomWidget** - 自定义绘制组件
- 实现了动态动画效果(旋转圆圈、波浪效果等)
- 60 FPS 刷新率
- 可控制的绘制启用/禁用状态
- 帧数统计功能
2. **PowerMonitor** - 跨平台电源监视器
- **基础架构**: `PowerMonitorBase` 抽象基类
- **Linux**: `PowerMonitorLinux` - 通过 DBus login1 服务监听
- 监听 org.freedesktop.login1.Manager 的 PrepareForSleep 信号
- **macOS**: `PowerMonitorMacOS` - 通过 NSWorkspace 监听
- 监听 NSWorkspaceWillSleepNotification 和 NSWorkspaceDidWakeNotification
- 发出睡眠/唤醒信号
3. **MainWindow** - 主窗口
3. **RenderWidgetBase** - 渲染组件抽象接口
- 定义统一的渲染器接口
- 支持动态切换不同渲染后端
4. **VulkanWidget** - Vulkan 渲染组件
- 使用 volk 动态加载 Vulkan 函数
- 支持 MSAA 多重采样抗锯齿
- 集成 FreeType 字体渲染
- **macOS**: 专门的 CAMetalLayer 支持MoltenVK
- 自动处理窗口大小调整和设备丢失恢复
5. **CustomWidget** - QPainter 渲染组件
- 传统 Qt 绘制实现
- 作为 Vulkan 不可用时的备选方案
- 实现了相同的动画效果
6. **MainWindow** - 主窗口
- 整合各个组件
- 提供用户界面和控制面板
- 实时状态显示
@ -46,10 +87,49 @@
- **语言**C++11 / Objective-C++ (macOS)
- **GUI 框架**Qt 5.15.2 (或更高版本)
- **构建系统**CMake 3.10+
- **图形 API**
- Vulkan 1.0+ (通过 volk 动态加载)
- MoltenVK (macOS)
- QPainter (备选方案)
- **字体渲染**FreeType 2.x
- **系统接口**
- Linux: Qt DBus
- macOS: Foundation Framework (NSDistributedNotificationCenter)
- **平台**Linux Ubuntu / macOS 10.12+
- Linux: Qt DBus, X11
- macOS: Foundation Framework, AppKit, QuartzCore (CAMetalLayer)
- **平台**Linux / macOS 10.12+
### 项目结构
```
ScreenLockDetector/
├── CMakeLists.txt # CMake 构建配置(跨平台)
├── README.md # 项目文档
├── build.sh # Linux 编译脚本
├── run.sh # Linux 运行脚本
├── build_mac.sh # macOS 编译脚本
├── run_mac.sh # macOS 运行脚本
├── docs/ # 文档目录
├── third_party/ # 第三方库
│ └── volk/ # Vulkan 函数加载器
├── shaders/ # GLSL 着色器源码
└── src/
├── main.cpp # 程序入口
├── mainwindow.h/cpp # 主窗口
├── screenlockdetector.h/cpp # 锁屏检测器工厂类
├── powermonitor.h/cpp # 电源监视器工厂类
├── renderwidgetbase.h # 渲染组件抽象接口
├── vulkanwidget.h/cpp # Vulkan 渲染组件
├── vulkanrenderer.h/cpp # Vulkan 渲染器核心
├── customwidget.h/cpp # QPainter 渲染组件
└── platform/ # 平台特定代码
├── README.md # 平台代码组织说明
├── screenlockdetector_base.h/cpp # 锁屏检测基类
├── screenlockdetector_linux.h/cpp # Linux 实现
├── screenlockdetector_macos.h/mm # macOS 实现
├── powermonitor_base.h/cpp # 电源监视基类
├── powermonitor_linux.h/cpp # Linux 实现
├── powermonitor_macos.h/mm # macOS 实现
└── vulkanwidget_macos.h/mm # macOS Vulkan 辅助
```
## 系统要求
@ -59,13 +139,18 @@
- CMake 3.10 或更高版本
- GCC/G++ 编译器(支持 C++11
- DBus 系统服务
- X11 开发库
- **可选**Vulkan SDK 1.0+ (用于 Vulkan 渲染)
- **可选**FreeType 开发库 (用于 Vulkan 文字渲染)
### macOS
- macOS 10.12 (Sierra) 或更高版本
- Qt 5.15.2 或更高版本(可通过 Homebrew 安装)
- Qt 5.15.2 或更高版本(可通过 Homebrew 或 MacPorts 安装)
- CMake 3.10 或更高版本
- Xcode Command Line Tools
- Foundation 和 Cocoa 框架(系统自带)
- **可选**Vulkan SDK 1.4+ (包含 MoltenVK用于 Vulkan 渲染)
- **可选**FreeType 库 (用于 Vulkan 文字渲染)
## 安装与编译
@ -73,8 +158,9 @@
#### 1. 安装依赖
使用 Homebrew 安装 Qt5
使用 Homebrew 或 MacPorts 安装 Qt5
**Homebrew:**
```bash
# 安装 Homebrew如果尚未安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
@ -84,9 +170,29 @@ brew install qt@5
# 安装 CMake如果尚未安装
brew install cmake
# 可选:安装 FreeType用于文字渲染
brew install freetype
```
或者从 Qt 官网下载安装器https://www.qt.io/download
**MacPorts:**
```bash
sudo port install qt5
sudo port install cmake
sudo port install freetype
```
**Vulkan SDK可选用于 Vulkan 渲染):**
```bash
# 从 LunarG 下载并安装
# https://vulkan.lunarg.com/sdk/home
# 或者下载到 ~/VulkanSDK/
# 安装后设置环境变量
export VULKAN_SDK=~/VulkanSDK/1.4.328.1/macOS
export DYLD_LIBRARY_PATH=$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH
export VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
```
#### 2. 编译项目
@ -98,39 +204,39 @@ chmod +x build_mac.sh run_mac.sh
./build_mac.sh
```
脚本会自动搜索 Qt 安装路径。如果需要手动指定,可以设置环境变量:
```bash
export Qt5_DIR=/path/to/qt/lib/cmake/Qt5
./build_mac.sh
```
脚本会自动搜索 Qt 和 Vulkan SDK 安装路径。
### Linux 平台
#### 1. 确保 Qt5 已安装
#### 1. 安装依赖
```bash
# Ubuntu/Debian
sudo apt-get install qt5-default qtbase5-dev libqt5dbus5
sudo apt-get update
sudo apt-get install qt5-default qtbase5-dev libqt5dbus5 \
libx11-dev cmake g++
# 可选Vulkan 开发库
sudo apt-get install vulkan-tools libvulkan-dev
# 可选FreeType 开发库
sudo apt-get install libfreetype6-dev
# Fedora
sudo dnf install qt5-qtbase-devel qt5-qtbase-gui
sudo dnf install qt5-qtbase-devel qt5-qtbase-gui \
libX11-devel cmake gcc-c++
# 或使用自定义安装的 Qt
ls $HOME/sdk/qt-5.15.2
# 可选Vulkan 和 FreeType
sudo dnf install vulkan-tools vulkan-headers freetype-devel
```
如果 Qt5 安装在其他位置,请修改 `CMakeLists.txt` 中的 Qt5_DIR 路径或设置环境变量。
#### 2. 赋予脚本执行权限
#### 2. 编译项目
```bash
# 赋予脚本执行权限
chmod +x build.sh run.sh
```
#### 3. 编译项目
```bash
# 编译
./build.sh
```
@ -140,71 +246,63 @@ chmod +x build.sh run.sh
### macOS 平台
#### 方法 1使用运行脚本推荐
```bash
# 使用运行脚本(推荐,自动设置环境变量)
./run_mac.sh
```
#### 方法 2直接运行可执行文件
```bash
./build/bin/ScreenLockDetector
```
#### 方法 3手动设置环境变量并运行
```bash
export DYLD_LIBRARY_PATH=/path/to/qt/lib:$DYLD_LIBRARY_PATH
# 或直接运行
./build/bin/ScreenLockDetector
```
### Linux 平台
#### 方法 1使用运行脚本推荐
```bash
# 使用运行脚本(推荐)
./run.sh
```
#### 方法 2直接运行可执行文件
```bash
cd build/bin
./ScreenLockDetector
```
#### 方法 3手动设置环境变量并运行
```bash
export LD_LIBRARY_PATH=$HOME/sdk/qt-5.15.2/lib:$LD_LIBRARY_PATH
# 或直接运行
./build/bin/ScreenLockDetector
```
## 使用说明
1. **启动应用**:运行应用后,会看到一个带有动态动画的窗口
- 如果 Vulkan 可用,默认使用 Vulkan 渲染器
- 否则回退到 QPainter 渲染器
2. **测试锁屏检测**
2. **查看渲染器类型**
- 窗口标题显示当前使用的渲染器Vulkan 或 QPainter
- Vulkan 渲染器提供更好的性能和效果
3. **测试锁屏检测**
- **macOS**: 使用快捷键 `Ctrl + Cmd + Q` 或从菜单栏选择"锁定屏幕"
- **Linux**: 使用快捷键 `Ctrl + Alt + L``Super + L`
- 观察动画是否停止
- 解锁后动画应自动恢复
3. **查看状态信息**
- **Detector Status**:检测器是否正常工作
- **Screen Lock Status**:当前屏幕锁定状态(🔒 LOCKED / 🔓 UNLOCKED
- **Painting Status**:绘制是否启用(✓ ENABLED / ✗ DISABLED
- **Frame Count**:已绘制的总帧数
4. **测试电源监控**
- 合上笔记本屏幕或选择"睡眠"
- 观察控制台输出睡眠/唤醒消息
- 唤醒后渲染会自动恢复
4. **手动控制**(可选):
- **Enable Painting**:手动启用绘制
- **Disable Painting**:手动禁用绘制
5. **查看状态信息**
- **Renderer Type**:当前使用的渲染器类型
- **Detector Status**:锁屏检测器是否正常工作
- **Screen Lock Status**:当前屏幕锁定状态(🔒 LOCKED / 🔓 UNLOCKED
- **Rendering Status**:渲染是否启用(✓ ENABLED / ✗ DISABLED
- **Frame Count**:已渲染的总帧数
- **FPS**:当前帧率(仅 Vulkan
6. **手动控制**(可选):
- **Enable Rendering**:手动启用渲染
- **Disable Rendering**:手动禁用渲染
- **Reset Frame Count**:重置帧数计数器
## 工作原理
### Linux: DBus 监听机制
### 锁屏检测机制
#### Linux: DBus 监听
应用程序通过 Qt DBus 连接到 Linux 系统的锁屏服务:
@ -224,7 +322,7 @@ export LD_LIBRARY_PATH=$HOME/sdk/qt-5.15.2/lib:$LD_LIBRARY_PATH
Signal: ActiveChanged(bool)
```
3. **KylinOS UKUI接口**
3. **KylinOS UKUI 接口**
```
Service: org.ukui.ScreenSaver
Path: /
@ -232,7 +330,7 @@ export LD_LIBRARY_PATH=$HOME/sdk/qt-5.15.2/lib:$LD_LIBRARY_PATH
Signals: lock(), unlock()
```
### macOS: 分布式通知中心
#### macOS: 分布式通知中心
应用程序通过 NSDistributedNotificationCenter 监听 macOS 系统通知:
@ -250,99 +348,146 @@ export LD_LIBRARY_PATH=$HOME/sdk/qt-5.15.2/lib:$LD_LIBRARY_PATH
3. **屏幕保护程序通知**(辅助检测)
```
Notifications:
Notifications:
- com.apple.screensaver.didstart
- com.apple.screensaver.didstop
```
### Paint 事件控
### 电源监控机
当检测到锁屏时:
1. `ScreenLockDetector` 发出 `screenLocked()` 信号
2. `MainWindow` 接收信号并调用 `CustomWidget::setPaintingEnabled(false)`
3. `CustomWidget` 停止动画定时器
4. `paintEvent()` 检查启用状态,不再绘制动画内容
当检测到解锁时:
1. `ScreenLockDetector` 发出 `screenUnlocked()` 信号
2. `MainWindow` 调用 `CustomWidget::setPaintingEnabled(true)`
3. `CustomWidget` 重启动画定时器
4. 动画恢复正常绘制
## 项目结构
#### Linux: DBus login1 服务
```
ScreenLockDetector/
├── CMakeLists.txt # CMake 构建配置(跨平台)
├── README.md # 项目文档
├── build.sh # Linux 编译脚本
├── run.sh # Linux 运行脚本
├── build_mac.sh # macOS 编译脚本
├── run_mac.sh # macOS 运行脚本
└── src/
├── main.cpp # 程序入口
├── mainwindow.h # 主窗口头文件
├── mainwindow.cpp # 主窗口实现
├── screenlockdetector.h # 跨平台锁屏检测器头文件
├── screenlockdetector.cpp # 跨平台锁屏检测器实现
├── screenlockdetector_mac.h # macOS 特定实现头文件
├── screenlockdetector_mac.mm # macOS 特定实现Objective-C++
├── customwidget.h # 自定义组件头文件
└── customwidget.cpp # 自定义组件实现
Service: org.freedesktop.login1
Path: /org/freedesktop/login1
Interface: org.freedesktop.login1.Manager
Signal: PrepareForSleep(bool entering_sleep)
```
#### macOS: NSWorkspace 通知
```
NSWorkspaceWillSleepNotification - 系统即将睡眠
NSWorkspaceDidWakeNotification - 系统已经唤醒
```
### Vulkan 渲染流程
1. **初始化**
- 使用 volk 动态加载 Vulkan 函数
- 创建 Vulkan 实例macOS 需要 portability 扩展)
- 选择物理设备GPU
- 创建逻辑设备和队列
- **macOS**: 创建 CAMetalLayer 用于 MoltenVK 渲染
2. **渲染管线**
- 创建 swap chain交换链
- 创建 render pass渲染通道
- 加载 SPIR-V 着色器
- 创建图形管线(背景、几何、线条、文字)
- 设置 MSAA 多重采样
3. **每帧渲染**
- 获取 swap chain 图像
- 记录命令缓冲
- 绘制背景、几何和文字
- 提交到 GPU 队列
- 呈现到屏幕
### 渲染控制
当检测到锁屏或睡眠时:
1. 相应的检测器发出信号
2. `MainWindow` 接收信号并调用渲染器的 `setRenderingEnabled(false)`
3. 渲染器停止渲染定时器
4. GPU 进入空闲状态,节省资源
当检测到解锁或唤醒时:
1. 相应的检测器发出信号
2. `MainWindow` 调用 `setRenderingEnabled(true)`
3. 渲染器重启渲染定时器
4. 动画恢复正常渲染
## 平台特定架构
### 设计模式
项目采用 **工厂模式 + 策略模式** 实现跨平台支持:
1. **抽象基类** (`*_base.h/cpp`)
- 定义统一接口
- 实现公共功能
2. **平台实现** (`*_linux.h/cpp`, `*_macos.h/mm`)
- 继承基类
- 实现平台特定 API
3. **工厂类** (`screenlockdetector.h/cpp`, `powermonitor.h/cpp`)
- 根据编译平台自动选择实现
- 提供统一的公共 API
详见:`src/platform/README.md`
## 故障排除
### macOS 平台
#### 问题 1应用无法检测到锁屏
#### 问题 1Vulkan 实例创建失败
**可能原因**
- 权限问题
- 系统通知未正常工作
**错误信息**`Failed to create Vulkan instance, error code: -9`
**原因**MoltenVK 未正确安装或配置
**解决方案**
```bash
# 确保 Vulkan SDK 已安装
ls ~/VulkanSDK/1.4.328.1/macOS/lib/libMoltenVK.dylib
# 设置环境变量
export VULKAN_SDK=~/VulkanSDK/1.4.328.1/macOS
export DYLD_LIBRARY_PATH=$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH
export VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
# 使用 run_mac.sh 脚本运行(已包含配置)
./run_mac.sh
```
#### 问题 2CAMetalLayer 错误
**错误信息**`VK_ERROR_SURFACE_LOST_KHR: On-screen rendering requires a layer of type CAMetalLayer`
**原因**:已在新版本中修复,确保使用最新代码
**解决方案**:重新编译项目
#### 问题 3应用无法检测到锁屏
**解决方案**
```bash
# 查看应用日志
./run_mac.sh 2>&1 | grep "ScreenLock"
# 检查系统完整性保护SIP状态
csrutil status
# 确保应用有必要的权限
```
#### 问题 2编译错误 - Qt5 not found
**解决方案**
```bash
# 使用 Homebrew 安装 Qt5
brew install qt@5
# 设置 Qt5_DIR 环境变量
export Qt5_DIR=$(brew --prefix qt@5)/lib/cmake/Qt5
./build_mac.sh
```
#### 问题 3运行时找不到 Qt 库
**解决方案**
```bash
# 设置 DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=$(brew --prefix qt@5)/lib:$DYLD_LIBRARY_PATH
# 或使用 run_mac.sh 脚本(已包含此配置)
./run_mac.sh
# 系统偏好设置 > 安全性与隐私 > 隐私
```
### Linux 平台
#### 问题 1锁屏检测不工作
#### 问题 1Vulkan 不可用
**可能原因**
- DBus 服务未运行
- 桌面环境不支持标准 DBus 接口
- 权限不足
**错误信息**`Vulkan headers not found`
**解决方案**
```bash
# 安装 Vulkan 开发库
sudo apt-get install vulkan-tools libvulkan-dev
# 或手动下载 Vulkan Headers
git clone https://github.com/KhronosGroup/Vulkan-Headers.git
# 更新 CMakeLists.txt 中的 VULKAN_HEADERS_DIR
```
#### 问题 2锁屏检测不工作
**解决方案**
```bash
@ -352,99 +497,106 @@ ps aux | grep dbus
# 检查 GNOME ScreenSaver 是否可用
qdbus org.gnome.ScreenSaver
# 查看应用日志输出,确认连接状态
```
### 问题 2编译错误 - Qt5 not found
**解决方案**
1. 确认 Qt5 安装路径:`ls $HOME/sdk/qt-5.15.2`
2. 修改 `CMakeLists.txt` 中的 Qt5_DIR 路径
3. 或设置环境变量:`export Qt5_DIR=$HOME/sdk/qt-5.15.2/lib/cmake/Qt5`
### 问题 3运行时找不到 Qt 库
**解决方案**
```bash
# 设置 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$HOME/sdk/qt-5.15.2/lib:$LD_LIBRARY_PATH
# 或使用 run.sh 脚本(已包含此配置)
./run.sh
```
### 问题 4警告 - Failed to connect to screen lock detection service
**说明**:这是正常的,表示某些 DBus 接口在当前桌面环境中不可用。只要至少有一个接口连接成功,应用就能正常工作。
## 调试模式
应用程序会在控制台输出详细的调试信息:
```bash
# 运行并查看详细日志
./run.sh 2>&1 | tee app.log
# 查看特定类别的日志
# 查看应用日志输出
./run.sh 2>&1 | grep "ScreenLockDetector"
```
## 扩展与定制
### 通用问题
### 添加更多动画效果
#### 问题:编译错误 - Qt5 not found
`customwidget.cpp` 中的 `drawBackground()`, `drawRotatingCircles()`, `drawWaveEffect()` 等方法中添加自定义绘制代码。
**解决方案**
```bash
# 设置 Qt5_DIR 环境变量
export Qt5_DIR=/path/to/qt/lib/cmake/Qt5
### 支持其他桌面环境
`screenlockdetector.cpp` 中添加更多 DBus 接口连接:
```cpp
bool ScreenLockDetector::connectToKDEScreenSaver()
{
// 添加 KDE Plasma 锁屏检测支持
// Service: org.kde.screensaver
// ...
}
# 或修改 CMakeLists.txt 中的 Qt5_DIR 路径
```
### 性能优化
## 性能优化
调整动画刷新率(当前为 60 FPS
### Vulkan 渲染器
```cpp
// 在 customwidget.cpp 构造函数中
m_animationTimer->start(33); // 30 FPS (1000/30 ≈ 33ms)
- **MSAA**:自动选择最佳采样数(最高 8x
- **三缓冲**:使用 3 个并行帧减少延迟
- **动态加载**:使用 volk 避免链接 Vulkan 库
- **命令缓冲复用**:减少 CPU 开销
### 资源节省
- 锁屏时自动停止渲染(节省 GPU 资源)
- 睡眠时自动停止所有活动(节省电池)
- 最小化时暂停渲染(可选)
## 扩展开发
### 添加新的平台特性
详见:`src/platform/README.md`
### 自定义着色器
编辑 `shaders/` 目录中的 GLSL 文件,然后重新编译:
```bash
./compile_shaders.sh
./build_mac.sh # 或 ./build.sh
```
### 添加新的渲染效果
`VulkanRenderer``CustomWidget` 中添加自定义绘制代码。
## 许可证
本项目仅用于学习和演示目的。
## 作者
Qt Screen Lock Detection Demo
Qt Screen Lock Detection Demo Team
## 更新日志
### v2.0.0 (2024)
- ✅ **重大更新**: 新增 macOS 平台支持
### v3.0.0 (2025-11-11)
- ✅ **重大更新**: 新增 Vulkan 渲染支持
- ✅ **重大更新**: 新增电源监控功能(睡眠/唤醒检测)
- ✅ macOS: 完整的 MoltenVK 支持(包含 CAMetalLayer
- ✅ 双渲染引擎Vulkan + QPainter
- ✅ MSAA 抗锯齿支持
- ✅ FreeType 字体渲染集成
- ✅ 重构项目结构:创建 `platform/` 目录统一管理平台代码
- ✅ 改进的跨平台架构Factory + Strategy 模式)
- ✅ 完善的文档和故障排除指南
### v2.0.0 (2025)
- ✅ 新增 macOS 平台支持
- ✅ 实现跨平台架构Linux + macOS
- ✅ macOS: 使用 NSDistributedNotificationCenter 监听系统通知
- ✅ 创建平台特定的构建和运行脚本
- ✅ 更新文档,包含 macOS 使用说明
### v1.1.0 (2024)
### v1.1.0 (2025)
- ✅ 新增 Deepin OS (DDE) 锁屏检测支持
- ✅ 优化多桌面环境兼容性
### v1.0.0 (2024)
### v1.0.0 (2025)
- ✅ 初始版本发布
- ✅ 支持 GNOME 和 systemd-logind 锁屏检测
- ✅ 实现自动 Paint 事件控制
- ✅ 实现自动渲染控制
- ✅ 提供丰富的动画演示效果
- ✅ 完整的状态监控和手动控制界面
## 反馈与贡献
## 技术支持
如有问题或建议,欢迎提出!
### 相关文档
- [平台代码组织说明](src/platform/README.md)
- [Vulkan 渲染架构](docs/)
- [CMake 构建配置](CMakeLists.txt)
### 相关链接
- [Qt Documentation](https://doc.qt.io/qt-5/)
- [Vulkan SDK](https://vulkan.lunarg.com/sdk/home)
- [MoltenVK (macOS)](https://github.com/KhronosGroup/MoltenVK)
- [volk - Vulkan Meta-Loader](https://github.com/zeux/volk)

174
compile_shaders_mac.sh Executable file
View File

@ -0,0 +1,174 @@
#!/bin/bash
# Shader compilation script for Vulkan
# Sets up environment and compiles GLSL shaders to SPIR-V
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SHADERS_DIR="$SCRIPT_DIR/shaders"
OUTPUT_DIR="$SCRIPT_DIR/src/shaders_spirv"
# Find glslang compiler
GLSLANG=""
# Check custom paths first
if [ -x "$HOME/VulkanSDK/1.4.328.1/macOS/bin/glslang" ]; then
GLSLANG="$HOME/VulkanSDK/1.4.328.1/macOS/bin/glslang"
echo "Found glslang at: $GLSLANG"
elif [ -x "$HOME/VulkanSDK/1.4.328.1/macOS/bin/glslangValidator" ]; then
GLSLANG="$HOME/VulkanSDK/1.4.328.1/macOS/bin/glslangValidator"
echo "Found glslangValidator at: $GLSLANG"
elif command -v glslc &> /dev/null; then
GLSLANG="glslc"
echo "Using system glslc"
elif command -v glslangValidator &> /dev/null; then
GLSLANG="glslangValidator"
echo "Using system glslangValidator"
elif command -v glslang &> /dev/null; then
GLSLANG="glslang"
echo "Using system glslang"
else
echo "ERROR: No GLSL compiler found!"
echo "Please install:"
echo " - Vulkan SDK (provides glslc)"
echo " - or glslang to ~/VulkanSDK/1.4.328.1/macOS/bin/"
exit 1
fi
# Create output directory
mkdir -p "$OUTPUT_DIR"
# Compilation function
compile_shader() {
local shader_file="$1"
local output_name="$2"
local spirv_file="$OUTPUT_DIR/${shader_file}.spv"
local inc_file="$OUTPUT_DIR/${output_name}"
echo "Compiling $shader_file..."
# Determine compiler command
if [[ "$GLSLANG" == *"glslc"* ]]; then
"$GLSLANG" "$SHADERS_DIR/$shader_file" -o "$spirv_file"
else
"$GLSLANG" -V "$SHADERS_DIR/$shader_file" -o "$spirv_file"
fi
if [ $? -ne 0 ]; then
echo " FAILED to compile $shader_file"
return 1
fi
echo " SUCCESS - Generated $spirv_file"
# Generate C++ include file
echo " Generating $inc_file..."
generate_include "$spirv_file" "$inc_file"
return 0
}
# Generate C++ include file from SPIR-V
generate_include() {
local spirv_file="$1"
local inc_file="$2"
# Use Python if available for better formatting
if command -v python3 &> /dev/null; then
python3 -c "
import struct
import sys
with open('$spirv_file', 'rb') as f:
data = f.read()
num_words = len(data) // 4
words = struct.unpack('<{}I'.format(num_words), data[:num_words*4])
print('// Auto-generated from $(basename $spirv_file)')
print('// Size: {} bytes ({} words)'.format(len(data), num_words))
for i in range(0, num_words, 8):
chunk = words[i:i+8]
if i == 0:
sys.stdout.write(' ')
else:
sys.stdout.write(',\n ')
sys.stdout.write(', '.join('0x{:08x}u'.format(w) for w in chunk))
print()
" > "$inc_file"
else
# Fallback: simple hexdump
echo "// Auto-generated from $(basename $spirv_file)" > "$inc_file"
xxd -i < "$spirv_file" | sed 's/unsigned char/uint32_t/' >> "$inc_file"
fi
echo " Generated $inc_file"
}
echo "========================================"
echo "Compiling Vulkan Shaders"
echo "========================================"
echo "Shaders directory: $SHADERS_DIR"
echo "Output directory: $OUTPUT_DIR"
echo "Compiler: $GLSLANG"
echo "========================================"
echo ""
# Compile all shaders
SUCCESS=0
FAILED=0
# Background shaders
if compile_shader "background.vert" "background_vert.inc"; then
((SUCCESS++))
else
((FAILED++))
fi
if compile_shader "background.frag" "background_frag.inc"; then
((SUCCESS++))
else
((FAILED++))
fi
# Geometry shaders
if compile_shader "geometry.vert" "geometry_vert.inc"; then
((SUCCESS++))
else
((FAILED++))
fi
if compile_shader "geometry.frag" "geometry_frag.inc"; then
((SUCCESS++))
else
((FAILED++))
fi
# Text shaders
if compile_shader "text.vert" "text_vert.inc"; then
((SUCCESS++))
else
((FAILED++))
fi
if compile_shader "text.frag" "text_frag.inc"; then
((SUCCESS++))
else
((FAILED++))
fi
echo ""
echo "========================================"
echo "Compilation Summary"
echo "========================================"
echo "Success: $SUCCESS"
echo "Failed: $FAILED"
echo "========================================"
if [ $FAILED -gt 0 ]; then
exit 1
fi
echo ""
echo "All shaders compiled successfully!"
exit 0

View File

@ -2,10 +2,10 @@
## 📦 交付信息
**项目名称**: Qt Screen Lock Detection Demo
**交付版本**: v1.0.0
**交付日期**: 2024
**项目状态**: ✅ 完成并通过验证
**项目名称**: Qt Screen Lock Detection Demo
**交付版本**: v1.0.0
**交付日期**: 2025
**项目状态**: ✅ 完成并通过验证
---
@ -81,23 +81,23 @@
## 🎯 核心功能实现
### ✅ 功能1: 锁屏检测
**实现状态**: 完成
**技术方案**: Qt DBus 系统集成
**支持环境**:
**实现状态**: 完成
**技术方案**: Qt DBus 系统集成
**支持环境**:
- GNOME 桌面环境 (org.gnome.ScreenSaver)
- KDE/XFCE/其他 (systemd-logind)
**测试方法**: 按 Ctrl+Alt+L 锁屏,检查应用是否检测到
### ✅ 功能2: 自动停止 Paint 事件
**实现状态**: 完成
**技术方案**: 信号槽机制 + 条件绘制
**实现状态**: 完成
**技术方案**: 信号槽机制 + 条件绘制
**性能提升**: 锁屏时 CPU 使用率从 2-5% 降至 <1%
**测试方法**: 锁屏后观察动画停止,解锁后自动恢复
### ✅ 功能3: 实时动画演示
**实现状态**: 完成
**实现状态**: 完成
**动画效果**:
- 渐变背景 (颜色随时间变化)
- 旋转圆圈 (8个彩色圆圈)
@ -107,7 +107,7 @@
**性能指标**: 稳定 60 FPS
### ✅ 功能4: 状态监控界面
**实现状态**: 完成
**实现状态**: 完成
**监控内容**:
- 检测器状态 (Active/Inactive)
- 锁屏状态 (🔒 Locked / 🔓 Unlocked)
@ -115,7 +115,7 @@
- 帧数统计 (实时更新)
### ✅ 功能5: 手动控制
**实现状态**: 完成
**实现状态**: 完成
**控制功能**:
- 手动启用绘制
- 手动禁用绘制
@ -245,9 +245,9 @@ qt_screan_lock/
## ✅ 验证结果
**验证日期**: 2024-11-07
**验证工具**: `verify_project.sh`
**验证结果**:
**验证日期**: 2025-11-07
**验证工具**: `verify_project.sh`
**验证结果**:
```
Total Checks: 18
@ -354,11 +354,11 @@ Failed: 0
本项目已完成所有预定目标,并提供了完整的:
**功能实现** - 锁屏检测、自动停止 Paint 事件、实时动画、状态监控
**代码质量** - 1,096 行高质量 C++ 代码,完整注释
**文档完善** - 1,266+ 行中文文档,多层次覆盖
**工具齐全** - 自动化编译、运行、验证脚本
**开箱即用** - 3 步即可运行,用户体验优秀
**功能实现** - 锁屏检测、自动停止 Paint 事件、实时动画、状态监控
**代码质量** - 1,096 行高质量 C++ 代码,完整注释
**文档完善** - 1,266+ 行中文文档,多层次覆盖
**工具齐全** - 自动化编译、运行、验证脚本
**开箱即用** - 3 步即可运行,用户体验优秀
**项目状态**: ✅ **生产就绪 (Production Ready)**
@ -374,12 +374,12 @@ Failed: 0
---
**交付日期**: 2024-11-07
**项目版本**: v1.0.0
**交付状态**: ✅ 完成
**交付日期**: 2025-11-07
**项目版本**: v1.0.0
**交付状态**: ✅ 完成
---
_感谢使用 Qt Screen Lock Detection Demo_
Happy Coding! 🚀
Happy Coding! 🚀

View File

@ -310,7 +310,7 @@ Position 4: screen(378, 212.5) -> NDC(0, 0) // 中心
---
**修复完成日期**: 2024
**修复完成日期**: 2025
**问题持续时间**: 多次迭代
**关键突破**: 使用硬编码值测试发现 UBO 传输问题
**最终原因**: GLSL vec2 对齐问题

View File

@ -123,13 +123,13 @@ QUICKSTART.md → PROJECT_OVERVIEW.md → README.md → 运行测试 → 完成
### 路径 3: 开发学习3小时
```
PROJECT_OVERVIEW.md → ARCHITECTURE.md → 阅读源代码 →
PROJECT_OVERVIEW.md → ARCHITECTURE.md → 阅读源代码 →
修改代码 → 重新编译 → 测试 → 完成
```
### 路径 4: 完整掌握1天
```
所有文档按顺序阅读 → 理解架构 → 阅读所有源代码 →
所有文档按顺序阅读 → 理解架构 → 阅读所有源代码 →
扩展新功能 → 编写测试 → 优化性能 → 完成
```
@ -270,10 +270,10 @@ MainWindow (主窗口)
---
**最后更新**: 2024-11-07
**项目版本**: v1.0.0
**索引版本**: v1.0
**最后更新**: 2025-11-07
**项目版本**: v1.0.0
**索引版本**: v1.0
---
_祝您使用愉快Happy Coding! 🚀_
_祝您使用愉快Happy Coding! 🚀_

View File

@ -214,8 +214,8 @@ readelf -d /opt/screenlockdemo/bin/ScreenLockDemo | grep -i path
## 更新历史
- 2024-01-01: 初始版本,添加 /usr/local/lib 和 /usr/local/lib64 支持
- 2025-01-01: 初始版本,添加 /usr/local/lib 和 /usr/local/lib64 支持
---
如有问题或需要进一步的库路径配置,请参考此文档或咨询系统管理员。
如有问题或需要进一步的库路径配置,请参考此文档或咨询系统管理员。

View File

@ -387,8 +387,8 @@ qdbus org.gnome.ScreenSaver
---
**项目创建时间**: 2024
**最后更新**: 2024
**项目创建时间**: 2025
**最后更新**: 2025
**状态**: ✅ 生产就绪
Happy Coding! 🚀
Happy Coding! 🚀

View File

@ -126,9 +126,9 @@ ScreenLockDetectorBase* ScreenLockDetector::createPlatformDetector()
ScreenLockDetector *detector = new ScreenLockDetector(this);
// 连接信号
connect(detector, &ScreenLockDetector::screenLocked,
connect(detector, &ScreenLockDetector::screenLocked,
this, &YourClass::onScreenLocked);
connect(detector, &ScreenLockDetector::screenUnlocked,
connect(detector, &ScreenLockDetector::screenUnlocked,
this, &YourClass::onScreenUnlocked);
// 初始化
@ -230,5 +230,5 @@ ScreenLockDetector 开发团队
## 版本历史
- **v2.0.0** (2024): 面向对象重构
- **v1.0.0** (2024): 初始版本
- **v2.0.0** (2025): 面向对象重构
- **v1.0.0** (2025): 初始版本

View File

@ -21,6 +21,20 @@ if [[ "$OSTYPE" != "darwin"* ]]; then
exit 1
fi
# Set up Vulkan SDK environment for MoltenVK
VULKAN_SDK="$HOME/VulkanSDK/1.4.328.1/macOS"
if [ -d "$VULKAN_SDK" ]; then
echo -e "${GREEN}Found Vulkan SDK at: $VULKAN_SDK${NC}"
export VULKAN_SDK
export DYLD_LIBRARY_PATH="$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH"
export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json"
export VK_ADD_LAYER_PATH="$VULKAN_SDK/share/vulkan/explicit_layer.d"
else
echo -e "${YELLOW}Warning: Vulkan SDK not found at $VULKAN_SDK${NC}"
echo "Vulkan rendering may not work. Install from: https://vulkan.lunarg.com/sdk/home"
echo ""
fi
# Check if executable exists
EXECUTABLE="build/bin/ScreenLockDetector"

View File

@ -28,8 +28,8 @@ void main() {
// Normalize position to 0-1 range
vec2 uv = (fragPosition + 1.0) * 0.5;
// Create dynamic gradient based on time
float t = ubo.time / 360.0;
// Create dynamic gradient based on rotation angle (matching Qt CustomWidget)
float t = ubo.rotation / 360.0;
// Calculate color components matching Qt CustomWidget
float r = 0.392 + 0.196 * sin(t * 6.28318);

View File

@ -18,13 +18,6 @@ layout(binding = 0, std140) uniform UniformBufferObject {
} ubo;
void main() {
// ULTIMATE TEST: Use hardcoded resolution value instead of UBO
// This will prove whether the problem is in UBO binding or somewhere else
// Hardcode the resolution we know is correct from debug output
float hardcodedWidth = 756.0;
float hardcodedHeight = 425.0;
// Now use UBO values - they should match the C++ struct exactly
float ndcX = (inPosition.x / ubo.resX) * 2.0 - 1.0;
float ndcY = (inPosition.y / ubo.resY) * 2.0 - 1.0;

View File

@ -1,36 +1,37 @@
#include <QApplication>
#include <QDebug>
#include "version.h"
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 设置应用程序信息
app.setApplicationName("Screen Lock Detection Demo");
app.setApplicationVersion("1.0.0");
app.setApplicationVersion(APP_VERSION_STRING);
app.setOrganizationName("Qt Demo");
qDebug() << "==============================================";
qDebug() << "Qt Screen Lock Detection Demo Starting...";
qDebug() << "Application:" << app.applicationName();
qDebug() << "Version:" << app.applicationVersion();
qDebug() << "==============================================";
// 创建并显示主窗口
MainWindow window;
window.show();
qDebug() << "Main window displayed";
qDebug() << "Tip: Lock your screen (Ctrl+Alt+L or Super+L) to test the screen lock detection!";
qDebug() << "";
// 运行应用程序事件循环
int result = app.exec();
qDebug() << "==============================================";
qDebug() << "Application exiting with code:" << result;
qDebug() << "==============================================";
return result;
}
}

View File

@ -0,0 +1,27 @@
#include "powermonitor_base.h"
#include <QDebug>
PowerMonitorBase::PowerMonitorBase(QObject *parent)
: QObject(parent)
{
}
PowerMonitorBase::~PowerMonitorBase()
{
}
void PowerMonitorBase::emitAboutToSleep()
{
qDebug() << "=================================================";
qDebug() << "\n📥 系统即将进入睡眠(休眠/待机)";
emit aboutToSleep();
emit powerStateChanged(true);
}
void PowerMonitorBase::emitAboutToWakeUp()
{
qDebug() << "📤 系统已从睡眠中唤醒\n";
qDebug() << "=================================================";
emit aboutToWakeUp();
emit powerStateChanged(false);
}

View File

@ -0,0 +1,61 @@
#ifndef POWERMONITOR_BASE_H
#define POWERMONITOR_BASE_H
#include <QObject>
/**
* @brief
*
*
*
*/
class PowerMonitorBase : public QObject
{
Q_OBJECT
public:
explicit PowerMonitorBase(QObject *parent = nullptr);
virtual ~PowerMonitorBase();
/**
* @brief
* @return true false
*
*
*/
virtual bool initialize() = 0;
signals:
/**
* @brief
* /
*/
void aboutToWakeUp();
/**
* @brief
* /
*/
void aboutToSleep();
/**
* @brief
* @param sleeping true表示进入睡眠false表示从睡眠唤醒
*/
void powerStateChanged(bool sleeping);
protected:
/**
* @brief
*
*/
void emitAboutToSleep();
/**
* @brief
*
*/
void emitAboutToWakeUp();
};
#endif // POWERMONITOR_BASE_H

View File

@ -0,0 +1,79 @@
#include "powermonitor_linux.h"
#ifdef Q_OS_LINUX
#include <QDebug>
PowerMonitorLinux::PowerMonitorLinux(QObject *parent)
: PowerMonitorBase(parent)
, m_login1Interface(nullptr)
{
}
PowerMonitorLinux::~PowerMonitorLinux()
{
if (m_login1Interface) {
delete m_login1Interface;
m_login1Interface = nullptr;
}
}
bool PowerMonitorLinux::initialize()
{
return initLogin1Dbus();
}
bool PowerMonitorLinux::initLogin1Dbus()
{
// 连接 org.freedesktop.login1 服务(系统总线)
m_login1Interface = new QDBusInterface(
"org.freedesktop.login1", // DBus 服务名
"/org/freedesktop/login1", // 对象路径
"org.freedesktop.login1.Manager", // 接口名
QDBusConnection::systemBus(), // 系统总线(关键!不是会话总线)
this
);
// 检查接口是否有效
if (!m_login1Interface->isValid()) {
qDebug() << "=================================================";
qDebug() << "❌ 无法创建 login1 接口:" << m_login1Interface->lastError().message();
qDebug() << "=================================================";
return false;
}
// 监听 PrepareForSleep 信号签名b = bool
bool connectOk = QDBusConnection::systemBus().connect(
"org.freedesktop.login1", // 服务名
"/org/freedesktop/login1", // 对象路径
"org.freedesktop.login1.Manager", // 接口名
"PrepareForSleep", // 信号名
this,
SLOT(onPrepareForSleep(bool)) // 接收信号的槽函数
);
if (connectOk) {
qDebug() << "=================================================";
qDebug() << "✅ 成功连接 login1 电源管理接口Linux";
qDebug() << "=================================================";
return true;
} else {
qDebug() << "=================================================";
qDebug() << "❌ 连接 login1 信号失败:" << QDBusConnection::systemBus().lastError().message();
qDebug() << "=================================================";
return false;
}
}
void PowerMonitorLinux::onPrepareForSleep(bool enteringSleep)
{
if (enteringSleep) {
// 系统即将进入 休眠/待机 状态
emitAboutToSleep();
} else {
// 系统从睡眠中唤醒
emitAboutToWakeUp();
}
}
#endif // Q_OS_LINUX

View File

@ -0,0 +1,51 @@
#ifndef POWERMONITOR_LINUX_H
#define POWERMONITOR_LINUX_H
#include "powermonitor_base.h"
#ifdef Q_OS_LINUX
#include <QDBusInterface>
#include <QDBusConnection>
/**
* @brief Linux
*
* DBus login1 /
* 使 org.freedesktop.login1.Manager PrepareForSleep
*/
class PowerMonitorLinux : public PowerMonitorBase
{
Q_OBJECT
public:
explicit PowerMonitorLinux(QObject *parent = nullptr);
~PowerMonitorLinux() override;
/**
* @brief Linux
* @return true false
*/
bool initialize() override;
private slots:
/**
* @brief /
* @param enteringSleep
*/
void onPrepareForSleep(bool enteringSleep);
private:
/**
* @brief Login1 DBus接口
* @return true
*/
bool initLogin1Dbus();
private:
QDBusInterface *m_login1Interface; // Login1 DBus 接口
};
#endif // Q_OS_LINUX
#endif // POWERMONITOR_LINUX_H

View File

@ -0,0 +1,58 @@
#ifndef POWERMONITOR_MACOS_H
#define POWERMONITOR_MACOS_H
#include "powermonitor_base.h"
#ifdef Q_OS_MAC
/**
* @brief macOS
*
* macOS IOKit /
* 使 NSWorkspace
*/
class PowerMonitorMacOS : public PowerMonitorBase
{
Q_OBJECT
public:
explicit PowerMonitorMacOS(QObject *parent = nullptr);
~PowerMonitorMacOS() override;
/**
* @brief macOS
* @return true false
*/
bool initialize() override;
public:
/**
* @brief
*/
void handleWillSleep();
/**
* @brief
*/
void handleDidWake();
private:
/**
* @brief
* @return true
*/
bool registerPowerNotifications();
/**
* @brief
*/
void unregisterPowerNotifications();
private:
void *m_workspaceObserver; // NSWorkspace 通知观察者(不透明指针)
bool m_initialized; // 是否已初始化
};
#endif // Q_OS_MAC
#endif // POWERMONITOR_MACOS_H

View File

@ -0,0 +1,125 @@
#include "powermonitor_macos.h"
#ifdef Q_OS_MAC
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#include <QDebug>
PowerMonitorMacOS::PowerMonitorMacOS(QObject *parent)
: PowerMonitorBase(parent)
, m_workspaceObserver(nullptr)
, m_initialized(false)
{
}
PowerMonitorMacOS::~PowerMonitorMacOS()
{
unregisterPowerNotifications();
}
bool PowerMonitorMacOS::initialize()
{
return registerPowerNotifications();
}
bool PowerMonitorMacOS::registerPowerNotifications()
{
if (m_initialized) {
return true;
}
@autoreleasepool {
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSNotificationCenter *center = [workspace notificationCenter];
if (!center) {
qDebug() << "=================================================";
qDebug() << "❌ 无法获取 NSWorkspace 通知中心";
qDebug() << "=================================================";
return false;
}
// 获取 PowerMonitorMacOS 实例指针
PowerMonitorMacOS *monitor = this;
// 注册系统将要睡眠通知
id sleepObserver = [center addObserverForName:NSWorkspaceWillSleepNotification
object:workspace
queue:nil
usingBlock:^(NSNotification *notification) {
Q_UNUSED(notification);
monitor->handleWillSleep();
}];
// 注册系统已经唤醒通知
id wakeObserver = [center addObserverForName:NSWorkspaceDidWakeNotification
object:workspace
queue:nil
usingBlock:^(NSNotification *notification) {
Q_UNUSED(notification);
monitor->handleDidWake();
}];
if (sleepObserver && wakeObserver) {
// 将观察者保存到数组中
NSMutableArray *observers = [NSMutableArray arrayWithCapacity:2];
[observers addObject:sleepObserver];
[observers addObject:wakeObserver];
// 保持观察者数组的引用 (手动 retain)
m_workspaceObserver = (void *)CFBridgingRetain(observers);
m_initialized = true;
qDebug() << "=================================================";
qDebug() << "✅ 成功注册 macOS 电源管理通知";
qDebug() << "=================================================";
return true;
} else {
qDebug() << "=================================================";
qDebug() << "❌ 注册 macOS 电源管理通知失败";
qDebug() << "=================================================";
return false;
}
}
}
void PowerMonitorMacOS::unregisterPowerNotifications()
{
if (!m_initialized || !m_workspaceObserver) {
return;
}
@autoreleasepool {
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSNotificationCenter *center = [workspace notificationCenter];
// 转换回 NSArray (手动 release)
NSArray *observers = (NSArray *)CFBridgingRelease(m_workspaceObserver);
// 移除所有观察者
for (id observer in observers) {
[center removeObserver:observer];
}
m_workspaceObserver = nullptr;
m_initialized = false;
qDebug() << "=================================================";
qDebug() << "✅ 已注销 macOS 电源管理通知观察者";
qDebug() << "=================================================";
}
}
void PowerMonitorMacOS::handleWillSleep()
{
emitAboutToSleep();
}
void PowerMonitorMacOS::handleDidWake()
{
emitAboutToWakeUp();
}
#endif // Q_OS_MAC

View File

@ -0,0 +1,29 @@
#ifndef VULKANWIDGET_MACOS_H
#define VULKANWIDGET_MACOS_H
#ifdef __APPLE__
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Create a CAMetalLayer for the given native view
* @param nativeViewPtr Pointer to NSView (cast to void*)
* @return Retained pointer to CAMetalLayer (must be released with releaseMetalLayer)
*/
void* createMetalLayer(void* nativeViewPtr);
/**
* @brief Release the CAMetalLayer
* @param metalLayerPtr Pointer to CAMetalLayer (cast to void*)
*/
void releaseMetalLayer(void* metalLayerPtr);
#ifdef __cplusplus
}
#endif
#endif // __APPLE__
#endif // VULKANWIDGET_MACOS_H

View File

@ -0,0 +1,62 @@
#include "vulkanwidget_macos.h"
#ifdef __APPLE__
#import <QuartzCore/CAMetalLayer.h>
#import <AppKit/NSWindow.h>
#import <AppKit/NSView.h>
#include <QDebug>
void* createMetalLayer(void* nativeViewPtr)
{
@autoreleasepool {
NSView* view = (__bridge NSView*)nativeViewPtr;
if (!view) {
qDebug() << "createMetalLayer: Invalid NSView";
return nullptr;
}
// Create CAMetalLayer
CAMetalLayer* metalLayer = [CAMetalLayer layer];
if (!metalLayer) {
qDebug() << "createMetalLayer: Failed to create CAMetalLayer";
return nullptr;
}
// Configure the metal layer
metalLayer.pixelFormat = MTLPixelFormatBGRA8Unorm;
metalLayer.framebufferOnly = YES;
// Get the content scale factor for retina displays
NSWindow* window = [view window];
CGFloat scaleFactor = window ? [window backingScaleFactor] : 1.0;
metalLayer.contentsScale = scaleFactor;
// Set the layer's drawable size to match the view
CGSize drawableSize = view.bounds.size;
drawableSize.width *= scaleFactor;
drawableSize.height *= scaleFactor;
metalLayer.drawableSize = drawableSize;
// Set view properties
[view setWantsLayer:YES];
[view setLayer:metalLayer];
qDebug() << "createMetalLayer: Successfully created CAMetalLayer"
<< "size:" << drawableSize.width << "x" << drawableSize.height
<< "scale:" << scaleFactor;
// Return retained pointer (caller must release)
return (void*)CFBridgingRetain(metalLayer);
}
}
void releaseMetalLayer(void* metalLayerPtr)
{
if (metalLayerPtr) {
CFRelease(metalLayerPtr);
qDebug() << "releaseMetalLayer: CAMetalLayer released";
}
}
#endif // __APPLE__

View File

@ -1,54 +1,50 @@
#include "powermonitor.h"
void PowerMonitor::initLogin1Dbus() {
// 连接 org.freedesktop.login1 服务(系统总线)
m_login1Interface = new QDBusInterface(
"org.freedesktop.login1", // DBus 服务名
"/org/freedesktop/login1", // 对象路径
"org.freedesktop.login1.Manager", // 接口名
QDBusConnection::systemBus(), // 系统总线(关键!不是会话总线)
this
);
#ifdef Q_OS_LINUX
#include "platform/powermonitor_linux.h"
#elif defined(Q_OS_MAC)
#include "platform/powermonitor_macos.h"
#endif
// 检查接口是否有效
if (m_login1Interface->isValid()) {
// 监听 PrepareForSleep 信号签名b = bool
bool connectOk = QDBusConnection::systemBus().connect(
"org.freedesktop.login1", // 服务名
"/org/freedesktop/login1", // 对象路径
"org.freedesktop.login1.Manager", // 接口名
"PrepareForSleep", // 信号名
this,
SLOT(onPrepareForSleep(bool)) // 接收信号的槽函数
);
#include <QDebug>
if (connectOk) {
qDebug() << "=================================================";
qDebug() << "✅ 成功连接 login1 电源管理接口";
qDebug() << "=================================================";
} else {
qDebug() << "=================================================";
qDebug() << "❌ 连接 login1 信号失败:" << QDBusConnection::systemBus().lastError().message();
qDebug() << "=================================================";
}
} else {
qDebug() << "=================================================";
qDebug() << "❌ 无法创建 login1 接口:" << m_login1Interface->lastError().message();
qDebug() << "=================================================";
PowerMonitor::PowerMonitor(QObject *parent)
: PowerMonitorBase(parent)
, m_impl(nullptr)
{
#ifdef Q_OS_LINUX
m_impl = new PowerMonitorLinux(this);
qDebug() << "创建 Linux 电源监视器实例";
#elif defined(Q_OS_MAC)
m_impl = new PowerMonitorMacOS(this);
qDebug() << "创建 macOS 电源监视器实例";
#else
qWarning() << "警告:当前平台不支持电源监视功能";
#endif
if (m_impl) {
// 转发平台实现的信号到工厂类
connect(m_impl, &PowerMonitorBase::aboutToSleep,
this, &PowerMonitor::aboutToSleep);
connect(m_impl, &PowerMonitorBase::aboutToWakeUp,
this, &PowerMonitor::aboutToWakeUp);
connect(m_impl, &PowerMonitorBase::powerStateChanged,
this, &PowerMonitor::powerStateChanged);
// 自动初始化
m_impl->initialize();
}
}
// 槽函数:处理睡眠/唤醒事件
void PowerMonitor::onPrepareForSleep(bool enteringSleep) {
if (enteringSleep) {
// 系统即将进入 休眠/待机 状态
qDebug() << "=================================================";
qDebug() << "\n📥 系统即将进入睡眠(休眠/待机)";
emit aboutToSleep();
} else {
// 系统从睡眠中唤醒
qDebug() << "📤 系统已从睡眠中唤醒\n";
qDebug() << "=================================================";
emit aboutToWakeUp();
}
PowerMonitor::~PowerMonitor()
{
// m_impl 会被 Qt 的父对象机制自动删除
}
bool PowerMonitor::initialize()
{
if (m_impl) {
return m_impl->initialize();
}
return false;
}

View File

@ -1,39 +1,38 @@
#pragma once
#include <QObject>
#include <QDBusInterface>
#include <QDBusConnection>
#include <QDebug>
#ifndef POWERMONITOR_H
#define POWERMONITOR_H
class PowerMonitor : public QObject
#include "platform/powermonitor_base.h"
/**
* @brief
*
*
* /
*/
class PowerMonitor : public PowerMonitorBase
{
Q_OBJECT
public:
explicit PowerMonitor(QObject *parent = nullptr) : QObject(parent) { initLogin1Dbus(); }
signals:
/*
* @brief
/**
* @brief
* @param parent
*
*
* - Linux: PowerMonitorLinux (使 DBus login1)
* - macOS: PowerMonitorMacOS (使 NSWorkspace )
*/
void aboutToWakeUp();
explicit PowerMonitor(QObject *parent = nullptr);
~PowerMonitor() override;
/*
* @brief
/**
* @brief
* @return true false
*/
void aboutToSleep();
private slots:
/*
* @brief /
* @param enteringSleep
*/
void onPrepareForSleep(bool enteringSleep);
bool initialize() override;
private:
/*
* @brief Login1 DBus接口
*/
void initLogin1Dbus();
QDBusInterface *m_login1Interface = nullptr;
PowerMonitorBase *m_impl; // 平台特定的实现
};
#endif // POWERMONITOR_H

View File

@ -1,11 +1,11 @@
#include "screenlockdetector.h"
#ifdef Q_OS_LINUX
#include "screenlockdetector_linux.h"
#include "platform/screenlockdetector_linux.h"
#endif
#ifdef Q_OS_MAC
#include "screenlockdetector_macos.h"
#include "platform/screenlockdetector_macos.h"
#endif
#include <QDebug>

View File

@ -1,7 +1,7 @@
#ifndef SCREENLOCKDETECTOR_H
#define SCREENLOCKDETECTOR_H
#include "screenlockdetector_base.h"
#include "platform/screenlockdetector_base.h"
/**
* @brief

View File

@ -1,90 +1,93 @@
// Auto-generated from background.frag.spv
// Size: 2812 bytes (703 words)
0x07230203u, 0x00010000u, 0x0008000bu, 0x0000006bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
// Size: 2884 bytes (721 words)
0x07230203u, 0x00010000u, 0x000d000bu, 0x0000006bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u,
0x0009000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000016u, 0x0000001fu, 0x00000069u,
0x0000006au, 0x00030010u, 0x00000004u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001c2u, 0x00040005u,
0x00000004u, 0x6e69616du, 0x00000000u, 0x00070005u, 0x00000007u, 0x66696e55u, 0x426d726fu, 0x65666675u,
0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000007u, 0x00000000u, 0x656d6974u, 0x00000000u, 0x00050006u,
0x00000007u, 0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u, 0x00000007u, 0x00000002u, 0x59736572u,
0x00000000u, 0x00060006u, 0x00000007u, 0x00000003u, 0x61746f72u, 0x6e6f6974u, 0x00000000u, 0x00060006u,
0x00000007u, 0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u, 0x00070006u, 0x00000007u, 0x00000005u,
0x6e696170u, 0x676e6974u, 0x62616e45u, 0x0064656cu, 0x00060006u, 0x00000007u, 0x00000006u, 0x64646170u,
0x31676e69u, 0x00000000u, 0x00030005u, 0x00000009u, 0x006f6275u, 0x00050005u, 0x00000016u, 0x4374756fu,
0x726f6c6fu, 0x00000000u, 0x00030005u, 0x0000001du, 0x00007675u, 0x00060005u, 0x0000001fu, 0x67617266u,
0x69736f50u, 0x6e6f6974u, 0x00000000u, 0x00030005u, 0x00000025u, 0x00000074u, 0x00030005u, 0x0000002bu,
0x00000072u, 0x00030005u, 0x00000034u, 0x00000067u, 0x00030005u, 0x0000003du, 0x00000062u, 0x00040005u,
0x00000049u, 0x6f6c6f63u, 0x00003172u, 0x00040005u, 0x0000004eu, 0x6f6c6f63u, 0x00003272u, 0x00050005u,
0x00000052u, 0x64617267u, 0x746e6569u, 0x00000000u, 0x00050005u, 0x0000005du, 0x616e6966u, 0x6c6f436cu,
0x0000726fu, 0x00050005u, 0x00000069u, 0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00060005u, 0x0000006au,
0x67617266u, 0x43786554u, 0x64726f6fu, 0x00000000u, 0x00050048u, 0x00000007u, 0x00000000u, 0x00000023u,
0x00000000u, 0x00050048u, 0x00000007u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000007u,
0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000007u, 0x00000003u, 0x00000023u, 0x0000000cu,
0x00050048u, 0x00000007u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000007u, 0x00000005u,
0x00000023u, 0x00000014u, 0x00050048u, 0x00000007u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00030047u,
0x00000007u, 0x00000002u, 0x00040047u, 0x00000009u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000009u,
0x00000021u, 0x00000000u, 0x00040047u, 0x00000016u, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000001fu,
0x0000001eu, 0x00000002u, 0x00040047u, 0x00000069u, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000006au,
0x0000001eu, 0x00000001u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00030016u,
0x00000006u, 0x00000020u, 0x0009001eu, 0x00000007u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u,
0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000008u, 0x00000002u, 0x00000007u, 0x0004003bu,
0x00000008u, 0x00000009u, 0x00000002u, 0x00040015u, 0x0000000au, 0x00000020u, 0x00000001u, 0x0004002bu,
0x0000000au, 0x0000000bu, 0x00000005u, 0x00040020u, 0x0000000cu, 0x00000002u, 0x00000006u, 0x0004002bu,
0x00000006u, 0x0000000fu, 0x3f000000u, 0x00020014u, 0x00000010u, 0x00040017u, 0x00000014u, 0x00000006u,
0x00000004u, 0x00040020u, 0x00000015u, 0x00000003u, 0x00000014u, 0x0004003bu, 0x00000015u, 0x00000016u,
0x00000003u, 0x0004002bu, 0x00000006u, 0x00000017u, 0x3e20c49cu, 0x0004002bu, 0x00000006u, 0x00000018u,
0x3f800000u, 0x0007002cu, 0x00000014u, 0x00000019u, 0x00000017u, 0x00000017u, 0x00000017u, 0x00000018u,
0x00040017u, 0x0000001bu, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000001cu, 0x00000007u, 0x0000001bu,
0x00040020u, 0x0000001eu, 0x00000001u, 0x0000001bu, 0x0004003bu, 0x0000001eu, 0x0000001fu, 0x00000001u,
0x00040020u, 0x00000024u, 0x00000007u, 0x00000006u, 0x0004002bu, 0x0000000au, 0x00000026u, 0x00000000u,
0x0004002bu, 0x00000006u, 0x00000029u, 0x43b40000u, 0x0004002bu, 0x00000006u, 0x0000002cu, 0x3ec8b439u,
0x0004002bu, 0x00000006u, 0x0000002du, 0x3e48b439u, 0x0004002bu, 0x00000006u, 0x0000002fu, 0x40c90fd0u,
0x0004002bu, 0x00000006u, 0x00000035u, 0x3f16872bu, 0x0004002bu, 0x00000006u, 0x00000038u, 0x3f860419u,
0x0004002bu, 0x00000006u, 0x0000003eu, 0x3f48b439u, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x3e5d2f1bu,
0x0004002bu, 0x00000006u, 0x00000042u, 0x40060419u, 0x00040017u, 0x00000047u, 0x00000006u, 0x00000003u,
0x00040020u, 0x00000048u, 0x00000007u, 0x00000047u, 0x0004002bu, 0x00000006u, 0x0000004fu, 0x3df1a9fcu,
0x0004002bu, 0x00000006u, 0x00000050u, 0x3e70a3d7u, 0x0006002cu, 0x00000047u, 0x00000051u, 0x0000004fu,
0x0000004fu, 0x00000050u, 0x00040015u, 0x00000053u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000053u,
0x00000054u, 0x00000000u, 0x0004002bu, 0x00000053u, 0x00000058u, 0x00000001u, 0x00040020u, 0x00000068u,
0x00000001u, 0x00000014u, 0x0004003bu, 0x00000068u, 0x00000069u, 0x00000001u, 0x0004003bu, 0x0000001eu,
0x0000006au, 0x00000001u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u,
0x00000005u, 0x0004003bu, 0x0000001cu, 0x0000001du, 0x00000007u, 0x0004003bu, 0x00000024u, 0x00000025u,
0x00000007u, 0x0004003bu, 0x00000024u, 0x0000002bu, 0x00000007u, 0x0004003bu, 0x00000024u, 0x00000034u,
0x00000007u, 0x0004003bu, 0x00000024u, 0x0000003du, 0x00000007u, 0x0004003bu, 0x00000048u, 0x00000049u,
0x00000007u, 0x0004003bu, 0x00000048u, 0x0000004eu, 0x00000007u, 0x0004003bu, 0x00000024u, 0x00000052u,
0x00000007u, 0x0004003bu, 0x00000048u, 0x0000005du, 0x00000007u, 0x00050041u, 0x0000000cu, 0x0000000du,
0x00000009u, 0x0000000bu, 0x0004003du, 0x00000006u, 0x0000000eu, 0x0000000du, 0x000500b8u, 0x00000010u,
0x00000011u, 0x0000000eu, 0x0000000fu, 0x000300f7u, 0x00000013u, 0x00000000u, 0x000400fau, 0x00000011u,
0x00000012u, 0x00000013u, 0x000200f8u, 0x00000012u, 0x0003003eu, 0x00000016u, 0x00000019u, 0x000100fdu,
0x000200f8u, 0x00000013u, 0x0004003du, 0x0000001bu, 0x00000020u, 0x0000001fu, 0x00050050u, 0x0000001bu,
0x00000021u, 0x00000018u, 0x00000018u, 0x00050081u, 0x0000001bu, 0x00000022u, 0x00000020u, 0x00000021u,
0x0005008eu, 0x0000001bu, 0x00000023u, 0x00000022u, 0x0000000fu, 0x0003003eu, 0x0000001du, 0x00000023u,
0x00050041u, 0x0000000cu, 0x00000027u, 0x00000009u, 0x00000026u, 0x0004003du, 0x00000006u, 0x00000028u,
0x00000027u, 0x00050088u, 0x00000006u, 0x0000002au, 0x00000028u, 0x00000029u, 0x0003003eu, 0x00000025u,
0x0000002au, 0x0004003du, 0x00000006u, 0x0000002eu, 0x00000025u, 0x00050085u, 0x00000006u, 0x00000030u,
0x0000002eu, 0x0000002fu, 0x0006000cu, 0x00000006u, 0x00000031u, 0x00000001u, 0x0000000du, 0x00000030u,
0x00050085u, 0x00000006u, 0x00000032u, 0x0000002du, 0x00000031u, 0x00050081u, 0x00000006u, 0x00000033u,
0x0000002cu, 0x00000032u, 0x0003003eu, 0x0000002bu, 0x00000033u, 0x0004003du, 0x00000006u, 0x00000036u,
0x00000025u, 0x00050085u, 0x00000006u, 0x00000037u, 0x00000036u, 0x0000002fu, 0x00050081u, 0x00000006u,
0x00000039u, 0x00000037u, 0x00000038u, 0x0006000cu, 0x00000006u, 0x0000003au, 0x00000001u, 0x0000000du,
0x00000039u, 0x00050085u, 0x00000006u, 0x0000003bu, 0x0000002du, 0x0000003au, 0x00050081u, 0x00000006u,
0x0000003cu, 0x00000035u, 0x0000003bu, 0x0003003eu, 0x00000034u, 0x0000003cu, 0x0004003du, 0x00000006u,
0x00000040u, 0x00000025u, 0x00050085u, 0x00000006u, 0x00000041u, 0x00000040u, 0x0000002fu, 0x00050081u,
0x00000006u, 0x00000043u, 0x00000041u, 0x00000042u, 0x0006000cu, 0x00000006u, 0x00000044u, 0x00000001u,
0x0000000du, 0x00000043u, 0x00050085u, 0x00000006u, 0x00000045u, 0x0000003fu, 0x00000044u, 0x00050081u,
0x00000006u, 0x00000046u, 0x0000003eu, 0x00000045u, 0x0003003eu, 0x0000003du, 0x00000046u, 0x0004003du,
0x00000006u, 0x0000004au, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000004bu, 0x00000034u, 0x0004003du,
0x00000006u, 0x0000004cu, 0x0000003du, 0x00060050u, 0x00000047u, 0x0000004du, 0x0000004au, 0x0000004bu,
0x0000004cu, 0x0003003eu, 0x00000049u, 0x0000004du, 0x0003003eu, 0x0000004eu, 0x00000051u, 0x00050041u,
0x00000024u, 0x00000055u, 0x0000001du, 0x00000054u, 0x0004003du, 0x00000006u, 0x00000056u, 0x00000055u,
0x00050085u, 0x00000006u, 0x00000057u, 0x00000056u, 0x0000000fu, 0x00050041u, 0x00000024u, 0x00000059u,
0x0000001du, 0x00000058u, 0x0004003du, 0x00000006u, 0x0000005au, 0x00000059u, 0x00050085u, 0x00000006u,
0x0000005bu, 0x0000005au, 0x0000000fu, 0x00050081u, 0x00000006u, 0x0000005cu, 0x00000057u, 0x0000005bu,
0x0003003eu, 0x00000052u, 0x0000005cu, 0x0004003du, 0x00000047u, 0x0000005eu, 0x00000049u, 0x0004003du,
0x00000047u, 0x0000005fu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000060u, 0x00000052u, 0x00060050u,
0x00000047u, 0x00000061u, 0x00000060u, 0x00000060u, 0x00000060u, 0x0008000cu, 0x00000047u, 0x00000062u,
0x00000001u, 0x0000002eu, 0x0000005eu, 0x0000005fu, 0x00000061u, 0x0003003eu, 0x0000005du, 0x00000062u,
0x0004003du, 0x00000047u, 0x00000063u, 0x0000005du, 0x00050051u, 0x00000006u, 0x00000064u, 0x00000063u,
0x00000000u, 0x00050051u, 0x00000006u, 0x00000065u, 0x00000063u, 0x00000001u, 0x00050051u, 0x00000006u,
0x00000066u, 0x00000063u, 0x00000002u, 0x00070050u, 0x00000014u, 0x00000067u, 0x00000064u, 0x00000065u,
0x00000066u, 0x00000018u, 0x0003003eu, 0x00000016u, 0x00000067u, 0x000100fdu, 0x00010038u
0x0000006au, 0x00030010u, 0x00000004u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001c2u, 0x000a0004u,
0x475f4c47u, 0x4c474f4fu, 0x70635f45u, 0x74735f70u, 0x5f656c79u, 0x656e696cu, 0x7269645fu, 0x69746365u,
0x00006576u, 0x00080004u, 0x475f4c47u, 0x4c474f4fu, 0x6e695f45u, 0x64756c63u, 0x69645f65u, 0x74636572u,
0x00657669u, 0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00070005u, 0x00000007u, 0x66696e55u,
0x426d726fu, 0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000007u, 0x00000000u, 0x656d6974u,
0x00000000u, 0x00050006u, 0x00000007u, 0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u, 0x00000007u,
0x00000002u, 0x59736572u, 0x00000000u, 0x00060006u, 0x00000007u, 0x00000003u, 0x61746f72u, 0x6e6f6974u,
0x00000000u, 0x00060006u, 0x00000007u, 0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u, 0x00070006u,
0x00000007u, 0x00000005u, 0x6e696170u, 0x676e6974u, 0x62616e45u, 0x0064656cu, 0x00060006u, 0x00000007u,
0x00000006u, 0x64646170u, 0x31676e69u, 0x00000000u, 0x00030005u, 0x00000009u, 0x006f6275u, 0x00050005u,
0x00000016u, 0x4374756fu, 0x726f6c6fu, 0x00000000u, 0x00030005u, 0x0000001du, 0x00007675u, 0x00060005u,
0x0000001fu, 0x67617266u, 0x69736f50u, 0x6e6f6974u, 0x00000000u, 0x00030005u, 0x00000025u, 0x00000074u,
0x00030005u, 0x0000002bu, 0x00000072u, 0x00030005u, 0x00000034u, 0x00000067u, 0x00030005u, 0x0000003du,
0x00000062u, 0x00040005u, 0x00000049u, 0x6f6c6f63u, 0x00003172u, 0x00040005u, 0x0000004eu, 0x6f6c6f63u,
0x00003272u, 0x00050005u, 0x00000052u, 0x64617267u, 0x746e6569u, 0x00000000u, 0x00050005u, 0x0000005du,
0x616e6966u, 0x6c6f436cu, 0x0000726fu, 0x00050005u, 0x00000069u, 0x67617266u, 0x6f6c6f43u, 0x00000072u,
0x00060005u, 0x0000006au, 0x67617266u, 0x43786554u, 0x64726f6fu, 0x00000000u, 0x00030047u, 0x00000007u,
0x00000002u, 0x00050048u, 0x00000007u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000007u,
0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000007u, 0x00000002u, 0x00000023u, 0x00000008u,
0x00050048u, 0x00000007u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000007u, 0x00000004u,
0x00000023u, 0x00000010u, 0x00050048u, 0x00000007u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u,
0x00000007u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00040047u, 0x00000009u, 0x00000021u, 0x00000000u,
0x00040047u, 0x00000009u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000016u, 0x0000001eu, 0x00000000u,
0x00040047u, 0x0000001fu, 0x0000001eu, 0x00000002u, 0x00040047u, 0x00000069u, 0x0000001eu, 0x00000000u,
0x00040047u, 0x0000006au, 0x0000001eu, 0x00000001u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u,
0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x0009001eu, 0x00000007u, 0x00000006u, 0x00000006u,
0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000008u, 0x00000002u,
0x00000007u, 0x0004003bu, 0x00000008u, 0x00000009u, 0x00000002u, 0x00040015u, 0x0000000au, 0x00000020u,
0x00000001u, 0x0004002bu, 0x0000000au, 0x0000000bu, 0x00000005u, 0x00040020u, 0x0000000cu, 0x00000002u,
0x00000006u, 0x0004002bu, 0x00000006u, 0x0000000fu, 0x3f000000u, 0x00020014u, 0x00000010u, 0x00040017u,
0x00000014u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000015u, 0x00000003u, 0x00000014u, 0x0004003bu,
0x00000015u, 0x00000016u, 0x00000003u, 0x0004002bu, 0x00000006u, 0x00000017u, 0x3e20c49cu, 0x0004002bu,
0x00000006u, 0x00000018u, 0x3f800000u, 0x0007002cu, 0x00000014u, 0x00000019u, 0x00000017u, 0x00000017u,
0x00000017u, 0x00000018u, 0x00040017u, 0x0000001bu, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000001cu,
0x00000007u, 0x0000001bu, 0x00040020u, 0x0000001eu, 0x00000001u, 0x0000001bu, 0x0004003bu, 0x0000001eu,
0x0000001fu, 0x00000001u, 0x00040020u, 0x00000024u, 0x00000007u, 0x00000006u, 0x0004002bu, 0x0000000au,
0x00000026u, 0x00000003u, 0x0004002bu, 0x00000006u, 0x00000029u, 0x43b40000u, 0x0004002bu, 0x00000006u,
0x0000002cu, 0x3ec8b439u, 0x0004002bu, 0x00000006u, 0x0000002du, 0x3e48b439u, 0x0004002bu, 0x00000006u,
0x0000002fu, 0x40c90fd0u, 0x0004002bu, 0x00000006u, 0x00000035u, 0x3f16872bu, 0x0004002bu, 0x00000006u,
0x00000038u, 0x3f860419u, 0x0004002bu, 0x00000006u, 0x0000003eu, 0x3f48b439u, 0x0004002bu, 0x00000006u,
0x0000003fu, 0x3e5d2f1bu, 0x0004002bu, 0x00000006u, 0x00000042u, 0x40060419u, 0x00040017u, 0x00000047u,
0x00000006u, 0x00000003u, 0x00040020u, 0x00000048u, 0x00000007u, 0x00000047u, 0x0004002bu, 0x00000006u,
0x0000004fu, 0x3df1a9fcu, 0x0004002bu, 0x00000006u, 0x00000050u, 0x3e70a3d7u, 0x0006002cu, 0x00000047u,
0x00000051u, 0x0000004fu, 0x0000004fu, 0x00000050u, 0x00040015u, 0x00000053u, 0x00000020u, 0x00000000u,
0x0004002bu, 0x00000053u, 0x00000054u, 0x00000000u, 0x0004002bu, 0x00000053u, 0x00000058u, 0x00000001u,
0x00040020u, 0x00000068u, 0x00000001u, 0x00000014u, 0x0004003bu, 0x00000068u, 0x00000069u, 0x00000001u,
0x0004003bu, 0x0000001eu, 0x0000006au, 0x00000001u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u,
0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000001cu, 0x0000001du, 0x00000007u, 0x0004003bu,
0x00000024u, 0x00000025u, 0x00000007u, 0x0004003bu, 0x00000024u, 0x0000002bu, 0x00000007u, 0x0004003bu,
0x00000024u, 0x00000034u, 0x00000007u, 0x0004003bu, 0x00000024u, 0x0000003du, 0x00000007u, 0x0004003bu,
0x00000048u, 0x00000049u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x0000004eu, 0x00000007u, 0x0004003bu,
0x00000024u, 0x00000052u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x0000005du, 0x00000007u, 0x00050041u,
0x0000000cu, 0x0000000du, 0x00000009u, 0x0000000bu, 0x0004003du, 0x00000006u, 0x0000000eu, 0x0000000du,
0x000500b8u, 0x00000010u, 0x00000011u, 0x0000000eu, 0x0000000fu, 0x000300f7u, 0x00000013u, 0x00000000u,
0x000400fau, 0x00000011u, 0x00000012u, 0x00000013u, 0x000200f8u, 0x00000012u, 0x0003003eu, 0x00000016u,
0x00000019u, 0x000100fdu, 0x000200f8u, 0x00000013u, 0x0004003du, 0x0000001bu, 0x00000020u, 0x0000001fu,
0x00050050u, 0x0000001bu, 0x00000021u, 0x00000018u, 0x00000018u, 0x00050081u, 0x0000001bu, 0x00000022u,
0x00000020u, 0x00000021u, 0x0005008eu, 0x0000001bu, 0x00000023u, 0x00000022u, 0x0000000fu, 0x0003003eu,
0x0000001du, 0x00000023u, 0x00050041u, 0x0000000cu, 0x00000027u, 0x00000009u, 0x00000026u, 0x0004003du,
0x00000006u, 0x00000028u, 0x00000027u, 0x00050088u, 0x00000006u, 0x0000002au, 0x00000028u, 0x00000029u,
0x0003003eu, 0x00000025u, 0x0000002au, 0x0004003du, 0x00000006u, 0x0000002eu, 0x00000025u, 0x00050085u,
0x00000006u, 0x00000030u, 0x0000002eu, 0x0000002fu, 0x0006000cu, 0x00000006u, 0x00000031u, 0x00000001u,
0x0000000du, 0x00000030u, 0x00050085u, 0x00000006u, 0x00000032u, 0x0000002du, 0x00000031u, 0x00050081u,
0x00000006u, 0x00000033u, 0x0000002cu, 0x00000032u, 0x0003003eu, 0x0000002bu, 0x00000033u, 0x0004003du,
0x00000006u, 0x00000036u, 0x00000025u, 0x00050085u, 0x00000006u, 0x00000037u, 0x00000036u, 0x0000002fu,
0x00050081u, 0x00000006u, 0x00000039u, 0x00000037u, 0x00000038u, 0x0006000cu, 0x00000006u, 0x0000003au,
0x00000001u, 0x0000000du, 0x00000039u, 0x00050085u, 0x00000006u, 0x0000003bu, 0x0000002du, 0x0000003au,
0x00050081u, 0x00000006u, 0x0000003cu, 0x00000035u, 0x0000003bu, 0x0003003eu, 0x00000034u, 0x0000003cu,
0x0004003du, 0x00000006u, 0x00000040u, 0x00000025u, 0x00050085u, 0x00000006u, 0x00000041u, 0x00000040u,
0x0000002fu, 0x00050081u, 0x00000006u, 0x00000043u, 0x00000041u, 0x00000042u, 0x0006000cu, 0x00000006u,
0x00000044u, 0x00000001u, 0x0000000du, 0x00000043u, 0x00050085u, 0x00000006u, 0x00000045u, 0x0000003fu,
0x00000044u, 0x00050081u, 0x00000006u, 0x00000046u, 0x0000003eu, 0x00000045u, 0x0003003eu, 0x0000003du,
0x00000046u, 0x0004003du, 0x00000006u, 0x0000004au, 0x0000002bu, 0x0004003du, 0x00000006u, 0x0000004bu,
0x00000034u, 0x0004003du, 0x00000006u, 0x0000004cu, 0x0000003du, 0x00060050u, 0x00000047u, 0x0000004du,
0x0000004au, 0x0000004bu, 0x0000004cu, 0x0003003eu, 0x00000049u, 0x0000004du, 0x0003003eu, 0x0000004eu,
0x00000051u, 0x00050041u, 0x00000024u, 0x00000055u, 0x0000001du, 0x00000054u, 0x0004003du, 0x00000006u,
0x00000056u, 0x00000055u, 0x00050085u, 0x00000006u, 0x00000057u, 0x00000056u, 0x0000000fu, 0x00050041u,
0x00000024u, 0x00000059u, 0x0000001du, 0x00000058u, 0x0004003du, 0x00000006u, 0x0000005au, 0x00000059u,
0x00050085u, 0x00000006u, 0x0000005bu, 0x0000005au, 0x0000000fu, 0x00050081u, 0x00000006u, 0x0000005cu,
0x00000057u, 0x0000005bu, 0x0003003eu, 0x00000052u, 0x0000005cu, 0x0004003du, 0x00000047u, 0x0000005eu,
0x00000049u, 0x0004003du, 0x00000047u, 0x0000005fu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000060u,
0x00000052u, 0x00060050u, 0x00000047u, 0x00000061u, 0x00000060u, 0x00000060u, 0x00000060u, 0x0008000cu,
0x00000047u, 0x00000062u, 0x00000001u, 0x0000002eu, 0x0000005eu, 0x0000005fu, 0x00000061u, 0x0003003eu,
0x0000005du, 0x00000062u, 0x0004003du, 0x00000047u, 0x00000063u, 0x0000005du, 0x00050051u, 0x00000006u,
0x00000064u, 0x00000063u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000065u, 0x00000063u, 0x00000001u,
0x00050051u, 0x00000006u, 0x00000066u, 0x00000063u, 0x00000002u, 0x00070050u, 0x00000014u, 0x00000067u,
0x00000064u, 0x00000065u, 0x00000066u, 0x00000018u, 0x0003003eu, 0x00000016u, 0x00000067u, 0x000100fdu,
0x00010038u

View File

@ -1,55 +1,57 @@
// Auto-generated from background.vert.spv
// Size: 1672 bytes (418 words)
0x07230203u, 0x00010000u, 0x0008000bu, 0x00000028u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
// Size: 1744 bytes (436 words)
0x07230203u, 0x00010000u, 0x000d000bu, 0x00000028u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u,
0x000c000fu, 0x00000000u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000du, 0x00000012u, 0x0000001bu,
0x0000001du, 0x00000020u, 0x00000021u, 0x00000023u, 0x00030003u, 0x00000002u, 0x000001c2u, 0x00040005u,
0x00000004u, 0x6e69616du, 0x00000000u, 0x00060005u, 0x0000000bu, 0x505f6c67u, 0x65567265u, 0x78657472u,
0x00000000u, 0x00060006u, 0x0000000bu, 0x00000000u, 0x505f6c67u, 0x7469736fu, 0x006e6f69u, 0x00070006u,
0x0000000bu, 0x00000001u, 0x505f6c67u, 0x746e696fu, 0x657a6953u, 0x00000000u, 0x00070006u, 0x0000000bu,
0x00000002u, 0x435f6c67u, 0x4470696cu, 0x61747369u, 0x0065636eu, 0x00070006u, 0x0000000bu, 0x00000003u,
0x435f6c67u, 0x446c6c75u, 0x61747369u, 0x0065636eu, 0x00030005u, 0x0000000du, 0x00000000u, 0x00050005u,
0x00000012u, 0x6f506e69u, 0x69746973u, 0x00006e6fu, 0x00050005u, 0x0000001bu, 0x67617266u, 0x6f6c6f43u,
0x00000072u, 0x00040005u, 0x0000001du, 0x6f436e69u, 0x00726f6cu, 0x00060005u, 0x00000020u, 0x67617266u,
0x43786554u, 0x64726f6fu, 0x00000000u, 0x00050005u, 0x00000021u, 0x65546e69u, 0x6f6f4378u, 0x00006472u,
0x00060005u, 0x00000023u, 0x67617266u, 0x69736f50u, 0x6e6f6974u, 0x00000000u, 0x00070005u, 0x00000025u,
0x66696e55u, 0x426d726fu, 0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000025u, 0x00000000u,
0x656d6974u, 0x00000000u, 0x00050006u, 0x00000025u, 0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u,
0x00000025u, 0x00000002u, 0x59736572u, 0x00000000u, 0x00060006u, 0x00000025u, 0x00000003u, 0x61746f72u,
0x6e6f6974u, 0x00000000u, 0x00060006u, 0x00000025u, 0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u,
0x00060006u, 0x00000025u, 0x00000005u, 0x64646170u, 0x31676e69u, 0x00000000u, 0x00060006u, 0x00000025u,
0x00000006u, 0x64646170u, 0x32676e69u, 0x00000000u, 0x00030005u, 0x00000027u, 0x006f6275u, 0x00050048u,
0x0000000bu, 0x00000000u, 0x0000000bu, 0x00000000u, 0x00050048u, 0x0000000bu, 0x00000001u, 0x0000000bu,
0x00000001u, 0x00050048u, 0x0000000bu, 0x00000002u, 0x0000000bu, 0x00000003u, 0x00050048u, 0x0000000bu,
0x00000003u, 0x0000000bu, 0x00000004u, 0x00030047u, 0x0000000bu, 0x00000002u, 0x00040047u, 0x00000012u,
0x0000001eu, 0x00000000u, 0x00040047u, 0x0000001bu, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000001du,
0x0000001eu, 0x00000001u, 0x00040047u, 0x00000020u, 0x0000001eu, 0x00000001u, 0x00040047u, 0x00000021u,
0x0000001eu, 0x00000002u, 0x00040047u, 0x00000023u, 0x0000001eu, 0x00000002u, 0x00050048u, 0x00000025u,
0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000025u, 0x00000001u, 0x00000023u, 0x00000004u,
0x00050048u, 0x00000025u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000025u, 0x00000003u,
0x00000023u, 0x0000000cu, 0x00050048u, 0x00000025u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u,
0x00000025u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000025u, 0x00000006u, 0x00000023u,
0x00000018u, 0x00030047u, 0x00000025u, 0x00000002u, 0x00040047u, 0x00000027u, 0x00000022u, 0x00000000u,
0x00040047u, 0x00000027u, 0x00000021u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u,
0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u,
0x00040015u, 0x00000008u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000009u, 0x00000001u,
0x0004001cu, 0x0000000au, 0x00000006u, 0x00000009u, 0x0006001eu, 0x0000000bu, 0x00000007u, 0x00000006u,
0x0000000au, 0x0000000au, 0x00040020u, 0x0000000cu, 0x00000003u, 0x0000000bu, 0x0004003bu, 0x0000000cu,
0x0000000du, 0x00000003u, 0x00040015u, 0x0000000eu, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000000eu,
0x0000000fu, 0x00000000u, 0x00040017u, 0x00000010u, 0x00000006u, 0x00000002u, 0x00040020u, 0x00000011u,
0x00000001u, 0x00000010u, 0x0004003bu, 0x00000011u, 0x00000012u, 0x00000001u, 0x0004002bu, 0x00000006u,
0x00000014u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000015u, 0x3f800000u, 0x00040020u, 0x00000019u,
0x00000003u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x0000001bu, 0x00000003u, 0x00040020u, 0x0000001cu,
0x00000001u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x0000001du, 0x00000001u, 0x00040020u, 0x0000001fu,
0x00000003u, 0x00000010u, 0x0004003bu, 0x0000001fu, 0x00000020u, 0x00000003u, 0x0004003bu, 0x00000011u,
0x00000021u, 0x00000001u, 0x0004003bu, 0x0000001fu, 0x00000023u, 0x00000003u, 0x0009001eu, 0x00000025u,
0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u,
0x00000026u, 0x00000002u, 0x00000025u, 0x0004003bu, 0x00000026u, 0x00000027u, 0x00000002u, 0x00050036u,
0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x00000010u,
0x00000013u, 0x00000012u, 0x00050051u, 0x00000006u, 0x00000016u, 0x00000013u, 0x00000000u, 0x00050051u,
0x00000006u, 0x00000017u, 0x00000013u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000018u, 0x00000016u,
0x00000017u, 0x00000014u, 0x00000015u, 0x00050041u, 0x00000019u, 0x0000001au, 0x0000000du, 0x0000000fu,
0x0003003eu, 0x0000001au, 0x00000018u, 0x0004003du, 0x00000007u, 0x0000001eu, 0x0000001du, 0x0003003eu,
0x0000001bu, 0x0000001eu, 0x0004003du, 0x00000010u, 0x00000022u, 0x00000021u, 0x0003003eu, 0x00000020u,
0x00000022u, 0x0004003du, 0x00000010u, 0x00000024u, 0x00000012u, 0x0003003eu, 0x00000023u, 0x00000024u,
0x000100fdu, 0x00010038u
0x0000001du, 0x00000020u, 0x00000021u, 0x00000023u, 0x00030003u, 0x00000002u, 0x000001c2u, 0x000a0004u,
0x475f4c47u, 0x4c474f4fu, 0x70635f45u, 0x74735f70u, 0x5f656c79u, 0x656e696cu, 0x7269645fu, 0x69746365u,
0x00006576u, 0x00080004u, 0x475f4c47u, 0x4c474f4fu, 0x6e695f45u, 0x64756c63u, 0x69645f65u, 0x74636572u,
0x00657669u, 0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00060005u, 0x0000000bu, 0x505f6c67u,
0x65567265u, 0x78657472u, 0x00000000u, 0x00060006u, 0x0000000bu, 0x00000000u, 0x505f6c67u, 0x7469736fu,
0x006e6f69u, 0x00070006u, 0x0000000bu, 0x00000001u, 0x505f6c67u, 0x746e696fu, 0x657a6953u, 0x00000000u,
0x00070006u, 0x0000000bu, 0x00000002u, 0x435f6c67u, 0x4470696cu, 0x61747369u, 0x0065636eu, 0x00070006u,
0x0000000bu, 0x00000003u, 0x435f6c67u, 0x446c6c75u, 0x61747369u, 0x0065636eu, 0x00030005u, 0x0000000du,
0x00000000u, 0x00050005u, 0x00000012u, 0x6f506e69u, 0x69746973u, 0x00006e6fu, 0x00050005u, 0x0000001bu,
0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00040005u, 0x0000001du, 0x6f436e69u, 0x00726f6cu, 0x00060005u,
0x00000020u, 0x67617266u, 0x43786554u, 0x64726f6fu, 0x00000000u, 0x00050005u, 0x00000021u, 0x65546e69u,
0x6f6f4378u, 0x00006472u, 0x00060005u, 0x00000023u, 0x67617266u, 0x69736f50u, 0x6e6f6974u, 0x00000000u,
0x00070005u, 0x00000025u, 0x66696e55u, 0x426d726fu, 0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u,
0x00000025u, 0x00000000u, 0x656d6974u, 0x00000000u, 0x00050006u, 0x00000025u, 0x00000001u, 0x58736572u,
0x00000000u, 0x00050006u, 0x00000025u, 0x00000002u, 0x59736572u, 0x00000000u, 0x00060006u, 0x00000025u,
0x00000003u, 0x61746f72u, 0x6e6f6974u, 0x00000000u, 0x00060006u, 0x00000025u, 0x00000004u, 0x65766177u,
0x73616850u, 0x00000065u, 0x00060006u, 0x00000025u, 0x00000005u, 0x64646170u, 0x31676e69u, 0x00000000u,
0x00060006u, 0x00000025u, 0x00000006u, 0x64646170u, 0x32676e69u, 0x00000000u, 0x00030005u, 0x00000027u,
0x006f6275u, 0x00030047u, 0x0000000bu, 0x00000002u, 0x00050048u, 0x0000000bu, 0x00000000u, 0x0000000bu,
0x00000000u, 0x00050048u, 0x0000000bu, 0x00000001u, 0x0000000bu, 0x00000001u, 0x00050048u, 0x0000000bu,
0x00000002u, 0x0000000bu, 0x00000003u, 0x00050048u, 0x0000000bu, 0x00000003u, 0x0000000bu, 0x00000004u,
0x00040047u, 0x00000012u, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000001bu, 0x0000001eu, 0x00000000u,
0x00040047u, 0x0000001du, 0x0000001eu, 0x00000001u, 0x00040047u, 0x00000020u, 0x0000001eu, 0x00000001u,
0x00040047u, 0x00000021u, 0x0000001eu, 0x00000002u, 0x00040047u, 0x00000023u, 0x0000001eu, 0x00000002u,
0x00030047u, 0x00000025u, 0x00000002u, 0x00050048u, 0x00000025u, 0x00000000u, 0x00000023u, 0x00000000u,
0x00050048u, 0x00000025u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000025u, 0x00000002u,
0x00000023u, 0x00000008u, 0x00050048u, 0x00000025u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u,
0x00000025u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000025u, 0x00000005u, 0x00000023u,
0x00000014u, 0x00050048u, 0x00000025u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00040047u, 0x00000027u,
0x00000021u, 0x00000000u, 0x00040047u, 0x00000027u, 0x00000022u, 0x00000000u, 0x00020013u, 0x00000002u,
0x00030021u, 0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u,
0x00000006u, 0x00000004u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000008u,
0x00000009u, 0x00000001u, 0x0004001cu, 0x0000000au, 0x00000006u, 0x00000009u, 0x0006001eu, 0x0000000bu,
0x00000007u, 0x00000006u, 0x0000000au, 0x0000000au, 0x00040020u, 0x0000000cu, 0x00000003u, 0x0000000bu,
0x0004003bu, 0x0000000cu, 0x0000000du, 0x00000003u, 0x00040015u, 0x0000000eu, 0x00000020u, 0x00000001u,
0x0004002bu, 0x0000000eu, 0x0000000fu, 0x00000000u, 0x00040017u, 0x00000010u, 0x00000006u, 0x00000002u,
0x00040020u, 0x00000011u, 0x00000001u, 0x00000010u, 0x0004003bu, 0x00000011u, 0x00000012u, 0x00000001u,
0x0004002bu, 0x00000006u, 0x00000014u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000015u, 0x3f800000u,
0x00040020u, 0x00000019u, 0x00000003u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x0000001bu, 0x00000003u,
0x00040020u, 0x0000001cu, 0x00000001u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x0000001du, 0x00000001u,
0x00040020u, 0x0000001fu, 0x00000003u, 0x00000010u, 0x0004003bu, 0x0000001fu, 0x00000020u, 0x00000003u,
0x0004003bu, 0x00000011u, 0x00000021u, 0x00000001u, 0x0004003bu, 0x0000001fu, 0x00000023u, 0x00000003u,
0x0009001eu, 0x00000025u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u,
0x00000006u, 0x00040020u, 0x00000026u, 0x00000002u, 0x00000025u, 0x0004003bu, 0x00000026u, 0x00000027u,
0x00000002u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u,
0x0004003du, 0x00000010u, 0x00000013u, 0x00000012u, 0x00050051u, 0x00000006u, 0x00000016u, 0x00000013u,
0x00000000u, 0x00050051u, 0x00000006u, 0x00000017u, 0x00000013u, 0x00000001u, 0x00070050u, 0x00000007u,
0x00000018u, 0x00000016u, 0x00000017u, 0x00000014u, 0x00000015u, 0x00050041u, 0x00000019u, 0x0000001au,
0x0000000du, 0x0000000fu, 0x0003003eu, 0x0000001au, 0x00000018u, 0x0004003du, 0x00000007u, 0x0000001eu,
0x0000001du, 0x0003003eu, 0x0000001bu, 0x0000001eu, 0x0004003du, 0x00000010u, 0x00000022u, 0x00000021u,
0x0003003eu, 0x00000020u, 0x00000022u, 0x0004003du, 0x00000010u, 0x00000024u, 0x00000012u, 0x0003003eu,
0x00000023u, 0x00000024u, 0x000100fdu, 0x00010038u

Binary file not shown.

Binary file not shown.

View File

@ -1,31 +1,33 @@
// Auto-generated from geometry.frag.spv
// Size: 920 bytes (230 words)
0x07230203u, 0x00010000u, 0x0008000bu, 0x00000013u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
// Size: 992 bytes (248 words)
0x07230203u, 0x00010000u, 0x000d000bu, 0x00000013u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u,
0x0008000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000009u, 0x0000000bu, 0x0000000fu,
0x00030010u, 0x00000004u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001c2u, 0x00040005u, 0x00000004u,
0x6e69616du, 0x00000000u, 0x00050005u, 0x00000009u, 0x4374756fu, 0x726f6c6fu, 0x00000000u, 0x00050005u,
0x0000000bu, 0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00060005u, 0x0000000fu, 0x67617266u, 0x43786554u,
0x64726f6fu, 0x00000000u, 0x00070005u, 0x00000010u, 0x66696e55u, 0x426d726fu, 0x65666675u, 0x6a624f72u,
0x00746365u, 0x00050006u, 0x00000010u, 0x00000000u, 0x656d6974u, 0x00000000u, 0x00050006u, 0x00000010u,
0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u, 0x00000010u, 0x00000002u, 0x59736572u, 0x00000000u,
0x00060006u, 0x00000010u, 0x00000003u, 0x61746f72u, 0x6e6f6974u, 0x00000000u, 0x00060006u, 0x00000010u,
0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u, 0x00060006u, 0x00000010u, 0x00000005u, 0x64646170u,
0x31676e69u, 0x00000000u, 0x00060006u, 0x00000010u, 0x00000006u, 0x64646170u, 0x32676e69u, 0x00000000u,
0x00030005u, 0x00000012u, 0x006f6275u, 0x00040047u, 0x00000009u, 0x0000001eu, 0x00000000u, 0x00040047u,
0x0000000bu, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000000fu, 0x0000001eu, 0x00000001u, 0x00050048u,
0x00000010u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000010u, 0x00000001u, 0x00000023u,
0x00000004u, 0x00050048u, 0x00000010u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000010u,
0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000010u, 0x00000004u, 0x00000023u, 0x00000010u,
0x00050048u, 0x00000010u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000010u, 0x00000006u,
0x00000023u, 0x00000018u, 0x00030047u, 0x00000010u, 0x00000002u, 0x00040047u, 0x00000012u, 0x00000022u,
0x00000000u, 0x00040047u, 0x00000012u, 0x00000021u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u,
0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u, 0x00000006u,
0x00000004u, 0x00040020u, 0x00000008u, 0x00000003u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000009u,
0x00000003u, 0x00040020u, 0x0000000au, 0x00000001u, 0x00000007u, 0x0004003bu, 0x0000000au, 0x0000000bu,
0x00000001u, 0x00040017u, 0x0000000du, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000000eu, 0x00000001u,
0x0000000du, 0x0004003bu, 0x0000000eu, 0x0000000fu, 0x00000001u, 0x0009001eu, 0x00000010u, 0x00000006u,
0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000011u,
0x00000002u, 0x00000010u, 0x0004003bu, 0x00000011u, 0x00000012u, 0x00000002u, 0x00050036u, 0x00000002u,
0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x00000007u, 0x0000000cu,
0x0000000bu, 0x0003003eu, 0x00000009u, 0x0000000cu, 0x000100fdu, 0x00010038u
0x00030010u, 0x00000004u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001c2u, 0x000a0004u, 0x475f4c47u,
0x4c474f4fu, 0x70635f45u, 0x74735f70u, 0x5f656c79u, 0x656e696cu, 0x7269645fu, 0x69746365u, 0x00006576u,
0x00080004u, 0x475f4c47u, 0x4c474f4fu, 0x6e695f45u, 0x64756c63u, 0x69645f65u, 0x74636572u, 0x00657669u,
0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00050005u, 0x00000009u, 0x4374756fu, 0x726f6c6fu,
0x00000000u, 0x00050005u, 0x0000000bu, 0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00060005u, 0x0000000fu,
0x67617266u, 0x43786554u, 0x64726f6fu, 0x00000000u, 0x00070005u, 0x00000010u, 0x66696e55u, 0x426d726fu,
0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000010u, 0x00000000u, 0x656d6974u, 0x00000000u,
0x00050006u, 0x00000010u, 0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u, 0x00000010u, 0x00000002u,
0x59736572u, 0x00000000u, 0x00060006u, 0x00000010u, 0x00000003u, 0x61746f72u, 0x6e6f6974u, 0x00000000u,
0x00060006u, 0x00000010u, 0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u, 0x00060006u, 0x00000010u,
0x00000005u, 0x64646170u, 0x31676e69u, 0x00000000u, 0x00060006u, 0x00000010u, 0x00000006u, 0x64646170u,
0x32676e69u, 0x00000000u, 0x00030005u, 0x00000012u, 0x006f6275u, 0x00040047u, 0x00000009u, 0x0000001eu,
0x00000000u, 0x00040047u, 0x0000000bu, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000000fu, 0x0000001eu,
0x00000001u, 0x00030047u, 0x00000010u, 0x00000002u, 0x00050048u, 0x00000010u, 0x00000000u, 0x00000023u,
0x00000000u, 0x00050048u, 0x00000010u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000010u,
0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000010u, 0x00000003u, 0x00000023u, 0x0000000cu,
0x00050048u, 0x00000010u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000010u, 0x00000005u,
0x00000023u, 0x00000014u, 0x00050048u, 0x00000010u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00040047u,
0x00000012u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000012u, 0x00000022u, 0x00000000u, 0x00020013u,
0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u,
0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000003u, 0x00000007u, 0x0004003bu,
0x00000008u, 0x00000009u, 0x00000003u, 0x00040020u, 0x0000000au, 0x00000001u, 0x00000007u, 0x0004003bu,
0x0000000au, 0x0000000bu, 0x00000001u, 0x00040017u, 0x0000000du, 0x00000006u, 0x00000002u, 0x00040020u,
0x0000000eu, 0x00000001u, 0x0000000du, 0x0004003bu, 0x0000000eu, 0x0000000fu, 0x00000001u, 0x0009001eu,
0x00000010u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u,
0x00040020u, 0x00000011u, 0x00000002u, 0x00000010u, 0x0004003bu, 0x00000011u, 0x00000012u, 0x00000002u,
0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du,
0x00000007u, 0x0000000cu, 0x0000000bu, 0x0003003eu, 0x00000009u, 0x0000000cu, 0x000100fdu, 0x00010038u

View File

@ -1,70 +1,68 @@
// Auto-generated from geometry.vert.spv
// Size: 2160 bytes (540 words)
0x07230203u, 0x00010000u, 0x0008000bu, 0x00000040u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
// Size: 2096 bytes (524 words)
0x07230203u, 0x00010000u, 0x000d000bu, 0x0000003cu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u,
0x000b000fu, 0x00000000u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000fu, 0x00000030u, 0x00000038u,
0x0000003au, 0x0000003du, 0x0000003eu, 0x00030003u, 0x00000002u, 0x000001c2u, 0x00040005u, 0x00000004u,
0x6e69616du, 0x00000000u, 0x00060005u, 0x00000008u, 0x64726168u, 0x65646f63u, 0x64695764u, 0x00006874u,
0x00060005u, 0x0000000au, 0x64726168u, 0x65646f63u, 0x69654864u, 0x00746867u, 0x00040005u, 0x0000000cu,
0x5863646eu, 0x00000000u, 0x00050005u, 0x0000000fu, 0x6f506e69u, 0x69746973u, 0x00006e6fu, 0x00070005u,
0x00000015u, 0x66696e55u, 0x426d726fu, 0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000015u,
0x00000000u, 0x656d6974u, 0x00000000u, 0x00050006u, 0x00000015u, 0x00000001u, 0x58736572u, 0x00000000u,
0x00050006u, 0x00000015u, 0x00000002u, 0x59736572u, 0x00000000u, 0x00060006u, 0x00000015u, 0x00000003u,
0x61746f72u, 0x6e6f6974u, 0x00000000u, 0x00060006u, 0x00000015u, 0x00000004u, 0x65766177u, 0x73616850u,
0x00000065u, 0x00060006u, 0x00000015u, 0x00000005u, 0x64646170u, 0x31676e69u, 0x00000000u, 0x00060006u,
0x00000015u, 0x00000006u, 0x64646170u, 0x32676e69u, 0x00000000u, 0x00030005u, 0x00000017u, 0x006f6275u,
0x00040005u, 0x00000022u, 0x5963646eu, 0x00000000u, 0x00060005u, 0x0000002eu, 0x505f6c67u, 0x65567265u,
0x78657472u, 0x00000000u, 0x00060006u, 0x0000002eu, 0x00000000u, 0x505f6c67u, 0x7469736fu, 0x006e6f69u,
0x00070006u, 0x0000002eu, 0x00000001u, 0x505f6c67u, 0x746e696fu, 0x657a6953u, 0x00000000u, 0x00070006u,
0x0000002eu, 0x00000002u, 0x435f6c67u, 0x4470696cu, 0x61747369u, 0x0065636eu, 0x00070006u, 0x0000002eu,
0x00000003u, 0x435f6c67u, 0x446c6c75u, 0x61747369u, 0x0065636eu, 0x00030005u, 0x00000030u, 0x00000000u,
0x00050005u, 0x00000038u, 0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00040005u, 0x0000003au, 0x6f436e69u,
0x00726f6cu, 0x00060005u, 0x0000003du, 0x67617266u, 0x43786554u, 0x64726f6fu, 0x00000000u, 0x00050005u,
0x0000003eu, 0x65546e69u, 0x6f6f4378u, 0x00006472u, 0x00040047u, 0x0000000fu, 0x0000001eu, 0x00000000u,
0x00050048u, 0x00000015u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000015u, 0x00000001u,
0x00000023u, 0x00000004u, 0x00050048u, 0x00000015u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u,
0x00000015u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000015u, 0x00000004u, 0x00000023u,
0x00000010u, 0x00050048u, 0x00000015u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000015u,
0x00000006u, 0x00000023u, 0x00000018u, 0x00030047u, 0x00000015u, 0x00000002u, 0x00040047u, 0x00000017u,
0x00000022u, 0x00000000u, 0x00040047u, 0x00000017u, 0x00000021u, 0x00000000u, 0x00050048u, 0x0000002eu,
0x00000000u, 0x0000000bu, 0x00000000u, 0x00050048u, 0x0000002eu, 0x00000001u, 0x0000000bu, 0x00000001u,
0x00050048u, 0x0000002eu, 0x00000002u, 0x0000000bu, 0x00000003u, 0x00050048u, 0x0000002eu, 0x00000003u,
0x0000000bu, 0x00000004u, 0x00030047u, 0x0000002eu, 0x00000002u, 0x00040047u, 0x00000038u, 0x0000001eu,
0x00000000u, 0x00040047u, 0x0000003au, 0x0000001eu, 0x00000001u, 0x00040047u, 0x0000003du, 0x0000001eu,
0x00000001u, 0x00040047u, 0x0000003eu, 0x0000001eu, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u,
0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040020u, 0x00000007u, 0x00000007u,
0x00000006u, 0x0004002bu, 0x00000006u, 0x00000009u, 0x443d0000u, 0x0004002bu, 0x00000006u, 0x0000000bu,
0x43d48000u, 0x00040017u, 0x0000000du, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000000eu, 0x00000001u,
0x0000000du, 0x0004003bu, 0x0000000eu, 0x0000000fu, 0x00000001u, 0x00040015u, 0x00000010u, 0x00000020u,
0x00000000u, 0x0004002bu, 0x00000010u, 0x00000011u, 0x00000000u, 0x00040020u, 0x00000012u, 0x00000001u,
0x00000006u, 0x0009001eu, 0x00000015u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u,
0x00000006u, 0x00000006u, 0x00040020u, 0x00000016u, 0x00000002u, 0x00000015u, 0x0004003bu, 0x00000016u,
0x00000017u, 0x00000002u, 0x00040015u, 0x00000018u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000018u,
0x00000019u, 0x00000001u, 0x00040020u, 0x0000001au, 0x00000002u, 0x00000006u, 0x0004002bu, 0x00000006u,
0x0000001eu, 0x40000000u, 0x0004002bu, 0x00000006u, 0x00000020u, 0x3f800000u, 0x0004002bu, 0x00000010u,
0x00000023u, 0x00000001u, 0x0004002bu, 0x00000018u, 0x00000026u, 0x00000002u, 0x00040017u, 0x0000002cu,
0x00000006u, 0x00000004u, 0x0004001cu, 0x0000002du, 0x00000006u, 0x00000023u, 0x0006001eu, 0x0000002eu,
0x0000002cu, 0x00000006u, 0x0000002du, 0x0000002du, 0x00040020u, 0x0000002fu, 0x00000003u, 0x0000002eu,
0x0004003bu, 0x0000002fu, 0x00000030u, 0x00000003u, 0x0004002bu, 0x00000018u, 0x00000031u, 0x00000000u,
0x0004002bu, 0x00000006u, 0x00000034u, 0x00000000u, 0x00040020u, 0x00000036u, 0x00000003u, 0x0000002cu,
0x0004003bu, 0x00000036u, 0x00000038u, 0x00000003u, 0x00040020u, 0x00000039u, 0x00000001u, 0x0000002cu,
0x0004003bu, 0x00000039u, 0x0000003au, 0x00000001u, 0x00040020u, 0x0000003cu, 0x00000003u, 0x0000000du,
0x0004003bu, 0x0000003cu, 0x0000003du, 0x00000003u, 0x0004003bu, 0x0000000eu, 0x0000003eu, 0x00000001u,
0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu,
0x00000007u, 0x00000008u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000000au, 0x00000007u, 0x0004003bu,
0x00000007u, 0x0000000cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000022u, 0x00000007u, 0x0003003eu,
0x00000008u, 0x00000009u, 0x0003003eu, 0x0000000au, 0x0000000bu, 0x00050041u, 0x00000012u, 0x00000013u,
0x0000000fu, 0x00000011u, 0x0004003du, 0x00000006u, 0x00000014u, 0x00000013u, 0x00050041u, 0x0000001au,
0x0000001bu, 0x00000017u, 0x00000019u, 0x0004003du, 0x00000006u, 0x0000001cu, 0x0000001bu, 0x00050088u,
0x00000006u, 0x0000001du, 0x00000014u, 0x0000001cu, 0x00050085u, 0x00000006u, 0x0000001fu, 0x0000001du,
0x0000001eu, 0x00050083u, 0x00000006u, 0x00000021u, 0x0000001fu, 0x00000020u, 0x0003003eu, 0x0000000cu,
0x00000021u, 0x00050041u, 0x00000012u, 0x00000024u, 0x0000000fu, 0x00000023u, 0x0004003du, 0x00000006u,
0x00000025u, 0x00000024u, 0x00050041u, 0x0000001au, 0x00000027u, 0x00000017u, 0x00000026u, 0x0004003du,
0x00000006u, 0x00000028u, 0x00000027u, 0x00050088u, 0x00000006u, 0x00000029u, 0x00000025u, 0x00000028u,
0x00050085u, 0x00000006u, 0x0000002au, 0x00000029u, 0x0000001eu, 0x00050083u, 0x00000006u, 0x0000002bu,
0x0000002au, 0x00000020u, 0x0003003eu, 0x00000022u, 0x0000002bu, 0x0004003du, 0x00000006u, 0x00000032u,
0x0000000cu, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000022u, 0x00070050u, 0x0000002cu, 0x00000035u,
0x00000032u, 0x00000033u, 0x00000034u, 0x00000020u, 0x00050041u, 0x00000036u, 0x00000037u, 0x00000030u,
0x00000031u, 0x0003003eu, 0x00000037u, 0x00000035u, 0x0004003du, 0x0000002cu, 0x0000003bu, 0x0000003au,
0x0003003eu, 0x00000038u, 0x0000003bu, 0x0004003du, 0x0000000du, 0x0000003fu, 0x0000003eu, 0x0003003eu,
0x0000003du, 0x0000003fu, 0x000100fdu, 0x00010038u
0x000b000fu, 0x00000000u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000bu, 0x0000002cu, 0x00000034u,
0x00000036u, 0x00000039u, 0x0000003au, 0x00030003u, 0x00000002u, 0x000001c2u, 0x000a0004u, 0x475f4c47u,
0x4c474f4fu, 0x70635f45u, 0x74735f70u, 0x5f656c79u, 0x656e696cu, 0x7269645fu, 0x69746365u, 0x00006576u,
0x00080004u, 0x475f4c47u, 0x4c474f4fu, 0x6e695f45u, 0x64756c63u, 0x69645f65u, 0x74636572u, 0x00657669u,
0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00040005u, 0x00000008u, 0x5863646eu, 0x00000000u,
0x00050005u, 0x0000000bu, 0x6f506e69u, 0x69746973u, 0x00006e6fu, 0x00070005u, 0x00000011u, 0x66696e55u,
0x426d726fu, 0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000011u, 0x00000000u, 0x656d6974u,
0x00000000u, 0x00050006u, 0x00000011u, 0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u, 0x00000011u,
0x00000002u, 0x59736572u, 0x00000000u, 0x00060006u, 0x00000011u, 0x00000003u, 0x61746f72u, 0x6e6f6974u,
0x00000000u, 0x00060006u, 0x00000011u, 0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u, 0x00060006u,
0x00000011u, 0x00000005u, 0x64646170u, 0x31676e69u, 0x00000000u, 0x00060006u, 0x00000011u, 0x00000006u,
0x64646170u, 0x32676e69u, 0x00000000u, 0x00030005u, 0x00000013u, 0x006f6275u, 0x00040005u, 0x0000001eu,
0x5963646eu, 0x00000000u, 0x00060005u, 0x0000002au, 0x505f6c67u, 0x65567265u, 0x78657472u, 0x00000000u,
0x00060006u, 0x0000002au, 0x00000000u, 0x505f6c67u, 0x7469736fu, 0x006e6f69u, 0x00070006u, 0x0000002au,
0x00000001u, 0x505f6c67u, 0x746e696fu, 0x657a6953u, 0x00000000u, 0x00070006u, 0x0000002au, 0x00000002u,
0x435f6c67u, 0x4470696cu, 0x61747369u, 0x0065636eu, 0x00070006u, 0x0000002au, 0x00000003u, 0x435f6c67u,
0x446c6c75u, 0x61747369u, 0x0065636eu, 0x00030005u, 0x0000002cu, 0x00000000u, 0x00050005u, 0x00000034u,
0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00040005u, 0x00000036u, 0x6f436e69u, 0x00726f6cu, 0x00060005u,
0x00000039u, 0x67617266u, 0x43786554u, 0x64726f6fu, 0x00000000u, 0x00050005u, 0x0000003au, 0x65546e69u,
0x6f6f4378u, 0x00006472u, 0x00040047u, 0x0000000bu, 0x0000001eu, 0x00000000u, 0x00030047u, 0x00000011u,
0x00000002u, 0x00050048u, 0x00000011u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000011u,
0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000011u, 0x00000002u, 0x00000023u, 0x00000008u,
0x00050048u, 0x00000011u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000011u, 0x00000004u,
0x00000023u, 0x00000010u, 0x00050048u, 0x00000011u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u,
0x00000011u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00040047u, 0x00000013u, 0x00000021u, 0x00000000u,
0x00040047u, 0x00000013u, 0x00000022u, 0x00000000u, 0x00030047u, 0x0000002au, 0x00000002u, 0x00050048u,
0x0000002au, 0x00000000u, 0x0000000bu, 0x00000000u, 0x00050048u, 0x0000002au, 0x00000001u, 0x0000000bu,
0x00000001u, 0x00050048u, 0x0000002au, 0x00000002u, 0x0000000bu, 0x00000003u, 0x00050048u, 0x0000002au,
0x00000003u, 0x0000000bu, 0x00000004u, 0x00040047u, 0x00000034u, 0x0000001eu, 0x00000000u, 0x00040047u,
0x00000036u, 0x0000001eu, 0x00000001u, 0x00040047u, 0x00000039u, 0x0000001eu, 0x00000001u, 0x00040047u,
0x0000003au, 0x0000001eu, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u,
0x00030016u, 0x00000006u, 0x00000020u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040017u,
0x00000009u, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000000au, 0x00000001u, 0x00000009u, 0x0004003bu,
0x0000000au, 0x0000000bu, 0x00000001u, 0x00040015u, 0x0000000cu, 0x00000020u, 0x00000000u, 0x0004002bu,
0x0000000cu, 0x0000000du, 0x00000000u, 0x00040020u, 0x0000000eu, 0x00000001u, 0x00000006u, 0x0009001eu,
0x00000011u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u,
0x00040020u, 0x00000012u, 0x00000002u, 0x00000011u, 0x0004003bu, 0x00000012u, 0x00000013u, 0x00000002u,
0x00040015u, 0x00000014u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000014u, 0x00000015u, 0x00000001u,
0x00040020u, 0x00000016u, 0x00000002u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000001au, 0x40000000u,
0x0004002bu, 0x00000006u, 0x0000001cu, 0x3f800000u, 0x0004002bu, 0x0000000cu, 0x0000001fu, 0x00000001u,
0x0004002bu, 0x00000014u, 0x00000022u, 0x00000002u, 0x00040017u, 0x00000028u, 0x00000006u, 0x00000004u,
0x0004001cu, 0x00000029u, 0x00000006u, 0x0000001fu, 0x0006001eu, 0x0000002au, 0x00000028u, 0x00000006u,
0x00000029u, 0x00000029u, 0x00040020u, 0x0000002bu, 0x00000003u, 0x0000002au, 0x0004003bu, 0x0000002bu,
0x0000002cu, 0x00000003u, 0x0004002bu, 0x00000014u, 0x0000002du, 0x00000000u, 0x0004002bu, 0x00000006u,
0x00000030u, 0x00000000u, 0x00040020u, 0x00000032u, 0x00000003u, 0x00000028u, 0x0004003bu, 0x00000032u,
0x00000034u, 0x00000003u, 0x00040020u, 0x00000035u, 0x00000001u, 0x00000028u, 0x0004003bu, 0x00000035u,
0x00000036u, 0x00000001u, 0x00040020u, 0x00000038u, 0x00000003u, 0x00000009u, 0x0004003bu, 0x00000038u,
0x00000039u, 0x00000003u, 0x0004003bu, 0x0000000au, 0x0000003au, 0x00000001u, 0x00050036u, 0x00000002u,
0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000008u,
0x00000007u, 0x0004003bu, 0x00000007u, 0x0000001eu, 0x00000007u, 0x00050041u, 0x0000000eu, 0x0000000fu,
0x0000000bu, 0x0000000du, 0x0004003du, 0x00000006u, 0x00000010u, 0x0000000fu, 0x00050041u, 0x00000016u,
0x00000017u, 0x00000013u, 0x00000015u, 0x0004003du, 0x00000006u, 0x00000018u, 0x00000017u, 0x00050088u,
0x00000006u, 0x00000019u, 0x00000010u, 0x00000018u, 0x00050085u, 0x00000006u, 0x0000001bu, 0x00000019u,
0x0000001au, 0x00050083u, 0x00000006u, 0x0000001du, 0x0000001bu, 0x0000001cu, 0x0003003eu, 0x00000008u,
0x0000001du, 0x00050041u, 0x0000000eu, 0x00000020u, 0x0000000bu, 0x0000001fu, 0x0004003du, 0x00000006u,
0x00000021u, 0x00000020u, 0x00050041u, 0x00000016u, 0x00000023u, 0x00000013u, 0x00000022u, 0x0004003du,
0x00000006u, 0x00000024u, 0x00000023u, 0x00050088u, 0x00000006u, 0x00000025u, 0x00000021u, 0x00000024u,
0x00050085u, 0x00000006u, 0x00000026u, 0x00000025u, 0x0000001au, 0x00050083u, 0x00000006u, 0x00000027u,
0x00000026u, 0x0000001cu, 0x0003003eu, 0x0000001eu, 0x00000027u, 0x0004003du, 0x00000006u, 0x0000002eu,
0x00000008u, 0x0004003du, 0x00000006u, 0x0000002fu, 0x0000001eu, 0x00070050u, 0x00000028u, 0x00000031u,
0x0000002eu, 0x0000002fu, 0x00000030u, 0x0000001cu, 0x00050041u, 0x00000032u, 0x00000033u, 0x0000002cu,
0x0000002du, 0x0003003eu, 0x00000033u, 0x00000031u, 0x0004003du, 0x00000028u, 0x00000037u, 0x00000036u,
0x0003003eu, 0x00000034u, 0x00000037u, 0x0004003du, 0x00000009u, 0x0000003bu, 0x0000003au, 0x0003003eu,
0x00000039u, 0x0000003bu, 0x000100fdu, 0x00010038u

Binary file not shown.

Binary file not shown.

View File

@ -1,48 +1,50 @@
// Auto-generated from text.frag.spv
// Size: 1456 bytes (364 words)
0x07230203u, 0x00010000u, 0x0008000bu, 0x0000002bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
// Size: 1528 bytes (382 words)
0x07230203u, 0x00010000u, 0x000d000bu, 0x0000002bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u,
0x0008000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000010u, 0x00000018u, 0x0000001au,
0x00030010u, 0x00000004u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001c2u, 0x00040005u, 0x00000004u,
0x6e69616du, 0x00000000u, 0x00040005u, 0x00000008u, 0x68706c61u, 0x00000061u, 0x00050005u, 0x0000000cu,
0x53786574u, 0x6c706d61u, 0x00007265u, 0x00060005u, 0x00000010u, 0x67617266u, 0x43786554u, 0x64726f6fu,
0x00000000u, 0x00050005u, 0x00000018u, 0x4374756fu, 0x726f6c6fu, 0x00000000u, 0x00050005u, 0x0000001au,
0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00070005u, 0x00000028u, 0x66696e55u, 0x426d726fu, 0x65666675u,
0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000028u, 0x00000000u, 0x656d6974u, 0x00000000u, 0x00050006u,
0x00000028u, 0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u, 0x00000028u, 0x00000002u, 0x59736572u,
0x00000000u, 0x00060006u, 0x00000028u, 0x00000003u, 0x61746f72u, 0x6e6f6974u, 0x00000000u, 0x00060006u,
0x00000028u, 0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u, 0x00060006u, 0x00000028u, 0x00000005u,
0x64646170u, 0x31676e69u, 0x00000000u, 0x00060006u, 0x00000028u, 0x00000006u, 0x64646170u, 0x32676e69u,
0x00000000u, 0x00030005u, 0x0000002au, 0x006f6275u, 0x00040047u, 0x0000000cu, 0x00000022u, 0x00000000u,
0x00040047u, 0x0000000cu, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000010u, 0x0000001eu, 0x00000001u,
0x00040047u, 0x00000018u, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000001au, 0x0000001eu, 0x00000000u,
0x00050048u, 0x00000028u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000028u, 0x00000001u,
0x00000023u, 0x00000004u, 0x00050048u, 0x00000028u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u,
0x00000028u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000028u, 0x00000004u, 0x00000023u,
0x00000010u, 0x00050048u, 0x00000028u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000028u,
0x00000006u, 0x00000023u, 0x00000018u, 0x00030047u, 0x00000028u, 0x00000002u, 0x00040047u, 0x0000002au,
0x00000022u, 0x00000000u, 0x00040047u, 0x0000002au, 0x00000021u, 0x00000000u, 0x00020013u, 0x00000002u,
0x00030021u, 0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040020u, 0x00000007u,
0x00000007u, 0x00000006u, 0x00090019u, 0x00000009u, 0x00000006u, 0x00000001u, 0x00000000u, 0x00000000u,
0x00000000u, 0x00000001u, 0x00000000u, 0x0003001bu, 0x0000000au, 0x00000009u, 0x00040020u, 0x0000000bu,
0x00000000u, 0x0000000au, 0x0004003bu, 0x0000000bu, 0x0000000cu, 0x00000000u, 0x00040017u, 0x0000000eu,
0x00000006u, 0x00000002u, 0x00040020u, 0x0000000fu, 0x00000001u, 0x0000000eu, 0x0004003bu, 0x0000000fu,
0x00000010u, 0x00000001u, 0x00040017u, 0x00000012u, 0x00000006u, 0x00000004u, 0x00040015u, 0x00000014u,
0x00000020u, 0x00000000u, 0x0004002bu, 0x00000014u, 0x00000015u, 0x00000000u, 0x00040020u, 0x00000017u,
0x00000003u, 0x00000012u, 0x0004003bu, 0x00000017u, 0x00000018u, 0x00000003u, 0x00040020u, 0x00000019u,
0x00000001u, 0x00000012u, 0x0004003bu, 0x00000019u, 0x0000001au, 0x00000001u, 0x00040017u, 0x0000001bu,
0x00000006u, 0x00000003u, 0x0004002bu, 0x00000014u, 0x0000001eu, 0x00000003u, 0x00040020u, 0x0000001fu,
0x00000001u, 0x00000006u, 0x0009001eu, 0x00000028u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u,
0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000029u, 0x00000002u, 0x00000028u, 0x0004003bu,
0x00000029u, 0x0000002au, 0x00000002u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u,
0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000008u, 0x00000007u, 0x0004003du, 0x0000000au,
0x0000000du, 0x0000000cu, 0x0004003du, 0x0000000eu, 0x00000011u, 0x00000010u, 0x00050057u, 0x00000012u,
0x00000013u, 0x0000000du, 0x00000011u, 0x00050051u, 0x00000006u, 0x00000016u, 0x00000013u, 0x00000000u,
0x0003003eu, 0x00000008u, 0x00000016u, 0x0004003du, 0x00000012u, 0x0000001cu, 0x0000001au, 0x0008004fu,
0x0000001bu, 0x0000001du, 0x0000001cu, 0x0000001cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050041u,
0x0000001fu, 0x00000020u, 0x0000001au, 0x0000001eu, 0x0004003du, 0x00000006u, 0x00000021u, 0x00000020u,
0x0004003du, 0x00000006u, 0x00000022u, 0x00000008u, 0x00050085u, 0x00000006u, 0x00000023u, 0x00000021u,
0x00000022u, 0x00050051u, 0x00000006u, 0x00000024u, 0x0000001du, 0x00000000u, 0x00050051u, 0x00000006u,
0x00000025u, 0x0000001du, 0x00000001u, 0x00050051u, 0x00000006u, 0x00000026u, 0x0000001du, 0x00000002u,
0x00070050u, 0x00000012u, 0x00000027u, 0x00000024u, 0x00000025u, 0x00000026u, 0x00000023u, 0x0003003eu,
0x00000018u, 0x00000027u, 0x000100fdu, 0x00010038u
0x00030010u, 0x00000004u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001c2u, 0x000a0004u, 0x475f4c47u,
0x4c474f4fu, 0x70635f45u, 0x74735f70u, 0x5f656c79u, 0x656e696cu, 0x7269645fu, 0x69746365u, 0x00006576u,
0x00080004u, 0x475f4c47u, 0x4c474f4fu, 0x6e695f45u, 0x64756c63u, 0x69645f65u, 0x74636572u, 0x00657669u,
0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00040005u, 0x00000008u, 0x68706c61u, 0x00000061u,
0x00050005u, 0x0000000cu, 0x53786574u, 0x6c706d61u, 0x00007265u, 0x00060005u, 0x00000010u, 0x67617266u,
0x43786554u, 0x64726f6fu, 0x00000000u, 0x00050005u, 0x00000018u, 0x4374756fu, 0x726f6c6fu, 0x00000000u,
0x00050005u, 0x0000001au, 0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00070005u, 0x00000028u, 0x66696e55u,
0x426d726fu, 0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000028u, 0x00000000u, 0x656d6974u,
0x00000000u, 0x00050006u, 0x00000028u, 0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u, 0x00000028u,
0x00000002u, 0x59736572u, 0x00000000u, 0x00060006u, 0x00000028u, 0x00000003u, 0x61746f72u, 0x6e6f6974u,
0x00000000u, 0x00060006u, 0x00000028u, 0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u, 0x00060006u,
0x00000028u, 0x00000005u, 0x64646170u, 0x31676e69u, 0x00000000u, 0x00060006u, 0x00000028u, 0x00000006u,
0x64646170u, 0x32676e69u, 0x00000000u, 0x00030005u, 0x0000002au, 0x006f6275u, 0x00040047u, 0x0000000cu,
0x00000021u, 0x00000001u, 0x00040047u, 0x0000000cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000010u,
0x0000001eu, 0x00000001u, 0x00040047u, 0x00000018u, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000001au,
0x0000001eu, 0x00000000u, 0x00030047u, 0x00000028u, 0x00000002u, 0x00050048u, 0x00000028u, 0x00000000u,
0x00000023u, 0x00000000u, 0x00050048u, 0x00000028u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u,
0x00000028u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000028u, 0x00000003u, 0x00000023u,
0x0000000cu, 0x00050048u, 0x00000028u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000028u,
0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000028u, 0x00000006u, 0x00000023u, 0x00000018u,
0x00040047u, 0x0000002au, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000002au, 0x00000022u, 0x00000000u,
0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u,
0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00090019u, 0x00000009u, 0x00000006u, 0x00000001u,
0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x0003001bu, 0x0000000au, 0x00000009u,
0x00040020u, 0x0000000bu, 0x00000000u, 0x0000000au, 0x0004003bu, 0x0000000bu, 0x0000000cu, 0x00000000u,
0x00040017u, 0x0000000eu, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000000fu, 0x00000001u, 0x0000000eu,
0x0004003bu, 0x0000000fu, 0x00000010u, 0x00000001u, 0x00040017u, 0x00000012u, 0x00000006u, 0x00000004u,
0x00040015u, 0x00000014u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000014u, 0x00000015u, 0x00000000u,
0x00040020u, 0x00000017u, 0x00000003u, 0x00000012u, 0x0004003bu, 0x00000017u, 0x00000018u, 0x00000003u,
0x00040020u, 0x00000019u, 0x00000001u, 0x00000012u, 0x0004003bu, 0x00000019u, 0x0000001au, 0x00000001u,
0x00040017u, 0x0000001bu, 0x00000006u, 0x00000003u, 0x0004002bu, 0x00000014u, 0x0000001eu, 0x00000003u,
0x00040020u, 0x0000001fu, 0x00000001u, 0x00000006u, 0x0009001eu, 0x00000028u, 0x00000006u, 0x00000006u,
0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000029u, 0x00000002u,
0x00000028u, 0x0004003bu, 0x00000029u, 0x0000002au, 0x00000002u, 0x00050036u, 0x00000002u, 0x00000004u,
0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000008u, 0x00000007u,
0x0004003du, 0x0000000au, 0x0000000du, 0x0000000cu, 0x0004003du, 0x0000000eu, 0x00000011u, 0x00000010u,
0x00050057u, 0x00000012u, 0x00000013u, 0x0000000du, 0x00000011u, 0x00050051u, 0x00000006u, 0x00000016u,
0x00000013u, 0x00000000u, 0x0003003eu, 0x00000008u, 0x00000016u, 0x0004003du, 0x00000012u, 0x0000001cu,
0x0000001au, 0x0008004fu, 0x0000001bu, 0x0000001du, 0x0000001cu, 0x0000001cu, 0x00000000u, 0x00000001u,
0x00000002u, 0x00050041u, 0x0000001fu, 0x00000020u, 0x0000001au, 0x0000001eu, 0x0004003du, 0x00000006u,
0x00000021u, 0x00000020u, 0x0004003du, 0x00000006u, 0x00000022u, 0x00000008u, 0x00050085u, 0x00000006u,
0x00000023u, 0x00000021u, 0x00000022u, 0x00050051u, 0x00000006u, 0x00000024u, 0x0000001du, 0x00000000u,
0x00050051u, 0x00000006u, 0x00000025u, 0x0000001du, 0x00000001u, 0x00050051u, 0x00000006u, 0x00000026u,
0x0000001du, 0x00000002u, 0x00070050u, 0x00000012u, 0x00000027u, 0x00000024u, 0x00000025u, 0x00000026u,
0x00000023u, 0x0003003eu, 0x00000018u, 0x00000027u, 0x000100fdu, 0x00010038u

View File

@ -1,67 +1,70 @@
// Auto-generated from text.vert.spv
// Size: 2080 bytes (520 words)
0x07230203u, 0x00010000u, 0x0008000bu, 0x0000003eu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
// Size: 2152 bytes (538 words)
0x07230203u, 0x00010000u, 0x000d000bu, 0x0000003eu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu,
0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u,
0x000b000fu, 0x00000000u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000bu, 0x0000002eu, 0x00000036u,
0x00000038u, 0x0000003bu, 0x0000003cu, 0x00030003u, 0x00000002u, 0x000001c2u, 0x00040005u, 0x00000004u,
0x6e69616du, 0x00000000u, 0x00030005u, 0x00000009u, 0x00736f70u, 0x00050005u, 0x0000000bu, 0x6f506e69u,
0x69746973u, 0x00006e6fu, 0x00040005u, 0x0000000eu, 0x5863646eu, 0x00000000u, 0x00070005u, 0x00000013u,
0x66696e55u, 0x426d726fu, 0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u, 0x00000013u, 0x00000000u,
0x656d6974u, 0x00000000u, 0x00050006u, 0x00000013u, 0x00000001u, 0x58736572u, 0x00000000u, 0x00050006u,
0x00000013u, 0x00000002u, 0x59736572u, 0x00000000u, 0x00060006u, 0x00000013u, 0x00000003u, 0x61746f72u,
0x6e6f6974u, 0x00000000u, 0x00060006u, 0x00000013u, 0x00000004u, 0x65766177u, 0x73616850u, 0x00000065u,
0x00060006u, 0x00000013u, 0x00000005u, 0x64646170u, 0x31676e69u, 0x00000000u, 0x00060006u, 0x00000013u,
0x00000006u, 0x64646170u, 0x32676e69u, 0x00000000u, 0x00030005u, 0x00000015u, 0x006f6275u, 0x00040005u,
0x00000020u, 0x5963646eu, 0x00000000u, 0x00060005u, 0x0000002cu, 0x505f6c67u, 0x65567265u, 0x78657472u,
0x00000000u, 0x00060006u, 0x0000002cu, 0x00000000u, 0x505f6c67u, 0x7469736fu, 0x006e6f69u, 0x00070006u,
0x0000002cu, 0x00000001u, 0x505f6c67u, 0x746e696fu, 0x657a6953u, 0x00000000u, 0x00070006u, 0x0000002cu,
0x00000002u, 0x435f6c67u, 0x4470696cu, 0x61747369u, 0x0065636eu, 0x00070006u, 0x0000002cu, 0x00000003u,
0x435f6c67u, 0x446c6c75u, 0x61747369u, 0x0065636eu, 0x00030005u, 0x0000002eu, 0x00000000u, 0x00050005u,
0x00000036u, 0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00040005u, 0x00000038u, 0x6f436e69u, 0x00726f6cu,
0x00060005u, 0x0000003bu, 0x67617266u, 0x43786554u, 0x64726f6fu, 0x00000000u, 0x00050005u, 0x0000003cu,
0x65546e69u, 0x6f6f4378u, 0x00006472u, 0x00040047u, 0x0000000bu, 0x0000001eu, 0x00000000u, 0x00050048u,
0x00000013u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000013u, 0x00000001u, 0x00000023u,
0x00000004u, 0x00050048u, 0x00000013u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000013u,
0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000013u, 0x00000004u, 0x00000023u, 0x00000010u,
0x00050048u, 0x00000013u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000013u, 0x00000006u,
0x00000023u, 0x00000018u, 0x00030047u, 0x00000013u, 0x00000002u, 0x00040047u, 0x00000015u, 0x00000022u,
0x00000000u, 0x00040047u, 0x00000015u, 0x00000021u, 0x00000000u, 0x00050048u, 0x0000002cu, 0x00000000u,
0x0000000bu, 0x00000000u, 0x00050048u, 0x0000002cu, 0x00000001u, 0x0000000bu, 0x00000001u, 0x00050048u,
0x0000002cu, 0x00000002u, 0x0000000bu, 0x00000003u, 0x00050048u, 0x0000002cu, 0x00000003u, 0x0000000bu,
0x00000004u, 0x00030047u, 0x0000002cu, 0x00000002u, 0x00040047u, 0x00000036u, 0x0000001eu, 0x00000000u,
0x00040047u, 0x00000038u, 0x0000001eu, 0x00000001u, 0x00040047u, 0x0000003bu, 0x0000001eu, 0x00000001u,
0x00040047u, 0x0000003cu, 0x0000001eu, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u,
0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000002u,
0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040020u, 0x0000000au, 0x00000001u, 0x00000007u,
0x0004003bu, 0x0000000au, 0x0000000bu, 0x00000001u, 0x00040020u, 0x0000000du, 0x00000007u, 0x00000006u,
0x00040015u, 0x0000000fu, 0x00000020u, 0x00000000u, 0x0004002bu, 0x0000000fu, 0x00000010u, 0x00000000u,
0x0009001eu, 0x00000013u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u,
0x00000006u, 0x00040020u, 0x00000014u, 0x00000002u, 0x00000013u, 0x0004003bu, 0x00000014u, 0x00000015u,
0x00000002u, 0x00040015u, 0x00000016u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000016u, 0x00000017u,
0x00000001u, 0x00040020u, 0x00000018u, 0x00000002u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000001cu,
0x40000000u, 0x0004002bu, 0x00000006u, 0x0000001eu, 0x3f800000u, 0x0004002bu, 0x0000000fu, 0x00000021u,
0x00000001u, 0x0004002bu, 0x00000016u, 0x00000024u, 0x00000002u, 0x00040017u, 0x0000002au, 0x00000006u,
0x00000004u, 0x0004001cu, 0x0000002bu, 0x00000006u, 0x00000021u, 0x0006001eu, 0x0000002cu, 0x0000002au,
0x00000006u, 0x0000002bu, 0x0000002bu, 0x00040020u, 0x0000002du, 0x00000003u, 0x0000002cu, 0x0004003bu,
0x0000002du, 0x0000002eu, 0x00000003u, 0x0004002bu, 0x00000016u, 0x0000002fu, 0x00000000u, 0x0004002bu,
0x00000006u, 0x00000032u, 0x00000000u, 0x00040020u, 0x00000034u, 0x00000003u, 0x0000002au, 0x0004003bu,
0x00000034u, 0x00000036u, 0x00000003u, 0x00040020u, 0x00000037u, 0x00000001u, 0x0000002au, 0x0004003bu,
0x00000037u, 0x00000038u, 0x00000001u, 0x00040020u, 0x0000003au, 0x00000003u, 0x00000007u, 0x0004003bu,
0x0000003au, 0x0000003bu, 0x00000003u, 0x0004003bu, 0x0000000au, 0x0000003cu, 0x00000001u, 0x00050036u,
0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000008u,
0x00000009u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000000eu, 0x00000007u, 0x0004003bu, 0x0000000du,
0x00000020u, 0x00000007u, 0x0004003du, 0x00000007u, 0x0000000cu, 0x0000000bu, 0x0003003eu, 0x00000009u,
0x0000000cu, 0x00050041u, 0x0000000du, 0x00000011u, 0x00000009u, 0x00000010u, 0x0004003du, 0x00000006u,
0x00000012u, 0x00000011u, 0x00050041u, 0x00000018u, 0x00000019u, 0x00000015u, 0x00000017u, 0x0004003du,
0x00000006u, 0x0000001au, 0x00000019u, 0x00050088u, 0x00000006u, 0x0000001bu, 0x00000012u, 0x0000001au,
0x00050085u, 0x00000006u, 0x0000001du, 0x0000001bu, 0x0000001cu, 0x00050083u, 0x00000006u, 0x0000001fu,
0x0000001du, 0x0000001eu, 0x0003003eu, 0x0000000eu, 0x0000001fu, 0x00050041u, 0x0000000du, 0x00000022u,
0x00000009u, 0x00000021u, 0x0004003du, 0x00000006u, 0x00000023u, 0x00000022u, 0x00050041u, 0x00000018u,
0x00000025u, 0x00000015u, 0x00000024u, 0x0004003du, 0x00000006u, 0x00000026u, 0x00000025u, 0x00050088u,
0x00000006u, 0x00000027u, 0x00000023u, 0x00000026u, 0x00050085u, 0x00000006u, 0x00000028u, 0x00000027u,
0x0000001cu, 0x00050083u, 0x00000006u, 0x00000029u, 0x00000028u, 0x0000001eu, 0x0003003eu, 0x00000020u,
0x00000029u, 0x0004003du, 0x00000006u, 0x00000030u, 0x0000000eu, 0x0004003du, 0x00000006u, 0x00000031u,
0x00000020u, 0x00070050u, 0x0000002au, 0x00000033u, 0x00000030u, 0x00000031u, 0x00000032u, 0x0000001eu,
0x00050041u, 0x00000034u, 0x00000035u, 0x0000002eu, 0x0000002fu, 0x0003003eu, 0x00000035u, 0x00000033u,
0x0004003du, 0x0000002au, 0x00000039u, 0x00000038u, 0x0003003eu, 0x00000036u, 0x00000039u, 0x0004003du,
0x00000007u, 0x0000003du, 0x0000003cu, 0x0003003eu, 0x0000003bu, 0x0000003du, 0x000100fdu, 0x00010038u
0x00000038u, 0x0000003bu, 0x0000003cu, 0x00030003u, 0x00000002u, 0x000001c2u, 0x000a0004u, 0x475f4c47u,
0x4c474f4fu, 0x70635f45u, 0x74735f70u, 0x5f656c79u, 0x656e696cu, 0x7269645fu, 0x69746365u, 0x00006576u,
0x00080004u, 0x475f4c47u, 0x4c474f4fu, 0x6e695f45u, 0x64756c63u, 0x69645f65u, 0x74636572u, 0x00657669u,
0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00030005u, 0x00000009u, 0x00736f70u, 0x00050005u,
0x0000000bu, 0x6f506e69u, 0x69746973u, 0x00006e6fu, 0x00040005u, 0x0000000eu, 0x5863646eu, 0x00000000u,
0x00070005u, 0x00000013u, 0x66696e55u, 0x426d726fu, 0x65666675u, 0x6a624f72u, 0x00746365u, 0x00050006u,
0x00000013u, 0x00000000u, 0x656d6974u, 0x00000000u, 0x00050006u, 0x00000013u, 0x00000001u, 0x58736572u,
0x00000000u, 0x00050006u, 0x00000013u, 0x00000002u, 0x59736572u, 0x00000000u, 0x00060006u, 0x00000013u,
0x00000003u, 0x61746f72u, 0x6e6f6974u, 0x00000000u, 0x00060006u, 0x00000013u, 0x00000004u, 0x65766177u,
0x73616850u, 0x00000065u, 0x00060006u, 0x00000013u, 0x00000005u, 0x64646170u, 0x31676e69u, 0x00000000u,
0x00060006u, 0x00000013u, 0x00000006u, 0x64646170u, 0x32676e69u, 0x00000000u, 0x00030005u, 0x00000015u,
0x006f6275u, 0x00040005u, 0x00000020u, 0x5963646eu, 0x00000000u, 0x00060005u, 0x0000002cu, 0x505f6c67u,
0x65567265u, 0x78657472u, 0x00000000u, 0x00060006u, 0x0000002cu, 0x00000000u, 0x505f6c67u, 0x7469736fu,
0x006e6f69u, 0x00070006u, 0x0000002cu, 0x00000001u, 0x505f6c67u, 0x746e696fu, 0x657a6953u, 0x00000000u,
0x00070006u, 0x0000002cu, 0x00000002u, 0x435f6c67u, 0x4470696cu, 0x61747369u, 0x0065636eu, 0x00070006u,
0x0000002cu, 0x00000003u, 0x435f6c67u, 0x446c6c75u, 0x61747369u, 0x0065636eu, 0x00030005u, 0x0000002eu,
0x00000000u, 0x00050005u, 0x00000036u, 0x67617266u, 0x6f6c6f43u, 0x00000072u, 0x00040005u, 0x00000038u,
0x6f436e69u, 0x00726f6cu, 0x00060005u, 0x0000003bu, 0x67617266u, 0x43786554u, 0x64726f6fu, 0x00000000u,
0x00050005u, 0x0000003cu, 0x65546e69u, 0x6f6f4378u, 0x00006472u, 0x00040047u, 0x0000000bu, 0x0000001eu,
0x00000000u, 0x00030047u, 0x00000013u, 0x00000002u, 0x00050048u, 0x00000013u, 0x00000000u, 0x00000023u,
0x00000000u, 0x00050048u, 0x00000013u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000013u,
0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000013u, 0x00000003u, 0x00000023u, 0x0000000cu,
0x00050048u, 0x00000013u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000013u, 0x00000005u,
0x00000023u, 0x00000014u, 0x00050048u, 0x00000013u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00040047u,
0x00000015u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000015u, 0x00000022u, 0x00000000u, 0x00030047u,
0x0000002cu, 0x00000002u, 0x00050048u, 0x0000002cu, 0x00000000u, 0x0000000bu, 0x00000000u, 0x00050048u,
0x0000002cu, 0x00000001u, 0x0000000bu, 0x00000001u, 0x00050048u, 0x0000002cu, 0x00000002u, 0x0000000bu,
0x00000003u, 0x00050048u, 0x0000002cu, 0x00000003u, 0x0000000bu, 0x00000004u, 0x00040047u, 0x00000036u,
0x0000001eu, 0x00000000u, 0x00040047u, 0x00000038u, 0x0000001eu, 0x00000001u, 0x00040047u, 0x0000003bu,
0x0000001eu, 0x00000001u, 0x00040047u, 0x0000003cu, 0x0000001eu, 0x00000002u, 0x00020013u, 0x00000002u,
0x00030021u, 0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u,
0x00000006u, 0x00000002u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040020u, 0x0000000au,
0x00000001u, 0x00000007u, 0x0004003bu, 0x0000000au, 0x0000000bu, 0x00000001u, 0x00040020u, 0x0000000du,
0x00000007u, 0x00000006u, 0x00040015u, 0x0000000fu, 0x00000020u, 0x00000000u, 0x0004002bu, 0x0000000fu,
0x00000010u, 0x00000000u, 0x0009001eu, 0x00000013u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u,
0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000014u, 0x00000002u, 0x00000013u, 0x0004003bu,
0x00000014u, 0x00000015u, 0x00000002u, 0x00040015u, 0x00000016u, 0x00000020u, 0x00000001u, 0x0004002bu,
0x00000016u, 0x00000017u, 0x00000001u, 0x00040020u, 0x00000018u, 0x00000002u, 0x00000006u, 0x0004002bu,
0x00000006u, 0x0000001cu, 0x40000000u, 0x0004002bu, 0x00000006u, 0x0000001eu, 0x3f800000u, 0x0004002bu,
0x0000000fu, 0x00000021u, 0x00000001u, 0x0004002bu, 0x00000016u, 0x00000024u, 0x00000002u, 0x00040017u,
0x0000002au, 0x00000006u, 0x00000004u, 0x0004001cu, 0x0000002bu, 0x00000006u, 0x00000021u, 0x0006001eu,
0x0000002cu, 0x0000002au, 0x00000006u, 0x0000002bu, 0x0000002bu, 0x00040020u, 0x0000002du, 0x00000003u,
0x0000002cu, 0x0004003bu, 0x0000002du, 0x0000002eu, 0x00000003u, 0x0004002bu, 0x00000016u, 0x0000002fu,
0x00000000u, 0x0004002bu, 0x00000006u, 0x00000032u, 0x00000000u, 0x00040020u, 0x00000034u, 0x00000003u,
0x0000002au, 0x0004003bu, 0x00000034u, 0x00000036u, 0x00000003u, 0x00040020u, 0x00000037u, 0x00000001u,
0x0000002au, 0x0004003bu, 0x00000037u, 0x00000038u, 0x00000001u, 0x00040020u, 0x0000003au, 0x00000003u,
0x00000007u, 0x0004003bu, 0x0000003au, 0x0000003bu, 0x00000003u, 0x0004003bu, 0x0000000au, 0x0000003cu,
0x00000001u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u,
0x0004003bu, 0x00000008u, 0x00000009u, 0x00000007u, 0x0004003bu, 0x0000000du, 0x0000000eu, 0x00000007u,
0x0004003bu, 0x0000000du, 0x00000020u, 0x00000007u, 0x0004003du, 0x00000007u, 0x0000000cu, 0x0000000bu,
0x0003003eu, 0x00000009u, 0x0000000cu, 0x00050041u, 0x0000000du, 0x00000011u, 0x00000009u, 0x00000010u,
0x0004003du, 0x00000006u, 0x00000012u, 0x00000011u, 0x00050041u, 0x00000018u, 0x00000019u, 0x00000015u,
0x00000017u, 0x0004003du, 0x00000006u, 0x0000001au, 0x00000019u, 0x00050088u, 0x00000006u, 0x0000001bu,
0x00000012u, 0x0000001au, 0x00050085u, 0x00000006u, 0x0000001du, 0x0000001bu, 0x0000001cu, 0x00050083u,
0x00000006u, 0x0000001fu, 0x0000001du, 0x0000001eu, 0x0003003eu, 0x0000000eu, 0x0000001fu, 0x00050041u,
0x0000000du, 0x00000022u, 0x00000009u, 0x00000021u, 0x0004003du, 0x00000006u, 0x00000023u, 0x00000022u,
0x00050041u, 0x00000018u, 0x00000025u, 0x00000015u, 0x00000024u, 0x0004003du, 0x00000006u, 0x00000026u,
0x00000025u, 0x00050088u, 0x00000006u, 0x00000027u, 0x00000023u, 0x00000026u, 0x00050085u, 0x00000006u,
0x00000028u, 0x00000027u, 0x0000001cu, 0x00050083u, 0x00000006u, 0x00000029u, 0x00000028u, 0x0000001eu,
0x0003003eu, 0x00000020u, 0x00000029u, 0x0004003du, 0x00000006u, 0x00000030u, 0x0000000eu, 0x0004003du,
0x00000006u, 0x00000031u, 0x00000020u, 0x00070050u, 0x0000002au, 0x00000033u, 0x00000030u, 0x00000031u,
0x00000032u, 0x0000001eu, 0x00050041u, 0x00000034u, 0x00000035u, 0x0000002eu, 0x0000002fu, 0x0003003eu,
0x00000035u, 0x00000033u, 0x0004003du, 0x0000002au, 0x00000039u, 0x00000038u, 0x0003003eu, 0x00000036u,
0x00000039u, 0x0004003du, 0x00000007u, 0x0000003du, 0x0000003cu, 0x0003003eu, 0x0000003bu, 0x0000003du,
0x000100fdu, 0x00010038u

View File

@ -562,6 +562,15 @@ void VulkanRenderer::recordCommandBuffer(VkCommandBuffer commandBuffer,
m_ubo.wavePhase = static_cast<float>(wavePhase);
m_ubo.paintingEnabled = paintingEnabled ? 1.0f : 0.0f;
// Debug output every 60 frames
static int debugCounter = 0;
if (++debugCounter % 60 == 0) {
std::cout << "Background animation - time: " << m_ubo.time
<< ", rotation: " << m_ubo.rotation
<< ", wavePhase: " << m_ubo.wavePhase
<< ", paintingEnabled: " << m_ubo.paintingEnabled << std::endl;
}
// CRITICAL FIX: Update ALL uniform buffers every frame!

View File

@ -15,7 +15,11 @@
// Include volk for Vulkan function loading
#define VK_NO_PROTOTYPES
#include "../../third_party/volk/volk.h"
#include "third_party/volk/volk.h"
#ifdef __APPLE__
#include "platform/vulkanwidget_macos.h"
#endif
#ifndef M_PI
#define M_PI 3.14159265358979323846
@ -38,6 +42,7 @@ VulkanWidget::VulkanWidget(QWidget *parent)
, m_swapchain(VK_NULL_HANDLE)
, m_commandPool(VK_NULL_HANDLE)
, m_x11Display(nullptr)
, m_metalLayer(nullptr)
, m_initialized(false)
, m_renderingEnabled(false)
, m_needsResize(false)
@ -55,6 +60,7 @@ VulkanWidget::VulkanWidget(QWidget *parent)
, m_wavePhase(0.0)
, m_startTime(QDateTime::currentDateTime())
, m_lastLockDuration(0)
, m_totalPausedTime(0)
, m_lastLockFrameCount(0)
, m_lockPaintFrameCount(0)
, m_lockCount(0)
@ -129,17 +135,20 @@ void VulkanWidget::setRenderingEnabled(bool enabled)
qDebug() << "Render timer restarted";
}
// Unlocked: calculate lock duration
// Unlocked: calculate lock duration and accumulate paused time
if (m_lastLockTime.isValid()) {
QDateTime unlockTime = QDateTime::currentDateTime();
m_lastLockDuration = m_lastLockTime.secsTo(unlockTime);
m_lockPaintFrameCount = m_frameCount - m_lastLockFrameCount;
// 累积锁屏期间的暂停时间
m_totalPausedTime += m_lastLockDuration;
qDebug() << "Screen was locked for" << m_lastLockDuration << "seconds";
qDebug() << "Total paused time:" << m_totalPausedTime << "seconds";
qDebug() << "Frames at lock:" << m_lastLockFrameCount
<< "- Frames painted during lock:" << m_lockPaintFrameCount;
}
m_startTime = QDateTime::currentDateTime();
} else {
qDebug() << "Vulkan rendering DISABLED - Showing locked state";
// 关键修复:渲染一帧锁屏界面后停止定时器
@ -306,9 +315,19 @@ bool VulkanWidget::createInstance()
createInfo.ppEnabledExtensionNames = extensions.data();
createInfo.enabledLayerCount = 0;
#ifdef __APPLE__
// macOS (MoltenVK) requires portability enumeration flag
createInfo.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
qDebug() << "macOS: Enabling portability enumeration for MoltenVK";
#endif
VkResult result = vkCreateInstance(&createInfo, nullptr, &m_instance);
if (result != VK_SUCCESS) {
qDebug() << "Failed to create Vulkan instance, error code:" << result;
#ifdef __APPLE__
qDebug() << "macOS Hint: Make sure MoltenVK is installed and DYLD_LIBRARY_PATH is set";
qDebug() << "Expected path: $VULKAN_SDK/lib (e.g., ~/VulkanSDK/1.4.328.1/macOS/lib)";
#endif
return false;
}
@ -367,9 +386,19 @@ bool VulkanWidget::createSurface()
#elif defined(__APPLE__)
// macOS requires MoltenVK and Metal
// Get the native view handle
void* nativeView = reinterpret_cast<void*>(window->winId());
// Setup CAMetalLayer using helper function
m_metalLayer = createMetalLayer(nativeView);
if (!m_metalLayer) {
qDebug() << "Failed to create CAMetalLayer";
return false;
}
VkMetalSurfaceCreateInfoEXT createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
createInfo.pLayer = nullptr; // This needs proper Metal layer setup
createInfo.pLayer = m_metalLayer;
VkResult result = vkCreateMetalSurfaceEXT(m_instance, &createInfo, nullptr, &m_surface);
#else
@ -955,9 +984,10 @@ void VulkanWidget::recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t i
.arg(m_lockCount);
}
// Calculate elapsed time in seconds
// Calculate elapsed time in seconds (total runtime minus paused time)
QDateTime now = QDateTime::currentDateTime();
qint64 elapsedTime = m_startTime.secsTo(now);
qint64 totalRuntime = m_startTime.secsTo(now);
qint64 elapsedTime = totalRuntime - m_totalPausedTime;
m_renderer->recordCommandBuffer(commandBuffer, imageIndex, imageView,
m_frameCount, static_cast<double>(elapsedTime),
@ -1094,6 +1124,14 @@ void VulkanWidget::cleanupVulkan()
}
#endif
// Release CAMetalLayer if it was created (macOS only)
#ifdef __APPLE__
if (m_metalLayer) {
releaseMetalLayer(m_metalLayer);
m_metalLayer = nullptr;
}
#endif
// Cleanup instance
if (m_instance != VK_NULL_HANDLE) {
vkDestroyInstance(m_instance, nullptr);
@ -1214,6 +1252,10 @@ std::vector<const char*> VulkanWidget::getRequiredInstanceExtensions()
extensions.push_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
#elif defined(__APPLE__)
extensions.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
// MoltenVK requires portability enumeration extension
extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
extensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
qDebug() << "macOS: Adding MoltenVK required extensions";
#endif
return extensions;
@ -1223,6 +1265,13 @@ std::vector<const char*> VulkanWidget::getRequiredDeviceExtensions()
{
std::vector<const char*> extensions;
extensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
#ifdef __APPLE__
// MoltenVK requires portability subset extension for device
extensions.push_back("VK_KHR_portability_subset");
qDebug() << "macOS: Adding portability_subset device extension for MoltenVK";
#endif
return extensions;
}

View File

@ -215,6 +215,7 @@ private:
VkSwapchainKHR m_swapchain;
VkCommandPool m_commandPool;
void* m_x11Display; // X11 Display pointer (Linux only), stored as void* to avoid X11 header dependency
void* m_metalLayer; // CAMetalLayer pointer (macOS only), stored as void* to avoid Objective-C header dependency
std::vector<VkCommandBuffer> m_commandBuffers;
std::vector<VkSemaphore> m_imageAvailableSemaphores;
std::vector<VkSemaphore> m_renderFinishedSemaphores;
@ -253,6 +254,7 @@ private:
QDateTime m_pauseTime;
QDateTime m_lastLockTime;
qint64 m_lastLockDuration;
qint64 m_totalPausedTime; // 累积的暂停时间(秒)
int m_lastLockFrameCount;
int m_lockPaintFrameCount;
int m_lockCount;

View File

@ -4,10 +4,10 @@
# DO NOT EDIT THIS FILE MANUALLY - Edit CMakeLists.txt instead
# This file is sourced by shell scripts to get version information
APP_VERSION_MAJOR=1
APP_VERSION_MINOR=3
APP_VERSION_MAJOR=3
APP_VERSION_MINOR=0
APP_VERSION_PATCH=0
APP_VERSION="1.3.0"
APP_VERSION="3.0.0"
# Export for use in other scripts
export APP_VERSION_MAJOR