resizing size text should be drawn with the current foreground color
This commit is contained in:
parent
fffee1049f
commit
ddfa653197
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
uniform sampler2D image;
|
uniform sampler2D image;
|
||||||
#ifdef ALPHA_MASK
|
#ifdef ALPHA_MASK
|
||||||
uniform uint fg;
|
uniform vec3 amask_fg;
|
||||||
uniform float alpha_mask_premult;
|
uniform float alpha_mask_premult;
|
||||||
#else
|
#else
|
||||||
uniform float inactive_text_alpha;
|
uniform float inactive_text_alpha;
|
||||||
@ -12,23 +12,10 @@ uniform float inactive_text_alpha;
|
|||||||
in vec2 texcoord;
|
in vec2 texcoord;
|
||||||
out vec4 color;
|
out vec4 color;
|
||||||
|
|
||||||
#ifdef ALPHA_MASK
|
|
||||||
const uint BYTE_MASK = uint(0xFF);
|
|
||||||
|
|
||||||
vec3 color_to_vec(uint c) {
|
|
||||||
uint r, g, b;
|
|
||||||
r = (c >> 16) & BYTE_MASK;
|
|
||||||
g = (c >> 8) & BYTE_MASK;
|
|
||||||
b = c & BYTE_MASK;
|
|
||||||
return vec3(float(r) / 255.0, float(g) / 255.0, float(b) / 255.0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
color = texture(image, texcoord);
|
color = texture(image, texcoord);
|
||||||
#ifdef ALPHA_MASK
|
#ifdef ALPHA_MASK
|
||||||
color = vec4(color_to_vec(fg), color.r);
|
color = vec4(amask_fg, color.r);
|
||||||
color = mix(color, vec4(color.rgb * color.a, color.a), alpha_mask_premult);
|
color = mix(color, vec4(color.rgb * color.a, color.a), alpha_mask_premult);
|
||||||
#else
|
#else
|
||||||
color.a *= inactive_text_alpha;
|
color.a *= inactive_text_alpha;
|
||||||
|
|||||||
@ -244,8 +244,7 @@ create_graphics_vao() {
|
|||||||
|
|
||||||
struct CellUniformData {
|
struct CellUniformData {
|
||||||
bool constants_set;
|
bool constants_set;
|
||||||
bool alpha_mask_fg_set;
|
GLint gploc, gpploc, cploc, cfploc, fg_loc, amask_premult_loc, amask_fg_loc, amask_image_loc;
|
||||||
GLint gploc, gpploc, cploc, cfploc, fg_loc, amask_premult_loc;
|
|
||||||
GLfloat prev_inactive_text_alpha;
|
GLfloat prev_inactive_text_alpha;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -468,11 +467,10 @@ draw_centered_alpha_mask(OSWindow *os_window, size_t screen_width, size_t screen
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, canvas);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, canvas);
|
||||||
bind_program(GRAPHICS_ALPHA_MASK_PROGRAM);
|
bind_program(GRAPHICS_ALPHA_MASK_PROGRAM);
|
||||||
if (!cell_uniform_data.alpha_mask_fg_set) {
|
glUniform1i(cell_uniform_data.amask_image_loc, GRAPHICS_UNIT);
|
||||||
cell_uniform_data.alpha_mask_fg_set = true;
|
#define CV3(x) (((float)((x >> 16) & 0xff))/255.f), (((float)((x >> 8) & 0xff))/255.f), (((float)(x & 0xff))/255.f)
|
||||||
glUniform1i(glGetUniformLocation(program_id(GRAPHICS_ALPHA_MASK_PROGRAM), "image"), GRAPHICS_UNIT);
|
glUniform3f(cell_uniform_data.amask_fg_loc, CV3(OPT(foreground)));
|
||||||
glUniform1ui(glGetUniformLocation(program_id(GRAPHICS_ALPHA_MASK_PROGRAM), "fg"), OPT(foreground));
|
#undef CV3
|
||||||
}
|
|
||||||
glUniform1f(cell_uniform_data.amask_premult_loc, os_window->is_semi_transparent ? 1.f : 0.f);
|
glUniform1f(cell_uniform_data.amask_premult_loc, os_window->is_semi_transparent ? 1.f : 0.f);
|
||||||
send_graphics_data_to_gpu(1, os_window->gvao_idx, &data);
|
send_graphics_data_to_gpu(1, os_window->gvao_idx, &data);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
@ -524,6 +522,8 @@ set_cell_uniforms(float current_inactive_text_alpha, bool force) {
|
|||||||
cell_uniform_data.cploc = glGetUniformLocation(program_id(CELL_PROGRAM), "inactive_text_alpha");
|
cell_uniform_data.cploc = glGetUniformLocation(program_id(CELL_PROGRAM), "inactive_text_alpha");
|
||||||
cell_uniform_data.cfploc = glGetUniformLocation(program_id(CELL_FG_PROGRAM), "inactive_text_alpha");
|
cell_uniform_data.cfploc = glGetUniformLocation(program_id(CELL_FG_PROGRAM), "inactive_text_alpha");
|
||||||
cell_uniform_data.amask_premult_loc = glGetUniformLocation(program_id(GRAPHICS_ALPHA_MASK_PROGRAM), "alpha_mask_premult");
|
cell_uniform_data.amask_premult_loc = glGetUniformLocation(program_id(GRAPHICS_ALPHA_MASK_PROGRAM), "alpha_mask_premult");
|
||||||
|
cell_uniform_data.amask_fg_loc = glGetUniformLocation(program_id(GRAPHICS_ALPHA_MASK_PROGRAM), "amask_fg");
|
||||||
|
cell_uniform_data.amask_image_loc = glGetUniformLocation(program_id(GRAPHICS_ALPHA_MASK_PROGRAM), "image");
|
||||||
#define S(prog, name, val, type) { bind_program(prog); glUniform##type(glGetUniformLocation(program_id(prog), #name), val); }
|
#define S(prog, name, val, type) { bind_program(prog); glUniform##type(glGetUniformLocation(program_id(prog), #name), val); }
|
||||||
S(GRAPHICS_PROGRAM, image, GRAPHICS_UNIT, 1i);
|
S(GRAPHICS_PROGRAM, image, GRAPHICS_UNIT, 1i);
|
||||||
S(GRAPHICS_PREMULT_PROGRAM, image, GRAPHICS_UNIT, 1i);
|
S(GRAPHICS_PREMULT_PROGRAM, image, GRAPHICS_UNIT, 1i);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user