2011-11-25 101 views
0

有什麼辦法在OpenGL中加載和讀取10位圖像?它不必在GPU方面達到最佳效率。我只是想將我的CPU在將其轉換爲GPU之前將其轉換爲8位。單通道10位圖像

我注意到,唯一支持的10位紋理格式是RGB10,這不是我正在尋找的。

供應商特定的擴展沒有問題。

+0

我沒有足夠的經驗知道這是正確的/將工作,但不能使用16位紋理,然後只使用着色器中的10個最低有效位? –

回答

0

我只是想卸載我的CPU轉換成8位之前洗牌到GPU。

那麼,這不會發生。 GPU 從來沒有進行格式轉換(除非可能混合,但這實際上是DMA的一部分)。 CPU不會格式化轉換,這就是爲什麼避免格式不匹配非常重要的原因。因此,即使OpenGL有方法來描述10位單通道數據,您仍然依賴CPU將其解碼爲GPU實際使用的格式(即:8位)。它只是你的代碼做轉換;它會是驅動程序代碼。無論哪種方式,它都在佔用CPU資源。

但是這與您的需求無關,因爲OpenGL無法上傳10位單通道數據。你甚至如何儲存它;像素不是字節對齊的。

一般而言,建議您儘可能離線進行這種轉換,並將數據存儲爲最有意義的格式。

+0

如何處理rgb10,r12等格式,驅動程序是否將它們轉換爲16位? – ronag

+0

@ronag:你什麼意思?沒有我知道的「GL_R12」格式。 'RGB10'的工作原理是32位(2位丟失);如果您想阻止驅動程序端轉換,那麼您使用GL_UNSIGNED_INT_10_10_10_2或GL_UNSIGNED_INT_2_10_10_10_REV將其上載,並使用GL_RGBA作爲上傳格式。如果你的數據是10位的,最好的解決辦法是把它轉換成16位,並使用「GL_R16」內部格式。 –

+0

sry,我的意思是ALPHA12不是R12。 – ronag

相關問題