Java Libgdx / OpenGL, причина, по которой спрайт не меняет цвет / рисунок - PullRequest
0 голосов
/ 01 июля 2018

Безумно новичок в 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);

работает отлично, но мне нужно иметь возможность устанавливать цвет вне файлов шейдеров. Чего мне здесь не хватает?

...