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.
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:
uvec4 input = texelFetchBuffer(...);
uvec4 lower = input & 0xFFFF;
uvec4 higher = input >> 16;
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
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.