Kotlin

Création d'un shader pour l'inversion des couleurs

Maintenant que notre moteur de rendu a besoin d'un shader, implémentons-le

  1. Ajouter fragmentShaderCode à la classe 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. Pour effectuer le rendu des images vidéo, la classe de rendu utilise les éléments suivants OpenGL shaders. Dans cet exemple, le shader produit l'effet de couleur inversée, plus précisément par la ligne suivante y = 1.0 - 1.1643 * (y - 0.0625); qui se trouve à l'intérieur du fragmentShaderCode

  2. Pour une implémentation complète du moteur de rendu, consultez l'exemple d'implémentation de l'application ici