为单个演员设置着色器

时间:2016-11-18 18:52:46

标签: libgdx

我今天开始稍微处理着色器,现在我被卡住了。我想将着色器应用于scene2d阶段中的某些actor(Images)。它甚至可能吗? 我只对整个场景有一个绘制方法,但不适用于单个演员或演员组。

在scene2d阶段之外我会做这样的事情:

batch.setShader(shader);
batch.begin();
batch.draw(Image);
batch.end();
batch.setShader(null);
batch.begin();

如何在scene2d环境中实现这一目标?

1 个答案:

答案 0 :(得分:2)

您可以在Actor的draw方法中更改着色器,然后将其更改回来(当着色器更改时,Batch会自动处理刷新):

public void draw (Batch batch, float parentAlpha){
    batch.setShader(customShader);
    batch.draw(...);
    batch.setShader(null);
}

请记住,每次执行此操作时,都会导致批次刷新。如果您要使用自定义着色器绘制几十个actor,则应该将它们放在更改着色器的组中,以便仅为该组刷新一次批处理:

//Custom Group:
public void draw (Batch batch, float parentAlpha){
    batch.setShader(customShader);
    super.draw(batch, parentAlpha);
    batch.setShader(null);
}