В libgdx у меня есть шейдер, и я хочу, чтобы мой объект Stage использовал этот шейдер для рисования. Я попытался настроить шейдер SpriteBatch на свой шейдер, а затем пакет спрайтов Stage, который он представляет, но он отображается как черный экран. Почему это не работает:Libgdx шейдеры в сцене?
ShaderProgram shader = new ShaderProgram(Gdx.files.internal("shader.vert"), Gdx.files.internal("shader.frag"));
SpriteBatch batch = new SpriteBatch();
batch.setShader(shader);
Stage stage = new Stage(new StretchViewport(768, 576), batch);
...
stage.act();
shader.begin();
stage.draw();
shader.end();
Мои шейдеры выглядеть:
shader.vert
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord;
uniform mat4 u_projTrans;
varying vec4 v_color;
varying vec2 v_texCoords;
void main()
{
v_color = a_color;
v_color.a = v_color.a * (256.0/255.0);
v_texCoords = a_texCoord + 0;
gl_Position = u_projTrans * a_position;
}
shader.frag
#ifdef GL_ES
#define LOWP lowp
precision mediump float;
#else
#define LOWP
#endif
varying LOWP vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
void main()
{
gl_FragColor = v_color * texture2D(u_texture, v_texCoords);
}
Это, кажется, работает только с одним текстуры. Каждая другая текстура не отображает. А также, что делает текстуру силой 2, не имеет значения.
прежде всего мой код такой же, как и то, о чем я упомянул, но я только что сформулировал его неправильно. начало и конец не имели никакого значения, когда я их удалял, но я попробую изменить его на a_texCoord0 – name
Да, меняет 'a_texCoord' на' a_texCoord0' трюк. Я не знаю, почему, но учебник, который я использовал, поставил его так, но теперь его работа так благодарит – name