在LibGdx中处理纹理的释放

3
我将使用下面提到的常见方法createSinglePixelTexture()创建一个指定颜色的单像素。
问题: 1. 我需要处理"singlePixelPixmap"和纹理"t"吗? 2. 如果我需要处理,我在哪里可以处理它们?
singlePixelTexture = createSinglePixelTexture(0.129f, 0.129f, 0.129f, .7f);



private Texture createSinglePixelTexture(float r,float g,float b,float a) {
    Pixmap singlePixelPixmap; 
    singlePixelPixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
    singlePixelPixmap.setColor(r, g, b, a);
    singlePixelPixmap.fill();
    PixmapTextureData textureData = new PixmapTextureData(singlePixelPixmap, Pixmap.Format.RGBA8888, false, false, true);
    Texture t = new Texture(textureData);
    t.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);
    return t; 
}

你必须处理它!但我们不能告诉你何时可以处理它。这取决于你... 你应在它不再被使用时处理它。 - noone
但是变量“singlePixelPixmap”和“t”不能被释放,因为它们的作用域在方法createSinglePixelTexture()内部。我们不能在return语句之前将其释放。这里有什么建议吗? - iappmaker
当然,你需要在这个范围之外处理纹理,因为你要返回它。我认为你也可以使pixmap“受管理”,这将导致纹理被处理时也会被处理。 - noone
我确定我必须处理纹理“singlePixelTexture”,因为它超出了方法createSinglePixelTexture()的范围。那么在createSinglePixelTexture()中的“singlePixelPixmap”和“t”呢?另外,请告诉我pixmap“managed”是什么意思。 - iappmaker
看起来你正在试图解决错误的问题。你真的应该重新考虑你的方法。简单地添加一个完全不透明的白色图像,大约是3x3像素(1x1也可以,但扩展一下并没有什么坏处),到你的图集中。然后你可以对其进行着色(例如 setColor)而不是每次创建一个新纹理。 - Xoppa
我需要在一个点上获取黑色像素,在另一个地方获取红色和绿色。这就是背后的原因。 - iappmaker
1个回答

3
  1. 您不需要中间人PixmapTextureData;这是完全可选的。
  2. 一旦您使用Pixmap创建了Texture,您可以处理Pixmap。因此,在return之前,您可以插入除纹理以外的所有内容的处理。
  3. 一旦您处理了Texture,它就无法绘制。除非您确定再也不会尝试绘制它,否则不要处理t

1
我明白了,您能告诉我dispose在我的createSinglePixelTexture()方法中的位置吗? - iappmaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接