inverte janela preservando o matiz

1

Eu adoro o recurso de cor da janela invertida no compiz, no entanto, eu adoraria ser capaz de inverter apenas o brilho, preservando o tom original. O que eu gostaria ainda mais seria um recurso global em todas as janelas que o brilho inverta a janela, e se isso é mais escuro que o original, use isso, caso contrário, use o original. Então eu nunca teria que olhar para uma tela branca novamente;).

atualização:

Acho que fazer essa alteração no shader em neg.cpp pode fazer a versão básica do que desejo. Eu encontrei rgb para hsv rgb código GLSL, injetado isso no shader original, defina o v para 1.0 - v (eu estou supondo que o intervalo para value é 1,0, mas não tenho certeza), então converter o resultado de volta ao rgb e usá-lo como a cor final do pixel:

/* rgb:hsv conversion based on:
   http://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl */
static std::string fragment_function = "                                         \n\
void neg_fragment () {                                                           \n\
    // convert to hsv                                                            \n\
    vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);                             \n\
    vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));            \n\
    vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));            \n\
    float d = q.x - min(q.w, q.y);                                               \n\
    float e = 1.0e-10;                                                           \n\
    vec3 c = vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);   \n\
    // flip luminosity (value)                                                   \n\
    c.z = 1.0 - c.z                                                              \n\
    // convert back to rgb                                                       \n\
    K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);                                    \n\
    p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);                                 \n\
    c = c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);                       \n\
    // use converted rgb value                                                   \n\
    gl_FragColor = vec4(c, gl_FragColor.a);                                      \n\
}                                                                                \n\
";

Eu encontrei o repositório compiz no bazar. Irá procurar o código-fonte e tentar descobrir onde o módulo de cores invertido está implementado

Para qualquer um que esteja se perguntando, o plugin é o plugin "negativo" ou "neg", e a parte relevante do código-fonte é here on bazaar.launchpad.net

Todos os três endereços de e-mail de contato no leia-me original do plug-in ficaram obscuros - se alguém tiver uma maneira de entrar em contato com o desenvolvedor original que seria muito apreciado.

Eu não tenho muito mais tempo para colocar isso, mas se alguém descobrir uma maneira de compilar para compilar e puder testar isso, eu aprecio isso!

    
por Sam Johnson 15.03.2017 / 17:03

0 respostas