Android OpenGL app第二次启动时显示白屏

时间:2013-01-10 11:03:57

标签: android opengl-es

我的游戏在第一次启动时正确显示纹理,然后我退出并再次启动它,只显示白屏。我认为纹理加载和android活动生命周期存在一些问题,例如在暂停或销毁时清理东西。 有趣的是它只在运行时显示白屏,但在我调试时显示得非常好。 请给我一些建议,谢谢。

3 个答案:

答案 0 :(得分:0)

到目前为止我的经历:

  • 以2为幂创建纹理,并确保缩放和 在绘制时将它们剪裁成正确的比例。
  • 当您可以执行ALPHA_8(文本呈现)
  • 时,请不要坚持使用RBGA_8888
  • 在你被调用之前,做你在OnSurfaceCreated中可以做的任何事情 OnSurfaceDraw
  • 避免使用GL11上下文。有些东西不会工作,例如glColor4ub 将编译但不工作。
  • 平衡每个组件绘制的启用和禁用调用 你对场景图的调用。
  • 预分配您的nio缓冲区
  • 使用DrawElements,但最简单的形状是一个顶点
  • 尽可能多地测试设备。只是不要满足于 仿真器,例如两个人的非权力在模拟器上工作但不在手机上工作。
  • 如果您可以使用按需绘图。
  • 使用在onTouchEvent调用中等待20ms的技巧 并在你的onDraw中通知,以减少你的运动事件的泛滥 必须处理。您可以绕过onTouchEven并使用较低的呼叫 也节省了一些周期。
  • 尽可能多地使用纹理图集,例如绘制得分和文字或 动画
  • 禁用花哨的渲染选项(DITHER_TEST等...)除非你 渴望在纹理上进行逼真的渲染。
  • 如果您在2D中绘图,则禁用DEPTH_TEST
  • 完成绑定后,请不要忘记Bitmap.recycle()调用 你的纹理。
  • 在渲染中避免对象创建破坏(PointF Rect) 例程。 GC调用会降低帧速率。
  • 广泛预加载纹理。不要等到你画画 最后一分钟绑定你的纹理。如果你这样做,滞后是显而易见的 它在app启动时更好。

答案 1 :(得分:0)

你应该使用onPause和onResume方法,如果它没有解决问题,我会添加更多建议。几个月前我遇到了同样的问题。

@Override
protected void onPause() {
    super.onPause();

    mGLView.onPause();
}

@Override
protected void onResume() {
    super.onResume();

    mGLView.onResume();
}

好吧那么也许:

public void onSurfaceChanged(GL10 gl, int w, int h) {
    gl.glViewport(0, 0, w, h);
}

答案 2 :(得分:0)

您是在onSurfaceCreated()还是在其他地方重新加载纹理?你想在onSurfaceCreated()中拥有这些东西。