- unsigned int i = 42;
- float f = float(i);
DGL https://delphigl.com/forum/ |
|
uint32 zu float casten? https://delphigl.com/forum/viewtopic.php?f=20&t=8204 |
Seite 1 von 1 |
Autor: | Coolcat [ Sa Feb 07, 2009 21:19 ] |
Betreff des Beitrags: | uint32 zu float casten? |
Weiß jemand ob man im Shader effizient einen unsigned int zu einem float casten kann und umgekehrt? ( Integer-Arithmetik für Shader und Texturen ist ein Feature von ShaderModel 4.0 bzw. EXT_gpu_shader4 und EXT_texture_integer ) Also ich meine nicht sowas wie Code:
sondern wirklich brutales casten ohne Hirn (:P) Code:
Da beides 32bit sind und ich die Werte sonst nirgendwo brauche sollte das eigentlich gehen. Ich benötige das ganze für folgendes Problem: Mein Fragmentshader produziert zwei Werte die in ein Framebuffer-Object geschrieben werden sollen:
Da ich später beim Lesen im Geometryshader am Limit der möglichen Texturzugriffe (bei mir 32) arbeite sollte beides nach Möglichkeit in eine Textur gerendert werden. Also Notlösung könnte ich den Index auch in zwei Floats packen oder den Float-Wert mit dem Integer quantisieren (*), aber ideal wäre so ein casten. Kennt sich da zufällig jemand aus? (*) einfach so: unsigned int output = unsigned(floatWert / MAX_VALUE * 4294967295.0); |
Autor: | Coolcat [ Sa Feb 07, 2009 22:31 ] |
Betreff des Beitrags: | |
Zumindest in DirectX (HLSL) scheint es irgendwie zu gehen (letzter Absatz): http://msdn.microsoft.com/en-us/library ... 85%29.aspx |
Autor: | Coolcat [ Do Feb 12, 2009 19:46 ] |
Betreff des Beitrags: | |
Ich habe gerade raus gefunden, dass ich gar nicht den vollen Integer-Range benötige. Werte zwischen 0 und 2^20-1 reichen mir. Eben weil float nun eine 23bit Mantisse hat, kann ich den Integer verlustfrei als float speichern. Trotzdem wäre es natürlich interessant zu wissen, ob man wie oben beschrieben einen reinterpret-cast machen kann. Hier ein kleines Testprogramm: Code:
|
Autor: | Lord Horazont [ Do Feb 12, 2009 20:11 ] |
Betreff des Beitrags: | |
Hmm... Wo ich jetzt weiter drüber nachdenke würde es mich wundern. Floats können nicht alle Werte annehmen, die mit 32bit möglich sind. Einige sind NaNs (Not A Number - sehr einfallsreich finde ich ![]() Gruß Lord Horazont |
Autor: | Coolcat [ Do Feb 12, 2009 21:14 ] |
Betreff des Beitrags: | |
Zitat: Floats können nicht alle Werte annehmen, die mit 32bit möglich sind.
Das spielt keine Rolle, wenn ich den Integer als Float speichere braucht der ja nicht irgendeinen sinnvollen Wert haben. Ich will nur später die Bits wieder zurück casten können. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |