Gelöst hab ich es wie folgt:
Resourcen:
- Dynamische Textur für ConeMap (Größe TextureSize x TextureSize * * 4 * sizeof(float))
- StructuredBuffer (Größe TextureSize * 4 * sizeof(float) als UAV
- Nochmal so ein Buffer als Staging
- Programm:
- Geht alle "Pixel" der ConeMap-Textur durch, und anschließend jede Reihe der "Destination-Texel", schickt die Nummer der Reihe an den CS
- CS geht alle Destination-Pixel der gewünschten Reihe durch und berechnet für ConeRatio für jeden Ziel Pixel in der Reihe und speichert den ConeRatio im UAV
- Wenn CS fertig, wird der UAV in den Staging Buffer kopiert, dieser gemappt und alle Ergebnisse werden verglichen
- Der "beste ConeRatio" der Reihe ist der ConeRatio des endgültigen "Pixels der ConeMap"
- Wenn alle Pixel der ConeMap ein Ergebnis haben, wird die Textur gespeichert.
Getestet hab ich es bis jetzt nur mit Texturen der Größe 256x256 Pixel. Habs aber aus Zeitgründen abgebrochen.
Wenn ich anstatt jede Reihe, jedes Pixel als Destination im CS durchgehe, hängt sich wieder der Treiber auf. Ist halt doch zu viel.
Wie es mit größeren Texturen aussieht, weiß ich nicht. Warschreinlich stürzt er dann auch ab.