【问题标题】:LibGDX Saving textures to avoid context lossLibGDX 保存纹理以避免上下文丢失
【发布时间】:2013-02-16 03:20:00
【问题描述】:

我在基于 LibGDX 的 Android 应用程序中有一个纹理,它是通过 FrameBuffers 程序创建的,我需要通过上下文丢失来保留它,似乎唯一有效的方法是简单地保存数据,无论是作为完整的图像或原始数据,然后在时机成熟时将其加载回来。不过,我正在努力寻找任何方法来实现这一目标,因为我所采取的每条路线都以某种方式导致彻底失败。

我已经搜索了很多,但我遇到的任何问题都没有解决。我主要是在寻找正确方向的提示,而不是迄今为止我一直在做的漫无目的的搜索和尝试。我认为最好的办法是将纹理中的所有数据转换为某种“缓冲区”,在内部保存数据,然后重新加载并重新创建纹理,但我不确定最好的方法是什么去做就是了。

【问题讨论】:

    标签: android libgdx textures buffer


    【解决方案1】:

    PixmapIO 类应该有助于编写运行时生成的像素图。不过,它并不是您正在寻找的 FBO 纹理。 (从PixmapTexture 很容易,但反过来就不太容易了。)如果您用于在FBO 中生成数据的图元在Pixmap 上可用(例如,基本几何图元),这可能是另一种选择。我相信这是最接近 libGDX 支持的保存运行时纹理的机制,但我并不肯定。

    周围有一些 libGDX 代码用于从帧缓冲区中抓取字节(FBO 的纹理数据都存在于您的 GPU 上,因此您需要跳过一些环节才能将其复制到普通内存中)。请参阅ScreenUtilsthe links here about screenshots and PNGs

    使用从ScreenUtils 方法之一返回的byte[] 来调整PixmapIO 以写出“CIM”格式的文件应该很容易。

    或者,您可以跟踪对 FBO 执行的“操作”列表,这样您就可以重播它们(稍后重新构建内容)。不过,这在很大程度上取决于您的纹理中的内容...

    【讨论】:

    • 我终于有机会在这方面进行更多工作,并且通过一些修改,我设法使用上面链接的与保存 PNG 相关的方法使其部分工作。我现在遇到了一个奇怪的问题,虽然在 PC 上进行测试时,图像被完美地创建,但在 Android 设备上,由于某种原因,只保存了纯黑色图像。这对我来说没有多大意义,但希望有一个简单的解决方案。我一找到就回帖!
    • 您是否设法获得完整图像而不是黑色图像?
    • @Synthetik 我也得到了一张黑色图像。检查日志时,它说"com.badlogic.gdx.utils.GdxRuntimeException: Pixmap already disposed"。您不能创建多个 Pixmap 副本,有点像这样。这是 Pixmap 的一些“不兼容”。对不起,我是新手。更详细的解释见here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 2023-03-30
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多