10 个不稳定版本 (3 个重大更改)
0.4.1-alpha | 2022年8月27日 |
---|---|
0.4.0-alpha | 2022年8月26日 |
0.3.12-alpha | 2022年8月26日 |
0.3.11-alpha |
|
0.1.3 | 2021年4月7日 |
#277 in 压缩
用于 omt
27KB
620 行
危险 - 状态
对我有效,但可能会擦除你的硬盘。
什么?
接受 glsl 着色器,删除空白、注释等,并用更短的符号/标识符/类型名称替换,以实现更好的压缩。
为什么?
我厌倦了安装 mono 以使 shader-minifier 工作,并且需要可以嵌入到我的工具中的东西。
为什么 Rust?
因为。并且我想学习 Rust。
而且它是可移植的,快速的,并且面向未来。
使用方法
命令行
cargo run --help
cargo run -- --input shader.glsl --output shader_crushed.glsl
使用 --blacklist "不要,crush,这些"
或
// code
#pragma SHADER_CRUSHER_OFF
// code
#pragma SHADER_CRUSHER_ON
// code
以保留某些标识符不变,例如需要在外部解析的 uniform。关键字、内置函数和 'main' 将自动列入黑名单。
嵌入/链接
从 C/C++
shader_crusher::ShaderCrusher* pShaderCrusher = shader_crusher::shadercrusher_new();
shader_crusher::shadercrusher_set_input( pShaderCrusher, fragmentString.c_str() );
shader_crusher::shadercrusher_crush( pShaderCrusher );
char* pOutput = shader_crusher::shadercrusher_get_ouput( pShaderCrusher );
fragmentString = std::string( pOutput );
shader_crusher::shadercrusher_free_ouput( pShaderCrusher, pOutput );
shader_crusher::shadercrusher_free( pShaderCrusher );
别忘了包含 cbindgen 生成的头文件,并链接到库。
统计信息
我目前只在我的着色器上使用它,但平均压缩大小为 60%,如果进一步压缩(例如,使用 UPX/Crinkler/kkrunchy),则为 40%。
很快
(因为我想要它)
- 允许通过 c-api 列出黑名单。
- 添加输出验证。
- 与 piglet 套件进行测试。
- 带有测试的 CI 系统
未来
(即不会在不久的将来发生)
- 删除死代码
- 智能替换重复块
- 多着色器遍历以智能提取共享代码
帮助
依赖关系
~6MB
~105K SLoC