Comments (1)
Triage notes:
- Bug isn't a regression; it's always been broken
- Only impacts sRGB constant color blocks
Cause is this bit of code:
int mask = (decode_mode == DECODE_LDR_SRGB) ? 0xFF00 : 0xFFFF;
...
alpha = sf16_to_float(unorm16_to_sf16(scb->constant_color[3] & mask));
... applying the 0xFF00
mask results in a 0.996 (254) floating point value. In real hardware decode this isn't a bug - the top 8 bits are sent off to a sRGB-to-linear conversion unit which would handle this correctly. However, the reference compressor doesn't linearize (we want to write sRGB encoded data back into the output texture) so when using the entire 16-bit result the loss of precision seeps though into the output.
For textures compressed with astcenc
itself we'd be safe just removing the masking, but we've got no guarantee that another compressor writes anything sensible into those bottom 8 bits. The correct fix is therefore to take the top 8 bits and rescale them to fill the whole 16-bit range (replicate the top 8 bits in the bottom 8).
from astc-encoder.
Related Issues (20)
- I can't open the program HOT 4
- Compile fails on Android NDK after PR #417 HOT 7
- Delta encoding and blue contract can reduce quality HOT 2
- Can't find libastcenc-avx2-static.a... How can I fix it ? HOT 1
- Encode 1 pixel height of png image file HOT 5
- Question on compressing atlases HOT 3
- Questions about ASTC compression in two special cases HOT 12
- Add support for alpha edge extrudes when using `-a` option
- Decoding triggers SIGKILL after a while of processing the input HOT 3
- Investigate making the codec more strict aliasing compliant HOT 3
- retro studios txtr textures HOT 1
- bug checking the ASTCENC_FLG_DECOMPRESS_ONLY flag in astcenc_context_alloc() HOT 2
- Support Windows systems with multiple CPU groups HOT 1
- Completion of error handling HOT 2
- Warnings that become errors on mcst-lcc compiler (-Werror option) HOT 1
- alpha decoding bug when LDR_SRGB is enabled in ASTCENC_PRF_LDR_SRGB profile HOT 18
- Question about bizarre differences between `-ts` vs `-ds` HOT 3
- Compress/decompress progress callback HOT 8
- Crash: Progress Callback not initialized for Single-Threaded alpha-weight-scaling-radius path HOT 1
- Builds for wrong-architecture on M1 macs HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from astc-encoder.