2017-06-30 52 views
0

WebGL不支持位操作。所以我把我的int制服轉換成float。然後使用除法和mod來提取每個字節。如何在WebGL GLSL中解壓縮4字節Int統一字節的每個字節?

但是,由於精度問題,如果我的int太大,將int轉換爲float會失去一些精度。有沒有優雅的解決方案來處理這個問題?目前我的想法是隻在我的4字節int制服中存儲3個字節。

回答

0

這不是100%清楚你想要做什麼。首先,認識到32位浮點數有23位尾數。這是一個不到3個字節。另外,着色器可能運行精度較低,如fp16或8.8固定點。所以你的問題的答案是:No.

退一步,想想你爲什麼要在低端着色器中輸入整數。通常,模式技巧用於將float值打包(並解包)到rgba字節紋理或幀緩衝區中。

對於制服來說,這是毫無意義的。着色器仍然會以低(浮點)精度運行。所以你做的任何數學運算最多隻能運行23位。而且你可以像漂浮的制服一樣提供。

+0

我想傳遞一個1字節的數組到GPU,但WebGL不支持1字節的統一。所以我想把它打包成一個4字節的制服,並將其打包在着色器中。 –

+0

只需將其直接作爲浮點傳遞即可。如果它有很多字節,則將其作爲紋理傳遞。你可以傳遞每個float制服2個字節,但我真的不會依賴它。由於浮點數只有23位尾數,所以不能超過2個字節。 – starmole