2017-05-04 108 views
0

我們正試圖優化程序中的內存使用情況,我們注意到我們的一些紋理可以存儲爲灰度值和alpha值,因爲當存儲爲RGBA時,RGB值完全相同。openGLES 2 - 如何加載8位灰度和8位alpha的紋理,而不擴展到32位RGBA?

我們希望通過只需要存儲2個通道(灰度和alpha,都是8位)來節省磁盤空間和內存。因此,通過32位RGBA提供50%的磁盤和內存節省。

但是我們遇到的障礙是我們無法弄清楚如何將這些信息提供給openGL。我們可以將圖像存儲在磁盤上,既可以作爲一個具有兩個8位通道的圖像,也可以作爲每個具有一個8位通道的兩個圖像。我無法找到一種方法讓openGL將其視爲灰度圖像,以便它只在內存中擁有這兩個通道,而不會將它們視爲像紅色和綠色這樣的特定顏色 - 因爲我發現存在GL_RG8,它具有正確的編號的渠道在正確的深度,但錯誤的顏色。

這甚至可能在openGLES 2中?我們可以給2個通道openGL並告訴它們它們不是紅色和綠色,而是灰色和阿爾法?

我看到這個問題:Can I use a grayscale image with the OpenGL glTexImage2D function?但這是相當古老的,GL_LUMINANCE現在被刪除。

回答

0

請注意,GL_RG8只存在於OpenGL ES 3.x以上;它不是OpenGL ES 2.x的一部分。對於ES 2.x,您可以使用GL_LUMINANCE_ALPHA。它已被棄用,但沒有刪除,所以應該仍然工作得很好。

如果你真的想使用GL_RG8那麼你就可以修復「錯色」或者通過使用碎冰雞尾酒在着色器代碼,當你使用它們,或者你可以在樣使用glTexParameteri()設置TEXTURE_SWIZZLE_[R|G|B|A]調酒重新排序通道。

相關問題