Stay organized with collections
Save and categorize content based on your preferences.
GLSurfaceView.Renderer
public
static
interface
GLSurfaceView.Renderer
android.opengl.GLSurfaceView.Renderer
|
A generic renderer interface.
The renderer is responsible for making OpenGL calls to render a frame.
GLSurfaceView clients typically create their own classes that implement
this interface, and then call GLSurfaceView.setRenderer
to
register the renderer with the GLSurfaceView.
Developer Guides
For more information about how to use OpenGL, read the
OpenGL developer guide.
Threading
The renderer will be called on a separate thread, so that rendering
performance is decoupled from the UI thread. Clients typically need to
communicate with the renderer from the UI thread, because that's where
input events are received. Clients can communicate using any of the
standard Java techniques for cross-thread communication, or they can
use the
GLSurfaceView.queueEvent(Runnable)
convenience method.
EGL Context Lost
There are situations where the EGL rendering context will be lost. This
typically happens when device wakes up after going to sleep. When
the EGL context is lost, all OpenGL resources (such as textures) that are
associated with that context will be automatically deleted. In order to
keep rendering correctly, a renderer must recreate any lost resources
that it still needs. The
onSurfaceCreated(javax.microedition.khronos.opengles.GL10, javax.microedition.khronos.egl.EGLConfig)
method
is a convenient place to do this.
Summary
Public methods
onDrawFrame
public abstract void onDrawFrame (GL10 gl)
Called to draw the current frame.
This method is responsible for drawing the current frame.
The implementation of this method typically looks like this:
void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
//... other gl calls to render the scene ...
}
Parameters |
gl |
GL10 : the GL interface. Use instanceof to
test if the interface supports GL11 or higher interfaces. |
onSurfaceChanged
public abstract void onSurfaceChanged (GL10 gl,
int width,
int height)
Called when the surface changed size.
Called after the surface is created and whenever
the OpenGL ES surface size changes.
Typically you will set your viewport here. If your camera
is fixed then you could also set your projection matrix here:
void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
// for a fixed camera, set the projection too
float ratio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
}
Parameters |
gl |
GL10 : the GL interface. Use instanceof to
test if the interface supports GL11 or higher interfaces. |
onSurfaceCreated
public abstract void onSurfaceCreated (GL10 gl,
EGLConfig config)
Called when the surface is created or recreated.
Called when the rendering thread
starts and whenever the EGL context is lost. The EGL context will typically
be lost when the Android device awakes after going to sleep.
Since this method is called at the beginning of rendering, as well as
every time the EGL context is lost, this method is a convenient place to put
code to create resources that need to be created when the rendering
starts, and that need to be recreated when the EGL context is lost.
Textures are an example of a resource that you might want to create
here.
Note that when the EGL context is lost, all OpenGL resources associated
with that context will be automatically deleted. You do not need to call
the corresponding "glDelete" methods such as glDeleteTextures to
manually delete these lost resources.
Parameters |
gl |
GL10 : the GL interface. Use instanceof to
test if the interface supports GL11 or higher interfaces. |
config |
EGLConfig : the EGLConfig of the created surface. Can be used
to create matching pbuffers. |
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-02-10 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-02-10 UTC."],[],[],null,["# GLSurfaceView.Renderer\n\nAdded in [API level 3](/guide/topics/manifest/uses-sdk-element#ApiLevels) \n\nGLSurfaceView.Renderer\n======================\n\n*** ** * ** ***\n\n[Kotlin](/reference/kotlin/android/opengl/GLSurfaceView.Renderer \"View this page in Kotlin\") \\|Java\n\n\n`\npublic\nstatic\n\n\ninterface\nGLSurfaceView.Renderer\n`\n\n\n`\n\n\n`\n\n|---------------------------------------|\n| android.opengl.GLSurfaceView.Renderer |\n\n\u003cbr /\u003e\n\n*** ** * ** ***\n\nA generic renderer interface.\n\n\nThe renderer is responsible for making OpenGL calls to render a frame.\n\n\nGLSurfaceView clients typically create their own classes that implement\nthis interface, and then call [GLSurfaceView.setRenderer](/reference/android/opengl/GLSurfaceView#setRenderer(android.opengl.GLSurfaceView.Renderer)) to\nregister the renderer with the GLSurfaceView.\n\n\n### Developer Guides\n\nFor more information about how to use OpenGL, read the\n[OpenGL](/guide/topics/graphics/opengl) developer guide.\n\n### Threading\n\nThe renderer will be called on a separate thread, so that rendering performance is decoupled from the UI thread. Clients typically need to communicate with the renderer from the UI thread, because that's where input events are received. Clients can communicate using any of the standard Java techniques for cross-thread communication, or they can use the [GLSurfaceView.queueEvent(Runnable)](/reference/android/opengl/GLSurfaceView#queueEvent(java.lang.Runnable)) convenience method.\n\n\n### EGL Context Lost\n\nThere are situations where the EGL rendering context will be lost. This typically happens when device wakes up after going to sleep. When the EGL context is lost, all OpenGL resources (such as textures) that are associated with that context will be automatically deleted. In order to keep rendering correctly, a renderer must recreate any lost resources that it still needs. The [onSurfaceCreated(javax.microedition.khronos.opengles.GL10, javax.microedition.khronos.egl.EGLConfig)](/reference/android/opengl/GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,%20javax.microedition.khronos.egl.EGLConfig)) method is a convenient place to do this.\n\n\u003cbr /\u003e\n\n**See also:**\n\n- [GLSurfaceView.setRenderer(Renderer)](/reference/android/opengl/GLSurfaceView#setRenderer(android.opengl.GLSurfaceView.Renderer))\n\nSummary\n-------\n\n| ### Public methods ||\n|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ` abstract void` | ` `[onDrawFrame](/reference/android/opengl/GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10))`(`[GL10](/reference/javax/microedition/khronos/opengles/GL10)` gl) ` Called to draw the current frame. |\n| ` abstract void` | ` `[onSurfaceChanged](/reference/android/opengl/GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,%20int,%20int))`(`[GL10](/reference/javax/microedition/khronos/opengles/GL10)` gl, int width, int height) ` Called when the surface changed size. |\n| ` abstract void` | ` `[onSurfaceCreated](/reference/android/opengl/GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,%20javax.microedition.khronos.egl.EGLConfig))`(`[GL10](/reference/javax/microedition/khronos/opengles/GL10)` gl, `[EGLConfig](/reference/javax/microedition/khronos/egl/EGLConfig)` config) ` Called when the surface is created or recreated. |\n\nPublic methods\n--------------\n\n### onDrawFrame\n\nAdded in [API level 3](/guide/topics/manifest/uses-sdk-element#ApiLevels) \n\n```\npublic abstract void onDrawFrame (GL10 gl)\n```\n\nCalled to draw the current frame.\n\n\nThis method is responsible for drawing the current frame.\n\n\nThe implementation of this method typically looks like this: \n\n```scdoc\n void onDrawFrame(GL10 gl) {\n gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);\n //... other gl calls to render the scene ...\n }\n \n```\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Parameters ||\n|------|----------------------------------------------------------------------------------------------------------------|\n| `gl` | `GL10`: the GL interface. Use `instanceof` to test if the interface supports GL11 or higher interfaces. \u003cbr /\u003e |\n\n### onSurfaceChanged\n\nAdded in [API level 3](/guide/topics/manifest/uses-sdk-element#ApiLevels) \n\n```\npublic abstract void onSurfaceChanged (GL10 gl, \n int width, \n int height)\n```\n\nCalled when the surface changed size.\n\n\nCalled after the surface is created and whenever\nthe OpenGL ES surface size changes.\n\n\nTypically you will set your viewport here. If your camera\nis fixed then you could also set your projection matrix here: \n\n```povray\n void onSurfaceChanged(GL10 gl, int width, int height) {\n gl.glViewport(0, 0, width, height);\n // for a fixed camera, set the projection too\n float ratio = (float) width / height;\n gl.glMatrixMode(GL10.GL_PROJECTION);\n gl.glLoadIdentity();\n gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);\n }\n \n```\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Parameters ||\n|------|----------------------------------------------------------------------------------------------------------------|\n| `gl` | `GL10`: the GL interface. Use `instanceof` to test if the interface supports GL11 or higher interfaces. \u003cbr /\u003e |\n\n### onSurfaceCreated\n\nAdded in [API level 3](/guide/topics/manifest/uses-sdk-element#ApiLevels) \n\n```\npublic abstract void onSurfaceCreated (GL10 gl, \n EGLConfig config)\n```\n\nCalled when the surface is created or recreated.\n\n\nCalled when the rendering thread\nstarts and whenever the EGL context is lost. The EGL context will typically\nbe lost when the Android device awakes after going to sleep.\n\n\nSince this method is called at the beginning of rendering, as well as\nevery time the EGL context is lost, this method is a convenient place to put\ncode to create resources that need to be created when the rendering\nstarts, and that need to be recreated when the EGL context is lost.\nTextures are an example of a resource that you might want to create\nhere.\n\n\nNote that when the EGL context is lost, all OpenGL resources associated\nwith that context will be automatically deleted. You do not need to call\nthe corresponding \"glDelete\" methods such as glDeleteTextures to\nmanually delete these lost resources.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Parameters ||\n|----------|----------------------------------------------------------------------------------------------------------------|\n| `gl` | `GL10`: the GL interface. Use `instanceof` to test if the interface supports GL11 or higher interfaces. \u003cbr /\u003e |\n| `config` | `EGLConfig`: the EGLConfig of the created surface. Can be used to create matching pbuffers. \u003cbr /\u003e |"]]