J'ai étudié le format DDS et écrit un chargeur de texture DDS pour les deux derniers jours, juste par curiosité et je suis tombé sur quelque chose que je tenais pour acquis, les "formules de calcul de hauteur" . Je suis vraiment curieux de savoir pourquoi ils sont spécifiés exactement comme ils le sont, sans aucune justification.Calcul de hauteur DirectDrawSurface (DDS)
Par exemple, pour des formats comprimé de blocs (DXT # n, BC# n), tous basés sur S3TC, la façon dont il est calculé est
max (1, (largeur + 3)/4) * blockSize
Donc, max donne la plus grande des deux valeurs, mais pourquoi cela fonctionne-t-il? Pourquoi ajouter 3 à la largeur de la texture et ensuite la diviser sur une "limite de grignage"?
Certains types existants d'autre part sont:
((largeur + 1) >> 1) * 4
Ainsi, un décalage vers la droite est essentiellement le déplacement du point de base dans une base binaire, ou divisant par deux. Alors, pourquoi ajouter 1, puis diviser par deux et multiplier par 4? Perdre les deux bits les plus à droite?
Et le dernier, pour d'autres formats:
(largeur * BPP + 7)/8
Je comprends les bits par pixel et la division de limite d'octet le plus proche, mais pourquoi ajouter 7?
Quelqu'un peut-il en écrire un peu plus? Ou pointez-moi dans la bonne direction?