Безумно новичок в OpenGL, хотя я немного использовал Libgdx.
Я реализую код из этого урока для шрифтов поля расстояния .
файлы vert и frag почти такие же, как и у автора учебника, хотя я пытаюсь изменить цвет и альфа-код с помощью кода Java.
Вот как я реализую шейдерную программу
ShaderProgram shaderProgram = ShaderProgram(Gdx.files.internal("Fonts/Shader/font.vert"), Gdx.files.internal("Fonts/Shader/font.frag"));
AssetLibrary.fontShader.pedantic = false;
AssetLibrary.fontShader.setUniformf("custom_color", 1, 0, 0, 1);
batch.setShader(AssetLibrary.fontShader);
font.draw(batch, layout, pos.x, pos.y);
batch.setShader(null);
А вот мой фрагментный файл.
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D u_texture;
uniform vec4 custom_color;
varying vec4 v_color;
varying vec2 v_texCoord;
const float smoothing = 1.0/16.0;
void main() {
float distance = texture2D(u_texture, v_texCoord).a;
float alpha = smoothstep(0.5 - smoothing, 0.5 + smoothing, distance);
gl_FragColor = vec4(custom_color.rgb, custom_color.a * alpha);
}
Итак, я понял, что:
AssetLibrary.fontShader.setAttributef("custom_color", 1, 0, 0, 1);
собирался позволить мне установить цвет пикселей из Java, но все, что он, по-видимому, делает, это заставляет мой спрайт исчезнуть. Я также проверил, что custom_color.r и custom_color.a заполняются с помощью:
AssetLibrary.fontShader.getUniformSize("custom_color.r");
AssetLibrary.fontShader.getUniformSize("custom_color.a");
и они есть.
Сейчас я не совсем новичок в программировании, но мне трудно понять, в чем проблема. На экране ничего не отображается. Хотя, если я зайду в файл фрагмента и вручную установлю:
gl_FragColor = vec4(1, 0, 0, 1 * alpha);
работает отлично, но мне нужно иметь возможность устанавливать цвет вне файлов шейдеров. Чего мне здесь не хватает?