3

我有一个GLSurfaceView嵌入在常规 Android 布局中的游戏。在应用程序运行一段时间后,创建了大量纹理然后删除(所有显示的文本都动态渲染为纹理,如果不使用,则再次删除),来自其他布局元素的纹理会丢失它们的纹理。

例如,文本视图或按钮会丢失它们的文本纹理。混乱的按钮文本

这似乎是所有 Android 版本 > 3 的问题,其中布局由 OpenGL ES 渲染器渲染。

没有任何游戏纹理会丢失。只有视图纹理。

glGenTextures和是同步的glDeleteTextures,所以这不应该是一个问题..

在混合常规 android 视图和 OpenGL 时,是否还有其他需要注意的事项?

4

3 回答 3

1

好的,我发现我有什么问题。我通过调用mTextureManager.deleteAllTextures()我的片段来删除 UI 线程上的纹理onPause();

我通过删除我的纹理来解决它

mSurfaceView.queueEvent(new Runnable(){
    //delete all textures here
}

希望这会帮助其他人......

于 2013-03-28T17:05:56.097 回答
1

因为无论如何我都在做所有排队到表面视图的纹理处理,所以它不可能是由那个引起的(就像 CFlex 指出的那样)。

最后它是以下内容:我在渲染器的构造函数中调用了一些 gl 方法。但是,渲染器在创建上下文之前是构造函数,因为渲染器必须在初始化时传递给表面视图。所以 gl 调用似乎弄乱了布局上下文。

有趣的是,大多数设备似乎并不关心(除了描述的丢失纹理的行为)。但是,lg p990 在启动时因“未创建上下文”异常而崩溃,这给出了最后的线索。在没有在渲染器构造函数中进行 gl 初始化之后,但后来效果消失了。

请。投票支持 CFlex 的答案,因为它解决了问题的一个重要部分。

于 2013-05-03T10:20:37.790 回答
0

我有同样的问题。下一行帮助我解决了这个问题。

<application android:hardwareAccelerated="false" ...>

想知道我测试的所有设备都没有出现什么问题。

于 2013-11-23T18:27:17.633 回答