LibGDX渲染只能通过着色器一次吗?

时间:2016-08-18 03:04:38

标签: java opengl libgdx

我有一些3D精灵的东西看起来像https://xoppa.github.io/blog/a-simple-card-game/的最后一步。哪个生成像这样的可渲染

 public void getRenderables(Array<Renderable> renderables, Pool<Renderable> pool) {
        meshBuilder.begin(mesh.getVertexAttributes());
        meshBuilder.part("cards", GL20.GL_TRIANGLES, renderable.meshPart);
        for (Card card : this) {
            meshBuilder.setVertexTransform(card.transform);
            meshBuilder.addMesh(card.vertices, card.indices);
        }
        meshBuilder.end(mesh);

        renderables.add(renderable);
    }

奇怪的是,似乎第一次由模型渲染渲染它是唯一的样子。例如,如果我使用帧缓冲区中的普通着色器渲染它,然后使用深度贴图着色器(仅输出不同的灰色阴影)再次渲染它,它以某种方式具有颜色。由此可见,我认为它无论出于何种原因都不会再次通过着色器。

有谁知道这是为什么?这对我来说似乎很奇怪。

虽然我知道贴花存在,但我想要&#34; 3D精灵&#34;与其他一切一起呈现。

1 个答案:

答案 0 :(得分:0)

好吧,我明白了。问题是它只添加了一次渲染;相反,它每次都需要添加一个新的渲染。

val renderable = pool.obtain()
renderable.material = mat
...
renderables.add(renderable)

编辑:

更好的回答,renderables缓存他们使用的着色器。 renderable.shader = null也可以做到这一点。