Я пытаюсь понять шейдеры, используя libgdx, исходящий из XNA/HLSL. Я пытаюсь получить пару шейдеров vert/frag для воспроизведения вывода, который я получаю без шейдера, но он ничего не отображает.
Создание шейдера:
void SetupShader()
{
ShaderProgram.pedantic = false;
shader = new ShaderProgram(
Gdx.files.internal("assets/default.vert").readString(),
Gdx.files.internal("assets/default.frag").readString());
if(!shader.isCompiled()) {
Gdx.app.log("Problem loading shader:", shader.getLog());
}
batch.setShader(shader);
}
default.vert:
attribute vec4 a_Position;
attribute vec4 a_Normal;
attribute vec2 a_TexCoord;
attribute vec4 a_Color;
uniform mat4 u_projTrans;
varying vec2 v_texCoords;
varying vec4 v_color;
void main() {
v_color = a_Color;
v_texCoords = a_TexCoord;
gl_Position = u_projTrans * a_Position;
}
default.frag:
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoords;
varying vec4 v_color;
void main() {
gl_FragColor = v_color;
}
Рендеринг:
batch.begin();
for (GameObject gObj : gameObjects)
gObj.Draw(batch);
batch.end();
Есть предложения? Я также новичок в OpenGL-ES, поэтому я могу упустить что-то очевидное. Я немного осмотрелся перед публикацией, и документ для SpriteBatch.setShader(ShaderProgram)
был следующим:
Устанавливает шейдер для использования в среде GLES 2.0. Положение вершины атрибут называется "a_position", атрибут текстурных координат называется "a_texCoords0", атрибут цвета называется "a_color". См. ShaderProgram.POSITION_ATTRIBUTE, ShaderProgram.COLOR_ATTRIBUTE и ShaderProgram.TEXCOORD_ATTRIBUTE, к которому добавляется "0" указывают на использование первого текстурного блока. Матрица проекции загружается через униформу mat4 под названием «u_proj», матрица преобразования загружается через униформу под названием «u_trans», комбинированное преобразование и проекционная матрица загружается через униформу mat4, называемую "u_projTrans". Сэмплер текстуры передается через юниформу, называемую "u_текстура". Вызовите этот метод с нулевым аргументом, чтобы использовать значение по умолчанию. шейдер.