Von der Liste geht Nummer 1 in die richtige Richtung. Aber was meinst du mit Kompression? Eine Farbraumtransformation ist keine Kompression!dot hat geschrieben:Naja, langsamer als was? Es gibt keine Alternative, der Input Assembler kann das halt einfach nicht. Ich seh folgendes Spektrum möglicher Tradeoffs:
- Unkomprimierte Vertexfarben, braucht mehr Bandbreite, spart Laufzeit;
- sRGB Vertexfarben im Shader selbst dekomprimieren, spart Bandbreite kostet etwas Laufzeit, wobei das nötige pow() wohl kaum Overhead erzeugen sollte (Latency in der Gegend von 4-8 Clock Cycles oder sowas); oder
- Vertexfarben aus einer Textur laden, was in D3D11 über SV_VertexID trivial ist.
Du musst anstatt die Vertex-Farben durch \($\operatorname{h}$\) im Shader laufen zu lassen, diese Operation einfach auf die Vertex-Farben vor dem Rendering anwenden. Dann sind die Vertex-Farben im Shader im linearen Farbraum, und die Farben sind mit den anderen, beispielsweise aus sRGB-Texturen gezogenen Farben kompatibel. Einfach die Operation aus dem Shader in die Vorverarbeitung ziehen. Das gibt keinen zusätzlichen Speicheraufwand.