Kotlin

Creación de un sombreador para la inversión del color

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 la implementación completa del renderizador, consulte la aplicación de ejemplo aquí