private int createTexture( final int width, final int height, final int textureFormat, final int textureType) { final int[] textureIds = {0}; GLES20.glGenTextures(1, textureIds, 0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[0]); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); GLES20.glTexImage2D( GLES20.GL_TEXTURE_2D, 0, textureFormat, width, height, 0, textureFormat, textureType, (Buffer) null); return textureIds[0]; }
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); }