2012-10-11 76 views
5

我得到的白色紋理上三星Galaxy變量,但在我測試的紋理工作得很好。所以我追問是什麼,是通常的懷疑造成這種行爲的其他電話?是具有任何特殊硬件的星系變體,並且缺少什麼?的Android的OpenGL紋理白色的三星Galaxy變種

我的紋理加載代碼是這樣的

GLuint texture; 
    glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 

    glPixelStorei(GL_UNPACK_ALIGNMENT, 2); 

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE); 

    if(alpha)glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) image_data); 
    else glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*) image_data); 

和繪製正在發生的事情像往常一樣GL_TRIANGLES

*我沒有在我面前的實際設備,所以我不能做glGetError

+0

你能保證紋理是2的大小?如果您從位圖工廠獲取數據,則可以使用屏幕密度進行縮放,從而使PO2源圖像成爲NPO2。 – Tim

+0

是紋理是鍋,沒有我不從位圖factory.I實際上從C加載它們讓他們++(由accesing的APK),但我不事有問題,因爲它只是C++的東西不是OpenGL的,如果這個問題在那裏他們我會在所有設備上使用它。 – SteveL

+1

每一個紋理都是白色的,還是僅僅是其中的一些?它們都是RGBA,RGB還是混合?爲什麼使用2的解包對齊? – Tim

回答

4

由於是OpenGL ES 1.0,您還需要致電

glEnable(GL_TEXTURE_2D); 

,否則在OpenGL ES 2.0上沒有任何操作,其中着色器說明正在讀取哪種紋理類型(實際上,它實際上是一個錯誤)。我調用glTexParameterf()和glTexEnvf()似乎有點奇怪,我會使用glTexParameteri()和glTexEnvi()來代替(傳遞的值是枚舉,它們是整數,而不是浮點數)。但是這不應該導致錯誤。

的另一件事是最大紋理大小(你已經說過,這是POT)。任何機會的紋理都很大嗎?某些設備的最大紋理尺寸限制可能低至512 x 512像素。

的解壓縮對準不應在一般大的影響。如果將RGB數據存儲爲3個字節,則該值應爲1;如果將RGB和RGBA存儲爲一個雙字(= 4個字節),則該值應爲1。如果你指定了一個不好的對齊,我可以想象該紋理是亂碼(RGB或掃描線傾斜),但它通常不應該是白色的。另一方面,如果驅動程序拒絕此解包對齊,則可能會使紋理空白並生成GL錯誤。看看它是否。

的另一個因素是紋理座標。一些設備在texcoord內插器中的位數很少,並且指定較大的紋理座標(例如,在地形四元組上的-10000,+10000)可能會導致圖形故障。這實際上大部分都是無證的,許多設備都有問題。

對於我來說,創建一個8x8亮綠色的紋理(不是0x00ff00,例如0x8AC43C在轉換爲灰度或以某種方式使用單個組件時更容易發現)總是有幫助的。然後應該在[0-1]範圍內的texcoords上應用一個「小」四元組(一個完全在屏幕上,足夠大以便可見)。

+0

1)我使GL_TEXTURE_2D每次值我畫2之前)我不的事情,所以導致該問題3)我已經在小紋理像64 * 64 4)同樣的問題喜歡你說這是不是爲白色紋理5的理由)都能跟得上我只畫出正方形紋理與<= 1個texcoords 6)我沒有理解,:) .Thanks爲答案,這是最完整的一個 – SteveL

+0

6)如果我有一些簡單的不工作的問題我做什麼 - 實現一個簡單的測試,應該到處。可惜的是,這些解決了你的問題。如果你碰巧解決它,讓我們知道是什麼問題。祝你好運 ... –