mirror of
https://github.com/DeviceFarmer/stf.git
synced 2026-04-18 16:13:24 +02:00
- Pixi Canvas and WebGL render was added for quick benchmarking but it's going away soon, because WebGL is even slower than Canvas for big textures. The browsers nowadays use OpenGL in the backend for rendering Canvas. - There is 3 different WebGL Renders but they need adjusting so they work with Non Power Of Two textures. - For now the winner is JPEG+Canvas, however CRN+WebGL will be better almost for sure if server side supports it.
3.1 KiB
3.1 KiB
Benchmark results (internal data)
Versions
- Canary 35
- Safari 7
- Firefox 27
Time to load and draw 5000 frames
| Hardware | Browser | Render | Time | ms |
|---|---|---|---|---|
| iMac | Canary | pixi-canvas | 54s | |
| iMac | Canary | pixi-webgl | 58s | |
| iMac | Canary | canvas | 54s | 5.8ms |
| iMac | Firefox | pixi-canvas | 75s | 8.3ms |
| iMac | Firefox | pixi-webgl | 82s | 11.3ms |
| iMac | Firefox | canvas | 76s | 8.1ms |
| MacBook | Canary | pixi-canvas | 68s | |
| MacBook | Canary | pixi-webgl | 83s | |
| MacBook | Canary | canvas | 76s |
Time to just draw 5000 frames
| Hardware | Browser | Format | Render | Time | ms |
|---|---|---|---|---|---|
| iMac | Canary | DDS DXT1 | webgl | 55s |
Time to render 1 frame
| Hardware | Browser | Format | Size | Function | ms |
|---|---|---|---|---|---|
| iMac | Canary | DDS DXT1 | 2.1MB | load | 20-100ms |
| iMac | Canary | DDS DXT1 | 2.1MB | draw | 0.04ms |
| iMac | Canary | DDS GZIP | 271KB | load | |
| iMac | Canary | DDS GZIP | 271KB | draw | |
| iMac | Canary | WEBP | 70KB | load | 9ms |
| iMac | Canary | WEBP | 70KB | draw | 24ms |
| iMac | Canary | DDS CRN | 70KB | load | 30ms |
| iMac | Canary | DDS CRN | 70KB | draw | 0.04ms |
| iMac | Canary | JPEG | 94KB | load | 25ms |
| iMac | Canary | JPEG | 94KB | draw | 6ms |
| iMac | Canary | PNG | 590KB | load | 6ms |
| iMac | Canary | PNG | 590KB | draw | 30ms |
About ST3C DXT1 DDS CRN
ST3C (S3 Texture Compression)
Group of related lossy texture compression algorithms, supported by most GPUs in Mac/PCs
DXT1 (Block Compression 1)
Smallest ST3C algorithm, 1-bit Alpha, compression ratio 6:1
DDS (DirectDraw Surface)
Container file format for storing ST3C textures
CRN (DXTn Real-time Transcoding)
Container file format for transcoding crunched ST3C textures
DDS vs JPEG
- Drawing a DXT1 texture is over 100 times faster than JPEG
- The DXT1 texture is transferred directly to the GPU, unlike JPEG
- The DXT1 uses 6 times less GPU memory
- File size is big, but when gzipped it's smaller than PNG
CRN vs JPEG
- It transcodes to DXT1 so has all DXT1 benefits
- File size is very small, even smaller than JPEG (!)
- Requires to transcode on client side, so there is a CPU penalty
- However transcoding CRN->DXT1 is faster than decoding and tranfering JPEG->GPU
- JPEG->GPU texture uploading blocks the main thread and is slow
- Transcoding a CRN can be done async, and even offloaded to a WebWorker
- Currently the Crunch library is compiled to JS with Emscripten, so enabling asm.js would make the transcoding even faster
- Compressing CRN vs libjpeg-turbo benchmarks still need to be done
Links
ECT1 texture format works on all Android devices http://developer.android.com/tools/help/etc1tool.html
WebGL also http://blog.tojicode.com/2011/12/compressed-textures-in-webgl.html
Crunch https://code.google.com/p/crunch/
Fast compression http://www.fastcompression.com/
DXT1 crunch WebGL http://www-cs-students.stanford.edu/~eparker/files/crunch/decode_test.html
WebGL Texture Utils https://github.com/gunta/webgl-texture-utils#webgl-texture-utils