【发布时间】:2014-05-29 15:16:58
【问题描述】:
我有 Nexus 4 和几个 HTC,我的游戏运行良好。
当我在三星 4 上启动时,我看到白色矩形(空纹理),
没有错误,
此外,我的游戏使用传感器,但我在三星 4 上看到它也不起作用,
但三星 3 - 工作正常,
请帮忙,
[编辑]
在三星 3 上工作!
听说他们对 S4 做了很多改动
[编辑 2]
这是我加载纹理的方式:
public void loadTextures(GL10 gl, Context context){
//Log.e(LOG_TAG, "DevQuestSprites :: loadTextures");
InputStream is;
Bitmap bitmap;
is = context.getResources().openRawResource(R.drawable.fly_a1_sprite);
bitmap = BitmapFactory.decodeStream(is);
try {
is.close();
is = null;
} catch (IOException e) {
}
gl.glGenTextures(textureCount, textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
}
对我来说最无能为力的一行是:
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
实际上我在这里放置了纹理。
这是draw 方法:
public void draw(GL10 gl,
...
...
)
{
...
//gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glTranslatef(transx, transy, 0.0f);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, floatBufferArray[mFrame]);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
//gl.glDrawElements(GL10.GL_TRIANGLES, 1, GL10.GL_UNSIGNED_SHORT, vertexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}
[编辑 3]
我添加到draw、onDrawFrame 和主循环,没有错误:
int error = gl.glGetError();
if (error != 0)
Log.e("main loop", "Draw " + error);
调试后发现三星4只出现一个新错误:
08-07 12:57:53.356: E/ViewRootImpl(29124): sendUserActionEvent() mView == null
[编辑 4]
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig confid) {
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearColor(0,0,0,0);
gl.glClearDepthf(1.0f);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
gl.glEnable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
}
【问题讨论】:
-
您要支持哪个版本的 GL ES?看起来像 1.x,但最好问问。
-
你的纹理有二维的幂吗?对于 NPOT,您需要明确指定
CLAMP_TO_EDGE模式。但是因为你得到一个错误,告诉你视图是空的,你应该首先检查你的 OpenGL 上下文初始化代码。 -
感谢回答,如何查看
NPOT Texture?我使用vertices = new float[12];z=0。顺便说一句,我添加了onSurfaceCreated
标签: android opengl-es opengl-es-1.1