private void renderDistortionMesh(final DistortionMesh mesh, final int textureId) {
   ProgramHolder holder;
   if (this.mChromaticAberrationCorrectionEnabled) {
     holder = this.mProgramHolderAberration;
   } else {
     holder = this.mProgramHolder;
   }
   GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mesh.mArrayBufferId);
   GLES20.glVertexAttribPointer(holder.aPosition, 2, GLES20.GL_FLOAT, false, 36, 0 * 4);
   GLES20.glEnableVertexAttribArray(holder.aPosition);
   GLES20.glVertexAttribPointer(holder.aVignette, 1, GLES20.GL_FLOAT, false, 36, 2 * 4);
   GLES20.glEnableVertexAttribArray(holder.aVignette);
   GLES20.glVertexAttribPointer(holder.aBlueTextureCoord, 2, GLES20.GL_FLOAT, false, 36, 7 * 4);
   GLES20.glEnableVertexAttribArray(holder.aBlueTextureCoord);
   if (this.mChromaticAberrationCorrectionEnabled) {
     GLES20.glVertexAttribPointer(
         ((ProgramHolderAberration) holder).aRedTextureCoord,
         2,
         GLES20.GL_FLOAT,
         false,
         36,
         3 * 4);
     GLES20.glEnableVertexAttribArray(((ProgramHolderAberration) holder).aRedTextureCoord);
     GLES20.glVertexAttribPointer(
         ((ProgramHolderAberration) holder).aGreenTextureCoord,
         2,
         GLES20.GL_FLOAT,
         false,
         36,
         5 * 4);
     GLES20.glEnableVertexAttribArray(((ProgramHolderAberration) holder).aGreenTextureCoord);
   }
   GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
   GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
   GLES20.glUniform1i(this.mProgramHolder.uTextureSampler, 0);
   GLES20.glUniform1f(this.mProgramHolder.uTextureCoordScale, this.mResolutionScale);
   GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, mesh.mElementBufferId);
   GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP, mesh.nIndices, GLES20.GL_UNSIGNED_SHORT, 0);
 }