gpt4 book ai didi

android - 某些手机​​上未加载纹理

转载 作者:太空狗 更新时间:2023-10-29 14:28:48 25 4
gpt4 key购买 nike

我有几个用户报告他们的屏幕上有白 block ,我不确定是什么导致了这个问题。它似乎在大多数手机上都能正常工作,但我不确定问题出在哪里。 (已知不能在 Galaxy Nexus 和 Droid Pro 上运行,但在我原来的 Droid 上运行良好)。我只是被难住了,下面是我的代码和用户发布的问题截图。知道是什么原因造成的吗?它是用 ES 1.1 编写的。未加载的是透明的 png

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

enter image description here

代码:

 public class MenuButton {
AssetManager assetManager;
GL10 gl;
// Our vertices.

//Our texture.
private float texture[] = {
//Mapping coordinates for the vertices
0.0f, 1.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f,
};

// The order we like to connect them.
private byte indices[] = {0,1,3,2};


// Our vertex buffer.
private FloatBuffer vertexBuffer;

// Our index buffer.
private ByteBuffer indexBuffer;

//texture buffer.
private FloatBuffer textureBuffer;

//Our texture pointer.
private int[] textures = new int[3];


float width;
float height;
public MenuButton(Bitmap graphic,GL10 _gl, int _width, int _height) {
width=_width;
height=_height;

float vertices[] = {
0f, -_width, 0.0f, //LB
width, -_width, 0.0f, //RB
0, 0, 0.0f, //LT
_width, 0.0f, 0.0f, //RT
};


gl=_gl;
ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
vertexBuffer = byteBuf.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);

//
byteBuf = ByteBuffer.allocateDirect(texture.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
textureBuffer = byteBuf.asFloatBuffer();
textureBuffer.put(texture);
textureBuffer.position(0);

//
indexBuffer = ByteBuffer.allocateDirect(indices.length);
indexBuffer.put(indices);
indexBuffer.position(0);



loadGLTexture(0, graphic);

}

/**
* This function draws our square on screen.
* @param gl
*/
public void draw(GL10 gl) {
//Bind our only previously generated texture in this case
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

//Point to our buffers
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

//Set the face rotation
gl.glFrontFace(GL10.GL_CCW);

//Enable the vertex and texture state
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

gl.glEnable(GL10.GL_CULL_FACE);
//Draw the vertices as triangles, based on the Index Buffer information
gl.glDrawElements(GL10.GL_TRIANGLE_FAN, indices.length, GL10.GL_UNSIGNED_BYTE, indexBuffer);

// Disable the vertices buffer.
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
//Disable the texture buffer.
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}
/**
* Load the textures
*
* @param gl - The GL Context
* @param context - The Activity context
*/
public void destroyTexture() {
gl.glDeleteTextures(3, textures, 0);
}
public void loadGLTexture(int graphicsToLoad,Bitmap bitmap) {


//Generate three texture pointers...
gl.glGenTextures(3, textures, 0);
//...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
//Create Nearest Filtered Texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR_MIPMAP_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP, GL11.GL_TRUE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
}
public boolean amIHit(float[] matrixValues,MotionEvent event) {
Log.e("sys",""+event.getY());

// if (((event.getX())>(0)&&((event.getX()))<5+width)&&((event.getY())>0)&&(event.getY()<width)) {
if (((event.getX()>0)&&(event.getX()<5+width))&&((event.getY()>0)&&(event.getY()<5+height))) {
Log.e("sys","hit menu button.");
return true;
}
Log.e("sys","menu button not hit.");
return false;
}


}

最佳答案

查看此链接,了解使用二次幂大小位图的重要性:

http://groups.google.com/group/android-developers/browse_thread/thread/2cb496c5da3b6955?pli=1

也许这是潜在的问题,一些平台(比如你的 Droid)更宽容,而其他平台(比如你用户的 Galaxy Nexus)则不然。

还有一种可能:

Android OpenGL ES 1.1 white box textures

You must enable vertex array and texture coords array and bind your buffer indexes before making any calls to your glDraw...() function.

关于android - 某些手机​​上未加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com