關於 DXT1 格式的解碼優化

2021-04-23 05:38:01 字數 738 閱讀 4845

dxt1 使用的是 4x4 畫素乙個單元. 兩個 16bit 的調色盤. 

如果沒有透明色的話, 還需要插值出 2 種顏色.

c2=c0*2/3+c1*1/3

c3=c0*1/3+c1*2/3

因為兩個色盤正好可以讀進乙個 dword 暫存器, 所以我們可以把 c0, c1 兩種顏色讀到兩個暫存器中. 方便計算. 類似的**可以寫成這樣:

mov eax,[pal]

mov ebx,eax

swap ax,bx

接下來做 alpha 混合的時候可以繼續取掩碼, 把 rgbrgb 變成 0g0r0b 的方式計算.

這種混合運算其實可以優化為 (c0*21+c1*11)/32.

a*21+b*11 有優化的餘地:

__inline int blander_internal(unsigned a,unsigned b)

用彙編寫也可以. 但是不會比編譯器強多少 :)

如果使用 mmx, 則可以考慮一次處理 4 個畫素. dxt1 中 4 個畫素正好乙個位元組(乙個畫素兩個bit) 這樣可以比較方便的使用查表.

00: c0*2/3+c0*1/3

01: c1*2/3+c1*1/3

10: c0*2/3+c1*1/3

11: c1*2/3+c0*1/3

這樣, 就變成了 a * 2/3 + b *1/3 的統一式子, 查表來決定 a 和 b 取 c0 還是 c1

1 格式輸出

格式說明由 和格式字元組成,如 d f等。它的作用是將輸出的資料轉換為指定的格式輸出。格式說明總是由 字元開始的。不同型別的資料用不同的格式字元。格式字元有d,o,x,u,c,s,f,e,g等。如 d整型輸出,ld長整型輸出,o以八進位制數形式輸出整數,x以十六進製制數形式輸出整數,u以十進位制數輸...

c入門 1 格式

1!常量 d 稱為格式符 輸出有符號十進位制數 printf d d n 100,40 100 40 printf d d n 0144,040 100 32 printf d d n 0144,040 結果為d 32 printf d d n 0174,20 124 20 printf d d n...

CIF DCIF D1格式介紹

cif dcif d1格式介紹 cif簡介 qcif全稱quarter common intermediate format。qcif也是常用的標準化影象格式。在h.323中,規定qcif 176 144畫素。cif格式具有如下特性 1 電檢視像的空間解析度為家用錄影系統 video home sy...