为什么这不会显示图形?我得到的只是一个白色方块。图片是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);
答案 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,它有标题而不是原始图片。