|
|
13 лет назад | |
|---|---|---|
| .. | ||
| contrib | 13 лет назад | |
| include | 13 лет назад | |
| src | 13 лет назад | |
| tests | 13 лет назад | |
| .gitattributes | 13 лет назад | |
| .gitignore | 13 лет назад | |
| CMakeLists.txt | 13 лет назад | |
| README.md | 13 лет назад | |
| autogen.sh | 13 лет назад | |
| generateParsers.sh | 13 лет назад | |
| license.txt | 13 лет назад | |
| removeDeletedByUs.sh | 13 лет назад | |
A C++ library that takes GLSL shaders, does some GPU-independent optimizations on them and outputs GLSL back. Optimizations are function inlining, dead code removal, copy propagation, constant folding, constant propagation, arithmetic optimizations and so on.
Apparently quite a few mobile platforms are pretty bad at optimizing GLSL shaders; and unfortunately they also lack offline shader compilers. So using a GLSL optimizer offline before can make the shader run much faster on a platform like that. See performance numbers in this blog post.
Almost all actual code is Mesa 3D's GLSL compiler; all this library does is spits out optimized GLSL back, and adds GLES type precision handling to the optimizer.
This GLSL optimizer is made for Unity's purposes and is built-in in Unity 3 and later.
GLSL Optimizer is licensed according to the terms of the MIT license.
Visual Studio 2008 (Windows, x86) and Xcode 3.2 (Mac, i386) project files for a static
library are provided in src/glsl/msvc/mesaglsl2.vcproj and src/glsl/xcode/mesaglsl2
respectively.
For Linux you can use cmake. Just type "cmake . && make" in the root directory. This will build the optimizer library and some executable binaries.
Interface for the library is src/glsl/glsl_optimizer.h. General usage is:
ctx = glslopt_initialize();
for (lots of shaders) {
shader = glslopt_optimize (ctx, shaderType, shaderSource, options);
if (glslopt_get_status (shader)) {
newSource = glslopt_get_output (shader);
} else {
errorLog = glslopt_get_log (shader);
}
glslopt_shader_delete (shader);
}
glslopt_cleanup (ctx);