glTexImage2D不呈现图片

时间:2012-07-04 14:40:21

标签: android opengl-es

为什么这不会显示图形?我得到的只是一个白色方块。图片是512x512。

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);

3 个答案:

答案 0 :(得分:2)

glTexParameter修改每纹理状态。在绑定纹理之前调用min / mag滤镜设置,因此它对纹理没有影响。

因此,您的纹理仍然使用最小过滤器的默认mipmapping,并且无法正确显示。

答案 1 :(得分: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);

答案 2 :(得分:0)

问题是我正在加载一个位图PNG,它有标题而不是原始图片。