Class GlUtil
- java.lang.Object
-
- com.google.android.exoplayer2.util.GlUtil
-
public final class GlUtil extends Object
OpenGL ES utilities.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classGlUtil.GlExceptionThrown when an OpenGL error occurs andglAssertionsEnabledistrue.
-
Field Summary
Fields Modifier and Type Field Description static booleanglAssertionsEnabledWhether to throw aGlUtil.GlExceptionin case of an OpenGL error.static intHOMOGENEOUS_COORDINATE_VECTOR_SIZENumber of elements in a 3d homogeneous coordinate vector describing a vertex.static floatLENGTH_NDCLength of the normalized device coordinate (NDC) space, which spans from -1 to 1.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static voidassertValidTextureSize(int width, int height)Asserts the texture size is valid.static voidbindTexture(int textureTarget, int texId)Binds the texture of the given type with default configuration of GL_LINEAR filtering and GL_CLAMP_TO_EDGE wrapping.static voidcheckGlError()If there is an OpenGl error, logs the error and ifglAssertionsEnabledis true throws aGlUtil.GlException.static FloatBuffercreateBuffer(float[] data)Allocates a FloatBuffer with the given data.static FloatBuffercreateBuffer(int capacity)Allocates a FloatBuffer.static EGLContextcreateEglContext(EGLDisplay eglDisplay)Returns a newEGLContextfor the specifiedEGLDisplay.static EGLContextcreateEglContextEs3Rgba1010102(EGLDisplay eglDisplay)Returns a newEGLContextfor the specifiedEGLDisplay, requesting ES 3 and an RGBA 1010102 config.static EGLDisplaycreateEglDisplay()Returns an initialized defaultEGLDisplay.static intcreateExternalTexture()Creates a GL_TEXTURE_EXTERNAL_OES with default configuration of GL_LINEAR filtering and GL_CLAMP_TO_EDGE wrapping.static intcreateFboForTexture(int texId)Returns a new framebuffer for the texture.static EGLSurfacecreatePlaceholderEglSurface(EGLDisplay eglDisplay)Returns a placeholderEGLSurfaceto use when reading and writing to the surface is not required.static intcreateTexture(int width, int height)Returns the texture identifier for a newly-allocated texture with the specified dimensions.static float[]createVertexBuffer(List<float[]> vertexList)Flattens the list of 4 element NDC coordinate vectors into a buffer.static voiddeleteTexture(int textureId)Deletes a GL texture.static voiddestroyEglContext(EGLDisplay eglDisplay, EGLContext eglContext)static voidfocusEglSurface(EGLDisplay eglDisplay, EGLContext eglContext, EGLSurface eglSurface, int width, int height)Makes the specifiedeglSurfacethe render target, using a viewport ofwidthbyheightpixels.static voidfocusFramebuffer(EGLDisplay eglDisplay, EGLContext eglContext, EGLSurface eglSurface, int framebuffer, int width, int height)Makes the specifiedframebufferthe render target, using a viewport ofwidthbyheightpixels.static voidfocusPlaceholderEglSurface(EGLContext eglContext, EGLDisplay eglDisplay)Creates and focuses a newEGLSurfacewrapping a 1x1 pixel buffer.static voidfocusPlaceholderEglSurfaceBt2020Pq(EGLContext eglContext, EGLDisplay eglDisplay)Creates and focuses a newEGLSurfacewrapping a 1x1 pixel buffer, for HDR rendering with Rec.static EGLSurfacegetEglSurface(EGLDisplay eglDisplay, Object surface)Returns a newEGLSurfacewrapping the specifiedsurface.static EGLSurfacegetEglSurfaceBt2020Pq(EGLDisplay eglDisplay, Object surface)Returns a newEGLSurfacewrapping the specifiedsurface, for HDR rendering with Rec.static float[]getNormalizedCoordinateBounds()Bounds of normalized device coordinates, commonly used for defining viewport boundaries.static float[]getTextureCoordinateBounds()Typical bounds used for sampling from textures.static booleanisProtectedContentExtensionSupported(Context context)Returns whether creating a GL context with "EGL_EXT_protected_content" is possible.static booleanisSurfacelessContextExtensionSupported()Returns whether the "EGL_KHR_surfaceless_context" extension is supported.static StringloadAsset(Context context, String assetPath)Loads a file from the assets folder.
-
-
-
Field Detail
-
glAssertionsEnabled
public static boolean glAssertionsEnabled
Whether to throw aGlUtil.GlExceptionin case of an OpenGL error.
-
HOMOGENEOUS_COORDINATE_VECTOR_SIZE
public static final int HOMOGENEOUS_COORDINATE_VECTOR_SIZE
Number of elements in a 3d homogeneous coordinate vector describing a vertex.- See Also:
- Constant Field Values
-
LENGTH_NDC
public static final float LENGTH_NDC
Length of the normalized device coordinate (NDC) space, which spans from -1 to 1.- See Also:
- Constant Field Values
-
-
Method Detail
-
getNormalizedCoordinateBounds
public static float[] getNormalizedCoordinateBounds()
Bounds of normalized device coordinates, commonly used for defining viewport boundaries.
-
getTextureCoordinateBounds
public static float[] getTextureCoordinateBounds()
Typical bounds used for sampling from textures.
-
createVertexBuffer
public static float[] createVertexBuffer(List<float[]> vertexList)
Flattens the list of 4 element NDC coordinate vectors into a buffer.
-
isProtectedContentExtensionSupported
public static boolean isProtectedContentExtensionSupported(Context context)
Returns whether creating a GL context with "EGL_EXT_protected_content" is possible.If
true, the device supports a protected output path for DRM content when using GL.
-
isSurfacelessContextExtensionSupported
public static boolean isSurfacelessContextExtensionSupported()
Returns whether the "EGL_KHR_surfaceless_context" extension is supported.This extension allows passing
EGL14.EGL_NO_SURFACEfor both the write and read surfaces in a call toEGL14.eglMakeCurrent(EGLDisplay, EGLSurface, EGLSurface, EGLContext).
-
createEglDisplay
@RequiresApi(17) public static EGLDisplay createEglDisplay()
Returns an initialized defaultEGLDisplay.
-
createEglContext
@RequiresApi(17) public static EGLContext createEglContext(EGLDisplay eglDisplay)
Returns a newEGLContextfor the specifiedEGLDisplay.
-
createEglContextEs3Rgba1010102
@RequiresApi(17) public static EGLContext createEglContextEs3Rgba1010102(EGLDisplay eglDisplay)
Returns a newEGLContextfor the specifiedEGLDisplay, requesting ES 3 and an RGBA 1010102 config.
-
getEglSurface
@RequiresApi(17) public static EGLSurface getEglSurface(EGLDisplay eglDisplay, Object surface)
Returns a newEGLSurfacewrapping the specifiedsurface.- Parameters:
eglDisplay- TheEGLDisplayto attach the surface to.surface- The surface to wrap; must be a surface, surface texture or surface holder.
-
getEglSurfaceBt2020Pq
@RequiresApi(17) public static EGLSurface getEglSurfaceBt2020Pq(EGLDisplay eglDisplay, Object surface)
Returns a newEGLSurfacewrapping the specifiedsurface, for HDR rendering with Rec. 2020 color primaries and using the PQ transfer function.- Parameters:
eglDisplay- TheEGLDisplayto attach the surface to.surface- The surface to wrap; must be a surface, surface texture or surface holder.
-
createPlaceholderEglSurface
@RequiresApi(17) public static EGLSurface createPlaceholderEglSurface(EGLDisplay eglDisplay)
Returns a placeholderEGLSurfaceto use when reading and writing to the surface is not required.- Parameters:
eglDisplay- TheEGLDisplayto attach the surface to.- Returns:
EGL14.EGL_NO_SURFACEif supported and a 1x1 pixel buffer surface otherwise.
-
focusPlaceholderEglSurface
@RequiresApi(17) public static void focusPlaceholderEglSurface(EGLContext eglContext, EGLDisplay eglDisplay)
Creates and focuses a newEGLSurfacewrapping a 1x1 pixel buffer.- Parameters:
eglContext- TheEGLContextto make current.eglDisplay- TheEGLDisplayto attach the surface to.
-
focusPlaceholderEglSurfaceBt2020Pq
@RequiresApi(17) public static void focusPlaceholderEglSurfaceBt2020Pq(EGLContext eglContext, EGLDisplay eglDisplay)
Creates and focuses a newEGLSurfacewrapping a 1x1 pixel buffer, for HDR rendering with Rec. 2020 color primaries and using the PQ transfer function.- Parameters:
eglContext- TheEGLContextto make current.eglDisplay- TheEGLDisplayto attach the surface to.
-
checkGlError
public static void checkGlError()
If there is an OpenGl error, logs the error and ifglAssertionsEnabledis true throws aGlUtil.GlException.
-
assertValidTextureSize
public static void assertValidTextureSize(int width, int height)Asserts the texture size is valid.- Parameters:
width- The width for a texture.height- The height for a texture.- Throws:
GlUtil.GlException- If the texture width or height is invalid.
-
focusEglSurface
@RequiresApi(17) public static void focusEglSurface(EGLDisplay eglDisplay, EGLContext eglContext, EGLSurface eglSurface, int width, int height)
Makes the specifiedeglSurfacethe render target, using a viewport ofwidthbyheightpixels.
-
focusFramebuffer
@RequiresApi(17) public static void focusFramebuffer(EGLDisplay eglDisplay, EGLContext eglContext, EGLSurface eglSurface, int framebuffer, int width, int height)
Makes the specifiedframebufferthe render target, using a viewport ofwidthbyheightpixels.
-
deleteTexture
public static void deleteTexture(int textureId)
Deletes a GL texture.- Parameters:
textureId- The ID of the texture to delete.
-
destroyEglContext
@RequiresApi(17) public static void destroyEglContext(@Nullable EGLDisplay eglDisplay, @Nullable EGLContext eglContext)
-
createBuffer
public static FloatBuffer createBuffer(float[] data)
Allocates a FloatBuffer with the given data.- Parameters:
data- Used to initialize the new buffer.
-
createBuffer
public static FloatBuffer createBuffer(int capacity)
Allocates a FloatBuffer.- Parameters:
capacity- The new buffer's capacity, in floats.
-
loadAsset
public static String loadAsset(Context context, String assetPath) throws IOException
Loads a file from the assets folder.- Parameters:
context- TheContext.assetPath- The path to the file to load, from the assets folder.- Returns:
- The content of the file to load.
- Throws:
IOException- If the file couldn't be read.
-
createExternalTexture
public static int createExternalTexture()
Creates a GL_TEXTURE_EXTERNAL_OES with default configuration of GL_LINEAR filtering and GL_CLAMP_TO_EDGE wrapping.
-
createTexture
public static int createTexture(int width, int height)Returns the texture identifier for a newly-allocated texture with the specified dimensions.- Parameters:
width- of the new texture in pixelsheight- of the new texture in pixels
-
bindTexture
public static void bindTexture(int textureTarget, int texId)Binds the texture of the given type with default configuration of GL_LINEAR filtering and GL_CLAMP_TO_EDGE wrapping.- Parameters:
texId- The texture identifier.textureTarget- The target to which the texture is bound, e.g.GLES20.GL_TEXTURE_2Dfor a two-dimensional texture orGLES11Ext.GL_TEXTURE_EXTERNAL_OESfor an external texture.
-
createFboForTexture
public static int createFboForTexture(int texId)
Returns a new framebuffer for the texture.- Parameters:
texId- The identifier of the texture to attach to the framebuffer.
-
-