Skip to content

Change cgltf_component_read_float so it handles correctly snorm#286

Open
tuket wants to merge 2 commits into
jkuhlmann:masterfrom
tuket:master
Open

Change cgltf_component_read_float so it handles correctly snorm#286
tuket wants to merge 2 commits into
jkuhlmann:masterfrom
tuket:master

Conversation

@tuket

@tuket tuket commented Mar 15, 2026

Copy link
Copy Markdown

I have made a small change to the way cgltf_component_read_float converts snorm to float.

The problem was that the lowest value was not being converted to -1.0f.

For example i8 has range [-128, +127].
If you just divide by 127, the mapped range is [-1.007874f, -1.0f].

The solution is simply, if == -128, then return -1.

In addition to that, I have replaced the division for the equivalent multiplication for performance.

Here are a couple of links about snorm conversion:
OpenGL: https://github.com/nlguillemot/SNormTest
DX: https://learn.microsoft.com/en-us/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-data-conversion
Vulkan: https://docs.vulkan.org/spec/latest/chapters/fundamentals.html#fundamentals-fixedfpconv

I hope it's all good.
Thanks for making this library, it's awesome!

@tuket

tuket commented Mar 19, 2026

Copy link
Copy Markdown
Author

Btw, in cgltf_component_read_float, it's akward that the "default:" case returns 0 and, after the switch, reads the pointer as an integer.

@jkuhlmann

Copy link
Copy Markdown
Owner

@tuket The build fails unfortunately.

@tuket

tuket commented Apr 12, 2026

Copy link
Copy Markdown
Author

Sorry... fixed!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants