[D3D11] 2 Shorts in Float packen [gelöst]

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Unknown GER
Beiträge: 49
Registriert: 09.01.2003, 13:04

[D3D11] 2 Shorts in Float packen [gelöst]

Beitrag von Unknown GER »

Hallo,

ich möchte zwei 16-Bit-Integer (unsigned) in einen 32-Bit-Float packen bzw. möchte ich sie in einem Shader aus dem Float entpacken. In älteren Beispielen hab ich HLSL-Code wie diesen gefunden:

float ab;

float a = floor(ab);
float b = frac(ab) * 512 - 256;

Dabei wird ein 8-Bit-Integer (skaliert) im gebrochenen Anteil des Floats gespeichert und auf eben diese Weise wieder entpackt, was für 8 Bit noch gut funktioniert, nicht aber für großartig mehr Bits, für 2x 16 Bit gar unmöglich ist. Gibt es mittlerweile die Möglichkeit, einfach so etwas im (Vertex-)Shader umzusetzen:

unsigned short a = static_cast<unsigned short>(reinterpret_cast<int>(ab) >> 16);
unsigned short b = static_cast<unsigned short>(reinterpret_cast<int>(ab) & 0xffff);
Zuletzt geändert von Unknown GER am 20.04.2010, 22:30, insgesamt 2-mal geändert.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [D3D11] 2 Shorts in Float packen

Beitrag von Schrompf »

Ab DirectX10 kannst Du ja Integermathematik verwenden. Dann ist Dein float nur noch ein 32Bit-Platz für jeden beliebigen Spaß. Den genauen Syntax kann ich Dir aber nicht sagen... Du willst in dem Fall ja keinen Cast (also Umrechnung), sondern eine Reinterpretation des Wertes.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [D3D11] 2 Shorts in Float packen

Beitrag von Krishty »

uint a = asuint(ab) >> 16;
uint b = asuint(ab) & 0xFFFF;


Für den umgekehrten Weg asfloat().

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Unknown GER
Beiträge: 49
Registriert: 09.01.2003, 13:04

Re: [D3D11] 2 Shorts in Float packen

Beitrag von Unknown GER »

Vielen Dank, genau das hab ich gesucht. :)
Antworten