Ho il sospetto che sia davvero possibile capovolgere i blocchi BC6-7 con molto meno lavoro di una decompressione completa e ricomprimere, ma non è ancora un picnic ed è molto più complesso dei lanci di blocchi BC1-5.
Innanzitutto, BC6-7 ha una varietà di modalità che possono essere selezionate per blocco. Le modalità hanno layout binari completamente diversi, quindi dovresti praticamente scrivere una diversa routine di inversione per ciascuna modalità (ce ne sono circa 20 in totale, IIRC).
Un'altra difficoltà sono le modalità partizionate, in cui i pixel nel blocco sono partizionati in 2 o 3 sottoinsiemi, ognuno con il proprio segmento di linea RGB. La partizione deve essere scelta da un set predefinito; quelli per BC6 possono essere visti qui . Il problema è che questo set di partizioni non è simmetrico sotto i flip verticali. Tuttavia, sospetto che sia simmetrico sotto una combinazione di lanci verticali e scambiando i due sottoinsiemi. Ad esempio, guardando la partizione n. 22 (6a riga, 3a colonna) in corrispondenza di quel collegamento, non esiste una versione capovolta verticalmente nella tabella, ma se si capovolgono verticalmente escambiare 0 e 1, si finisce con la partizione # 9 (3a fila, 2a colonna). Non ho verificato che ogni partizione possa essere capovolta in questo modo, né ho verificato quelle per BC7 (che include anche partizioni con 3 sottoinsiemi).
Anche se funziona, non sei ancora a casa libera. In BC1-5, l'ordine dei due endpoint del segmento di linea RGB è stato utilizzato per cambiare modalità, ma in BC6-7 è stato scelto l'ordine degli endpoint per correggere un bit degli indici per pixel in ciascun sottoinsieme di partizioni. Pertanto, se si modifica la partizione attorno, potrebbe essere necessario scambiare l'ordine degli endpoint.
E, ultimo ma non meno importante, in BC6-7 gli endpoint sono spesso delta-compressi (ovvero un endpoint viene archiviato con la massima precisione e gli altri vengono memorizzati come delta con precisione inferiore da esso). Lo scambio di sottoinsiemi di partizioni e l'ordine degli endpoint cambierà quale endpoint è quello ad alta precisione, quindi dovrai mescolare i bit di bassa precisione e annullare alcuni delta.
Tutto sommato, non sembra che ci sia uno showtopper fondamentale (anche se in realtà non ho scritto il codice), ma sarebbe sicuramente molto lavoro per capovolgere o ruotare questi formati. Se possibile, ti consiglio di capovolgere le immagini nella tua pipeline artistica prima che vengano compresse.
(A proposito, la specifica più completa di BC6-7 che ho trovato è la specifica ARB_texture_compression_bptc ; ho anche scritto un post sul blog sui formati BCn qualche tempo fa.)