2012-07-04 82 views
0

爲什麼這不顯示圖形?我得到的只是一個白色的廣場。圖片是512x512。glTexImage2D不渲染圖片

public void loadGLTexture(GL10 gl) { 

     imageData = ByteBuffer.allocate(mPicture512.length).order(ByteOrder.nativeOrder()); 
    imageData.put(mPicture512); 
    imageData.position(0); 
    // generate one texture pointer 
    gl.glGenTextures(1, textures, 0); 
    // ...and bind it to our array 
//Bitmap bitmap = getBitmap(mContext); 

//bitmap.getPixels(pixels, offset, stride, x, y, width, height) 

    // create nearest filtered texture 
    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); 

    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 
    gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 512, 512, 0,GL10.GL_RGBA, GL10.GL_BYTE, imageData); 

ps。我知道我可以做到這一點,它的工作原理,但由於這是一個性能關鍵的應用程序,我不想首先創建位圖的開銷。

GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); 

回答

0

這個問題是什麼,我加載了一個位圖PNG,它具有標題,而不是原始圖片。

+1

所以我怎麼能生成原始圖像圖片。我發現我用gimp生成的圖片總是無法由opengl加載。但在網上找到的一些圖片可以加載。 –

1

爲什麼你不以不同的方式上傳圖像到OpenGL?

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inScaled = false; 
Bitmap bitmap = BitmapFactory.decodeStream(activity.getAssets().open(fileName)); 

GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 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); 
+0

這個工程,但由於這是一個性能關鍵的應用程序,我不想負擔創建一個位圖,然後調用GLUtils.texImage2d()。 這就是我想要使用這種方法,只需要一個緩衝區: gl.glTexImage2D() – tomi

2

glTexParameter修改每紋理狀態。在綁定紋理之前調用最小/最大過濾器設置,因此它對紋理沒有影響。

因此,您的紋理仍然使用min篩選器的默認mipmap,並且無法正確顯示。

+0

我把min_mag_filter下面,我仍然只得到一個白色的正方形 – tomi