TextButton yazı için Özel shader: https://github.com/libgdx/libgdx/wiki/Distance-field-fontslibGDX - Bu maddede açıklandığı gibi mesafe alan yazı deneme oldum
Her şey sadece yazı render olduğumda çalışıyor ama gölgelendiricisini kullanmaya çalıştığınızda TextButton
üzerinde, düğme sadece beyaz olur, çünkü gölgelendiriciyi sadece metne değil, tüm düğmeye uygular. Etrafa baktım ama sadece bir TextButton
metni için gölgelendiricinin nasıl değiştirileceğine dair herhangi bir bilgi bulamıyorum. Sadece bir TextButton
'un metin oluşturulmasına nasıl bir cutom shader uygularım?
Init Kodu:
textShader = new ShaderProgram(Gdx.files.internal("graphics/shaders/font/font.vert"),
Gdx.files.internal("graphics/shaders/font/font.frag"));
//exact same shaders as linked article
stage = new Stage();
stage.getBatch().setShader(textShader);
//Setting the shader for the stage will set the shader for everything in the stage,
//like my labels/buttons etc. This works fine for my labels as they are plain text,
//but my buttons become completely white.
init the rest of my labels, buttons, batches etc...
Render kodu:
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL_COLOR_BUFFER_BIT);
render background/other stuff...
stage.act(delta);
stage.draw();
Fragment shader:
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D u_texture;
varying vec4 v_color;
varying vec2 v_texCoord;
const float c_width = 0.5;
const float c_edge = 0.1;
const vec2 c_offset = vec2(0);
const float c_borderWidth = 0.5;
const float c_borderEdge = 0.5;
const vec3 c_color = vec3(0.7, 0.3, 0.1);
const vec3 c_outlineColor = vec3(0.3);
void main() {
float distance = 1.0 - texture(u_texture, v_texCoord).a;
float alpha = 1.0 - smoothstep(c_width, c_width + c_edge, distance);
float distance2 = 1.0 - texture(u_texture, v_texCoord + c_offset).a;
float outlineAlpha = 1.0 - smoothstep(c_borderWidth, c_borderWidth + c_borderEdge, distance2);
float overallAlpha = alpha + (1.0 - alpha) * outlineAlpha;
vec3 overallColour = mix(c_outlineColor, c_color, alpha/overallAlpha);
gl_FragColor = vec4(overallColour, overallAlpha);
}
Vertex Shader:
uniform mat4 u_projTrans;
attribute vec4 a_position;
attribute vec2 a_texCoord0;
attribute vec4 a_color;
varying vec4 v_color;
varying vec2 v_texCoord;
void main() {
gl_Position = u_projTrans * a_position;
v_texCoord = a_texCoord0;
v_color = a_color;
}
Kodunuzu görebilir miyiz lütfen? –
Bazı kodları ekledim. Ayrıca, TextButtons'daki metnin iyi olduğunu da unutmamalıyım, sadece bulanıklaşan düğmelerin arka planı. – Charanor