2011-12-14 89 views
0

我正試圖在OpenGL ES中加載和顯示紋理。我遇到的問題是,即使我的圖像是ARGB_8888格式,紋理似乎是以RGB_565格式繪製的。沒有抖動,我的形象看起來非常可怕。如何在OpenGL ES中強制使用24位顏色深度

我在支持16米顏色的手機上運行我的程序,因此,紋理應該可以在所有原始的榮耀中查看。

EDIT代碼:

裝載位圖:

background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null); 

產生質地:

public void loadBackground(GL10 gl) { 
    gl.glGenTextures(1, textures, 0); 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);  
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0, background,0); 
    background.recycle(); 
} 

附圖中:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, backgroundVertexBuffer); 
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer); 
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0,4); 
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 

onSurfaceCreated:

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    gl.glEnable(GL10.GL_TEXTURE_2D);   
} 

onSurfaceChanged

public void onSurfaceChanged(GL10 gl, int width, int height) { 
    gl.glViewport(0, 0, width, height); 
    gl.glLoadIdentity(); 
    gl.glOrthof(0, width, height, 0, -1, 1); 
+0

ARGB_8888是32位格式,因爲它的名稱暗示:8 + 8 + 8 + 8 = 32! – 2011-12-14 04:24:32

+0

是的,你說得對。儘管 – user1095142 2011-12-14 04:35:30

回答