我正在使用本机代码编写游戏,所有图形均使用OpenGL ES 2.0完成。我尝试通过反复创建并删除它们不需要的时候(使用glDeleteTextures)来节省纹理使用。我注意到,OpenGL将永远不会重复使用相同的纹理ID,在完成192个纹理创建之后,android屏幕会变成白色(首先是部分,下一次加载会使其完全),除非通过释放应用程序焦点并将其恢复,否则它不会恢复。这是一个错误还是功能? glFlush()也没有帮助。-SOLVED-在Android OpenGL ES 2.0中最大纹理创建/删除
我写了我自己的字体渲染引擎,它使用字体精灵图集将所有文本渲染为单独的新纹理。这样一来,实际的文本就完成了一次,随后的绘制调用仅用于一个纹理。但是,例如玩家姓名查询会在每次输入或删除一个新字母时重新创建文本纹理,在这里我很快遇到了192的限制。无论加载和删除哪些纹理都无关紧要,在创建一定数量的作品后,屏幕变白。
这种情况至少发生在我的Android设备上使用Android 6.0的三星J5 2016上运行。任何建议表示赞赏。
经过进一步的调查后,我发现这个问题与正常的纹理加载和卸载无关,而只与使用framebuffer渲染纹理有关。192也不是一个固定的数量,这是多次删除和创作的结果。真正的问题是,经过一定数量的渲染到纹理操作(通过适当的清理)之后,窗口变黑(首先部分,像馅饼,然后完全)。这使得我的文字渲染理念将所有字母渲染成新的纹理(无需分别在每一帧中绘制每一个字母)从长远来看不起作用? – kleimola
很难确定是什么导致问题而不知道你是如何实现渲染调用的。你能提供一些示例代码吗?编辑 - 我刚刚看到你的文章与你想出的解决方案。 – sparkplug