- uvec4 input = texelFetchBuffer(...);
- uvec4 lower = input & 0xFFFF;
- uvec4 higher = input >> 16;
DGL https://delphigl.com/forum/ |
|
2x 16bit float in 32bit float packen https://delphigl.com/forum/viewtopic.php?f=20&t=10543 |
Seite 1 von 1 |
Autor: | Thmfrnk [ Fr Aug 03, 2012 11:10 ] |
Betreff des Beitrags: | 2x 16bit float in 32bit float packen |
Hallo, wie der Titel bereits sagt, versuche ich eine Möglichkeit 2x 16bit Floats in einen 32Bit wert zu packen und diesesn im Shader wieder auseinander zu pflücken.. Ich schiebe via TBOs (RGBA32) werte in den GeometryShader (siehe Partikel Thread), da brauch ich nun noch ein paar mehr werte, wollte aber nicht noch einen Buffer binden. Habt ihr da was für mich? Grüße Thomas |
Autor: | Coolcat [ Fr Aug 03, 2012 17:21 ] |
Betreff des Beitrags: | Re: 2x 16bit float in 32bit float packen |
Möglichkeit 1: Du benutzt RGBA16 und liest im Shader einfach zwei Zellen aus dem TBO statt eine. Wenn die Zellen nebeneinander liegen sollte der zweite Zugriff gecacht sein und entsprechend schnell. Möglichkeit 2: ShaderModell 4 unterstützt Bit-Operationen. Aber leider kann GLSL keinen brutalen Cast von Integer nach Float, die Daten werden immer interpretiert. (HLSL kann das AFAIK). Du musst also von Hand die Bits zerflücken um deinen Float zu rekonstruieren. Wenn du einen beschränkten Wertebereich hast (etwa 0...1) ist es vielleicht besser das als Integer darzustellen statt Float. Code:
Nun hast du die Float-Daten als Integer. Der Aufbau eines Half-Floats nach IEEE 754-2008 sieht so aus: Bit 1: Vorzeichen Bit 2-6: Exponent Bit 7-16: Mantisse Dank der vielen Spezialfälle (Subnormal numbers, Infinitiy, ...) will man das eigentlich nicht wirklich selbst in Software-Implementieren ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |