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); }