0

为什么这不向我显示图形?我得到的只是一个白色方块。图片为 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);

附言。我知道我可以这样做并且它可以工作,但由于这是一个性能关键的应用程序,我不希望首先创建位图的开销。

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

3 回答 3

2

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

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

于 2012-07-04T17:23:20.137 回答
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);
于 2012-07-04T17:16:10.603 回答
0

问题是我正在加载具有标题而不是原始图片的位图 PNG。

于 2012-07-05T13:54:33.590 回答