Kotlin

Creación de un shader para la inversión de colores

Ahora nuestro renderizador necesita shader vamos a implementarlo

  1. Añade fragmentShaderCode a la clase MyRenderer:
private val fragmentShaderCode = """
    precision mediump float;
    uniform sampler2D Ytex;
    uniform sampler2D Utex;
    uniform sampler2D Vtex;
    varying vec2 vTextureCoord;

    void main() {
        float nx = vTextureCoord.x;
        float ny = vTextureCoord.y;

        float y = texture2D(Ytex, vec2(nx, ny)).r;
        float u = texture2D(Utex, vec2(nx, ny)).r - 0.5;
        float v = texture2D(Vtex, vec2(nx, ny)).r - 0.5;

        // Inverted Y color
        y = 1.0 - 1.1643 * (y - 0.0625);

        float r = y + 1.5958 * v;
        float g = y - 0.39173 * u - 0.81290 * v;
        float b = y + 2.017 * u;

        gl_FragColor = vec4(r, g, b, 1.0);
    }
""".trimIndent()
  1. Para renderizar los fotogramas de vídeo, la clase renderer utiliza OpenGL shaders. En este shader de ejemplo se produce el efecto de color invertido, más precisamente esto se logra mediante esta línea y = 1.0 - 1.1643 * (y - 0.0625); que está dentro del fragmentShaderCode

  2. Para ver cómo se implementa completamente el renderizador, consulta la implementación de la aplicación de ejemplo. aquí