From ff1305cd1919966eedaa64a0d5ad7a0223b27d9d Mon Sep 17 00:00:00 2001 From: hschlueter Date: Thu, 5 May 2022 19:24:44 +0100 Subject: [PATCH] Remove redundant attribute from matrix transformation vertex shader. The texture coordinates can be derived from the frame coordinates. PiperOrigin-RevId: 446770538 --- demos/transformer/src/main/assets/vertex_shader_copy_es2.glsl | 3 +-- .../transformerdemo/BitmapOverlayFrameProcessor.java | 2 -- .../transformerdemo/PeriodicVignetteFrameProcessor.java | 2 -- .../media3/demo/transformer/MediaPipeFrameProcessor.java | 4 ---- .../main/assets/shaders/vertex_shader_tex_transform_es2.glsl | 4 ++-- .../main/assets/shaders/vertex_shader_tex_transform_es3.glsl | 4 ++-- .../main/assets/shaders/vertex_shader_transformation_es2.glsl | 3 +-- .../exoplayer2/transformer/ExternalCopyFrameProcessor.java | 2 -- .../transformer/MatrixTransformationFrameProcessor.java | 2 -- 9 files changed, 6 insertions(+), 20 deletions(-) diff --git a/demos/transformer/src/main/assets/vertex_shader_copy_es2.glsl b/demos/transformer/src/main/assets/vertex_shader_copy_es2.glsl index b4c1673d25..c603e252ac 100644 --- a/demos/transformer/src/main/assets/vertex_shader_copy_es2.glsl +++ b/demos/transformer/src/main/assets/vertex_shader_copy_es2.glsl @@ -16,9 +16,8 @@ // ES 2 vertex shader that leaves the coordinates unchanged. attribute vec4 aFramePosition; -attribute vec4 aTexSamplingCoord; varying vec2 vTexSamplingCoord; void main() { gl_Position = aFramePosition; - vTexSamplingCoord = aTexSamplingCoord.xy; + vTexSamplingCoord = vec2(aFramePosition.x * 0.5 + 0.5, aFramePosition.y * 0.5 + 0.5); } diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/BitmapOverlayFrameProcessor.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/BitmapOverlayFrameProcessor.java index 93a4e891ce..45392f6f2f 100644 --- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/BitmapOverlayFrameProcessor.java +++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/BitmapOverlayFrameProcessor.java @@ -102,8 +102,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; // Draw the frame on the entire normalized device coordinate space, from -1 to 1, for x and y. glProgram.setBufferAttribute( "aFramePosition", GlUtil.getNormalizedCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); - glProgram.setBufferAttribute( - "aTexSamplingCoord", GlUtil.getTextureCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); glProgram.setSamplerTexIdUniform("uTexSampler0", inputTexId, /* texUnitIndex= */ 0); glProgram.setSamplerTexIdUniform("uTexSampler1", bitmapTexId, /* texUnitIndex= */ 1); glProgram.setFloatUniform("uScaleX", bitmapScaleX); diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/PeriodicVignetteFrameProcessor.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/PeriodicVignetteFrameProcessor.java index 7b7e3860e2..1c07fe6a3b 100644 --- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/PeriodicVignetteFrameProcessor.java +++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/PeriodicVignetteFrameProcessor.java @@ -88,8 +88,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; // Draw the frame on the entire normalized device coordinate space, from -1 to 1, for x and y. glProgram.setBufferAttribute( "aFramePosition", GlUtil.getNormalizedCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); - glProgram.setBufferAttribute( - "aTexSamplingCoord", GlUtil.getTextureCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); } @Override diff --git a/demos/transformer/src/withMediaPipe/java/androidx/media3/demo/transformer/MediaPipeFrameProcessor.java b/demos/transformer/src/withMediaPipe/java/androidx/media3/demo/transformer/MediaPipeFrameProcessor.java index 200e5269ae..649e702ec9 100644 --- a/demos/transformer/src/withMediaPipe/java/androidx/media3/demo/transformer/MediaPipeFrameProcessor.java +++ b/demos/transformer/src/withMediaPipe/java/androidx/media3/demo/transformer/MediaPipeFrameProcessor.java @@ -145,10 +145,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; "aFramePosition", GlUtil.getNormalizedCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); - glProgram.setBufferAttribute( - "aTexSamplingCoord", - GlUtil.getTextureCoordinateBounds(), - GlUtil.RECTANGLE_VERTICES_COUNT); glProgram.bindAttributesAndUniforms(); GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, /* first= */ 0, /* count= */ 4); GlUtil.checkGlError(); diff --git a/library/transformer/src/main/assets/shaders/vertex_shader_tex_transform_es2.glsl b/library/transformer/src/main/assets/shaders/vertex_shader_tex_transform_es2.glsl index f521d2fedb..20f3058ce2 100644 --- a/library/transformer/src/main/assets/shaders/vertex_shader_tex_transform_es2.glsl +++ b/library/transformer/src/main/assets/shaders/vertex_shader_tex_transform_es2.glsl @@ -18,10 +18,10 @@ // locations. attribute vec4 aFramePosition; -attribute vec4 aTexSamplingCoord; uniform mat4 uTexTransform; varying vec2 vTexSamplingCoord; void main() { gl_Position = aFramePosition; - vTexSamplingCoord = (uTexTransform * aTexSamplingCoord).xy; + vec4 texturePosition = vec4(aFramePosition.x * 0.5 + 0.5, aFramePosition.y * 0.5 + 0.5, 0.0, 1.0); + vTexSamplingCoord = (uTexTransform * texturePosition).xy; } diff --git a/library/transformer/src/main/assets/shaders/vertex_shader_tex_transform_es3.glsl b/library/transformer/src/main/assets/shaders/vertex_shader_tex_transform_es3.glsl index 00dd9bc711..f732294c90 100644 --- a/library/transformer/src/main/assets/shaders/vertex_shader_tex_transform_es3.glsl +++ b/library/transformer/src/main/assets/shaders/vertex_shader_tex_transform_es3.glsl @@ -18,10 +18,10 @@ // locations. in vec4 aFramePosition; -in vec4 aTexSamplingCoord; uniform mat4 uTexTransform; out vec2 vTexSamplingCoord; void main() { gl_Position = aFramePosition; - vTexSamplingCoord = (uTexTransform * aTexSamplingCoord).xy; + vec4 texturePosition = vec4(aFramePosition.x * 0.5 + 0.5, aFramePosition.y * 0.5 + 0.5, 0.0, 1.0); + vTexSamplingCoord = (uTexTransform * texturePosition).xy; } diff --git a/library/transformer/src/main/assets/shaders/vertex_shader_transformation_es2.glsl b/library/transformer/src/main/assets/shaders/vertex_shader_transformation_es2.glsl index 5ac512a0cb..2491e3d2a2 100644 --- a/library/transformer/src/main/assets/shaders/vertex_shader_transformation_es2.glsl +++ b/library/transformer/src/main/assets/shaders/vertex_shader_transformation_es2.glsl @@ -17,10 +17,9 @@ // uTransformationMatrix. attribute vec4 aFramePosition; -attribute vec4 aTexSamplingCoord; uniform mat4 uTransformationMatrix; varying vec2 vTexSamplingCoord; void main() { gl_Position = uTransformationMatrix * aFramePosition; - vTexSamplingCoord = aTexSamplingCoord.xy; + vTexSamplingCoord = vec2(aFramePosition.x * 0.5 + 0.5, aFramePosition.y * 0.5 + 0.5); } diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExternalCopyFrameProcessor.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExternalCopyFrameProcessor.java index 4fac60c3d7..edc551f8ba 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExternalCopyFrameProcessor.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExternalCopyFrameProcessor.java @@ -80,8 +80,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; // Draw the frame on the entire normalized device coordinate space, from -1 to 1, for x and y. glProgram.setBufferAttribute( "aFramePosition", GlUtil.getNormalizedCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); - glProgram.setBufferAttribute( - "aTexSamplingCoord", GlUtil.getTextureCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); if (enableExperimentalHdrEditing) { // In HDR editing mode the decoder output is sampled in YUV. glProgram.setFloatsUniform("uColorTransform", MATRIX_YUV_TO_BT2020_COLOR_TRANSFORM); diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MatrixTransformationFrameProcessor.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MatrixTransformationFrameProcessor.java index 47b4aa06ee..ef9f5fb343 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MatrixTransformationFrameProcessor.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MatrixTransformationFrameProcessor.java @@ -87,8 +87,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; // Draw the frame on the entire normalized device coordinate space, from -1 to 1, for x and y. glProgram.setBufferAttribute( "aFramePosition", GlUtil.getNormalizedCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); - glProgram.setBufferAttribute( - "aTexSamplingCoord", GlUtil.getTextureCoordinateBounds(), GlUtil.RECTANGLE_VERTICES_COUNT); } @Override