首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓OpenGL应用第二次启动白屏

安卓OpenGL应用第二次启动白屏
EN

Stack Overflow用户
提问于 2013-01-10 19:03:57
回答 3查看 1.1K关注 0票数 1

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

EN

回答 3

Stack Overflow用户

发布于 2013-01-10 19:14:15

我到目前为止的经验是:

  • 创建2的幂的纹理,并确保在绘制时将它们缩放和裁剪到正确的比例。
  • 当你可以进行ALPHA_8 (文本渲染)时,不要坚持使用RBGA_8888,在OnSurfaceDraw
  • Avoid OnSurfaceCreated context cast中被调用之前,
    • 可以在GL11中做任何你能做的事情。有些东西不能工作,例如glColor4ub可以编译但不工作。
    • 平衡你对每个组件的启用和禁用的调用,将你的调用绘制到你的场景中,你的nio buffers
    • 使用DrawElements,但是对于一个顶点的最简单的形状,在尽可能多的设备上进行
    • 测试。只是不要满足于模拟器,例如,2的非幂可以在模拟器上工作,但不能在电话上工作。
    • ,如果你可以使用按需绘制。
    • 使用的技巧是在onTouchEvent调用中放置一个等待20ms,并在你的onDraw中放置一个notify,以减少你必须处理的大量运动事件。你可以绕过onTouchEven,使用一个较低的调用来节省一些周期。
    • 尽可能多地使用纹理图集,例如,绘制分数和文本,或者animations
    • Disable花哨的渲染选项(DITHER_TEST等)。除非您渴望在纹理上进行逼真的渲染。如果在2D中绘制,则在渲染例程中完成绑定textures.
    • Avoid对象创建销毁(
    • )后,请禁用Bitmap.recycle()调用。GC调用会减慢你的frame rate.
    • Preload你的纹理。不要等到最后一分钟才去绑定你的纹理。如果你这样做,延迟会很明显,这样在应用程序启动时会更好。
票数 0
EN

Stack Overflow用户

发布于 2013-01-10 19:26:15

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

代码语言:javascript
运行
复制
@Override
protected void onPause() {
    super.onPause();

    mGLView.onPause();
}

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

    mGLView.onResume();
}

好的,那么也许:

代码语言:javascript
运行
复制
public void onSurfaceChanged(GL10 gl, int w, int h) {
    gl.glViewport(0, 0, w, h);
}
票数 0
EN

Stack Overflow用户

发布于 2013-02-22 10:16:12

您是在onSurfaceCreated()中还是在其他位置重新加载纹理?您会希望在onSurfaceCreated()中包含这些内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14256434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档