diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2022-09-15 01:42:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-15 01:42:29 +0200 |
commit | f11745d7f5eba57d4238cf3f6c2c728bd99a5eb9 (patch) | |
tree | 59ed6ccec2d02a8893030a7c528a26d83bd9cd99 /servers/rendering_server.cpp | |
parent | 3f0692f965bb4cc28efe9f7e2f69701509b8a6dc (diff) | |
parent | ef4f968232d7bbf36ed8011f80c4e98dc883e7c2 (diff) | |
download | redot-engine-f11745d7f5eba57d4238cf3f6c2c728bd99a5eb9.tar.gz |
Merge pull request #65804 from clayjohn/octahedral-decode
Diffstat (limited to 'servers/rendering_server.cpp')
-rw-r--r-- | servers/rendering_server.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp index aa3351c815..cbcfc8fe49 100644 --- a/servers/rendering_server.cpp +++ b/servers/rendering_server.cpp @@ -1114,7 +1114,8 @@ Array RenderingServer::_get_array_from_surface(uint32_t p_format, Vector<uint8_t for (int j = 0; j < p_vertex_len; j++) { const uint32_t v = *(const uint32_t *)&r[j * vertex_elem_size + offsets[i]]; - w[j] = Vector3((v & 0x3FF) / 1023.0, ((v >> 10) & 0x3FF) / 1023.0, ((v >> 20) & 0x3FF) / 1023.0) * Vector3(2, 2, 2) - Vector3(1, 1, 1); + + w[j] = Vector3::octahedron_decode(Vector2((v & 0xFFFF) / 65535.0, ((v >> 16) & 0xFFFF) / 65535.0)); } ret[i] = arr; @@ -1129,11 +1130,12 @@ Array RenderingServer::_get_array_from_surface(uint32_t p_format, Vector<uint8_t for (int j = 0; j < p_vertex_len; j++) { const uint32_t v = *(const uint32_t *)&r[j * vertex_elem_size + offsets[i]]; - - w[j * 4 + 0] = ((v & 0x3FF) / 1023.0) * 2.0 - 1.0; - w[j * 4 + 1] = (((v >> 10) & 0x3FF) / 1023.0) * 2.0 - 1.0; - w[j * 4 + 2] = (((v >> 20) & 0x3FF) / 1023.0) * 2.0 - 1.0; - w[j * 4 + 3] = ((v >> 30) / 3.0) * 2.0 - 1.0; + float tangent_sign; + Vector3 res = Vector3::octahedron_tangent_decode(Vector2((v & 0xFFFF) / 65535.0, ((v >> 16) & 0xFFFF) / 65535.0), &tangent_sign); + w[j * 4 + 0] = res.x; + w[j * 4 + 1] = res.y; + w[j * 4 + 2] = res.z; + w[j * 4 + 3] = tangent_sign; } ret[i] = arr; |