【问题标题】:LibGDX SpriteBatch Multitexture possible?LibGDX SpriteBatch 多纹理可能吗?
【发布时间】:2012-08-15 22:53:42
【问题描述】:

我很高兴使用 LibGDX 框架的 SpriteBatch 类。 我的目标是通过着色器修改精灵的表示。

batch = new SpriteBatch(2, shaderProgram);

我从 SpriteBatch 类复制了默认着色器并添加了另一个 统一采样器 2d

+ "uniform sampler2D u_Texture2;\n"//

有没有一种工作方法可以将纹理赋予着色器。 这样做,总是以 ClearColor 屏幕结束。

batch.begin();
  texture2.bind(1);
  shaderProgram.setUniformi("u_Texture2", 1);
  batch.draw(spriteTexture,positions[0].x,positions[0].y);
  batch.draw(spriteTexture,positions[1].x,positions[1].y);
batch.end();

每个纹理单独工作。在 Mesh Class 的帮助下手动绘制可以按预期工作。那么我该怎么做才能使用 SpriteBatch 的便利性呢?

求帮助

【问题讨论】:

    标签: android opengl-es-2.0 libgdx multitexturing spritebatch


    【解决方案1】:

    我猜这里的问题与纹理绑定有关。 SpriteBatch 假设活动纹理单元为 0,因此它调用

    lastTexture.bind(); 而不是lastTexture.bind(0);

    问题是你给它的活动单位是1(你在代码中调用texture2.bind(1);)。所以,纹理单元 0 永远不会被绑定,这可能是导致黑屏的原因。

    例如,我会在draw 调用之前添加一个Gdx.GL20.glActiveTexture(0);。我不太确定它会解决问题,但这是一个开始!

    编辑: 我尝试了我建议的解决方案,它有效! :D。为了更清楚,您应该这样做:

          batch.begin();
          texture2.bind(1); 
          shaderProgram.setUniformi("u_Texture2", 1);
          Gdx.gl.glActiveTexture(GL10.GL_TEXTURE0);//This is required by the SpriteBatch!!
                 //have the unit0 activated, so when it calls bind(), it has the desired effect.
          batch.draw(spriteTexture,positions[0].x,positions[0].y);
          batch.draw(spriteTexture,positions[1].x,positions[1].y);
        batch.end();
    

    【讨论】:

    • 嘿,我终于有答案了,谢谢!你说的对。这是类绑定纹理的方式的原因。我需要说我已经用它制作了我自己的自定义 SpriteBatch 类。 SpriteBatch 在渲染更大尺寸的帧缓冲区纹理时也显示了一些问题。而且我之前总是绑定 TEXTURE0。这就是为什么我决定按照我的方式去做。不太方便,但更灵活。现在我有一个 Sprite Batch,它只处理顶点的生成。周围的一切都可以使用自己的着色器进行自定义。
    • 请注意,SpriteBatch 不仅仅是生成顶点,如果您不小心,您会遇到性能问题。 SpriteBatch 本身有一些“可用性”问题,但这是一个设计决定。它旨在简化最常见的绘图操作,但不知何故损害了灵活性。无论如何,到目前为止,我已经能够解决我遇到的大部分问题(大多数时候它在使用之前启用/禁用适当的 opengl 标志)。也许今晚我会像你一样尝试实现多纹理并让你知道;)
    • 抱歉又迟到了,感谢您的支持。它就像你编辑的那样工作。但是,我不喜欢它。这对我来说看起来有点危险。我更喜欢我的专用版本,因为它的尺寸更小,所以它也更快更好地调试。 SpriteBatch 试图让每个人都开心。在我看来,这并不是一个真正的性能优化类。但无论如何,感谢您明确指出 SpriteBatch 使用的是 LAST BOUND 纹理,而不仅仅是 TEXTURE0
    猜你喜欢
    • 2014-10-28
    • 2011-11-24
    • 2023-03-30
    • 2014-09-05
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    相关资源
    最近更新 更多