OpenGL ES EGL Spec&APIs

Jungsoo Nam
Jungsoo NamAndroid, NDK and OpenGL ES Senior Software Engineer
OpenGL ES EGL Spec & APIs
SK planet/Mobile Platform Dept.
Jungsoo Nam
namjungsoo@gmail.com
OpenGL ARB and Khronos Group
• OpenGL ES
– OpenGL ES is a lightweight graphics API which is designed for Embedded
System from OpenGL which is designed for Work Station.
– OpenGL is maintained by OpenGL ARB(Architecture Review Board), OpenGL
ES is maintained Khronos Group.
OpenGL Driver and Implementation
• OpenGL Terminology(Link)
Name Description
ICD Installable Client Driver, contains the entire rendering pipeline of OpenGL. This solution, while providing the highest
possible performance, was also daunting to IHVs. The Microsoft ICD kit required considerable effort to turn into a driver.
SGI's DDK is also an ICD, but comes with a sample driver (for Virge/GX) as an example.
IHV Independent Hardware Vendor, the manufacturers of 3D accelerators.
MCD Mini Client Driver, designed as an abstraction of the rasterization layer of the rendering pipeline. The MCD promised to
make developing OpenGL drivers for Windows easy for IHVs. Released for Windows/NT, it was promised, then never
delivered for Win95. The MCD also gave up considerable performance due to it's design.
PFD Pixel Format Descriptor, describes the pixel depth and buffers available.
OpenGL Utility Libraries
Prefix Name Functions
gl OpenGL API glClear,glDrawArrays,…
glu OpenGL Utility Library gluPerspective,gluLookAt
glut OpenGL Utility Toolkit glutInitDisplayMode,glutSwapBuffers
aux OpenGL Auxiliary Library auxDIBImageLoad,auxInitWindow
glew OpenGL Extension Wrangler Library glewInit, glewIsSupported
wgl/agl/cgl/glx/egl Native Interface for OpenGL wglCreateContext,wglMakeCurrent,eglCr
eateContext,eglMakeCurrent
GLU
• OpenGL Utility Library
– Matrix support
• gluPerspective, gluOrtho, gluLookAt
– Modeling support(GLUquadric)
• gluDisk, gluPartialDisk, gluSphere, gluCylinder, gluCone
GLAUX
• OpenGL Auxiliary Library
– which was a part of the GLUT library and is now obsolete. We need to rewrite
the program using GLUT.
GLUT
• The OpenGL Utility Toolkit
– GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system
independent toolkit for writing OpenGL programs. It implements a simple windowing application
programming interface (API) for OpenGL. GLUT makes it considerably easier to learn about and
explore OpenGL programming. GLUT provides a portable API so you can write a single OpenGL
program that works across all PC and workstation OS platforms.
• Usage
– Window system support
– Modeling support
• glutSolid/WireCube
• glutSolid/WireSphere
• glutSolid/WireTorus
• glutSolid/WireTeapot
• glutSolid/WireDodecahedron(12면체)
GLEW
• The OpenGL Extension Wrangler Library
– http://glew.sourceforge.net/basic.html
• Usage
– Initializing
– Checking extensions
• How to get WGL extension
WGL
• OpenGL Native Interface for Windows
– WGL or Wiggle is an API between OpenGL and the windowing system interface of Microsoft
Windows.
• http://nehe.gamedev.net/tutorial/creating_an_opengl_window_(win32)/13001/
ChoosePixelFormat()
SetPixelFormat()
wglCreateContext()
wglMakeCurrent()
EGL (Native Platform Graphics
Interface) Overview
• Native Platform Interface
– EGL™ is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the
underlying native platform window system. It handles graphics context management, surface/buffer
binding, and rendering synchronization and enables high-performance, accelerated, mixed-mode 2D
and 3D rendering using other Khronos APIs. EGL also provides interop capability between Khronos to
enable efficient transfer of data between APIs – for example between a video subsystem running
OpenMAX AL and a GPU running OpenGL ES.
• Portable Layer for Graphics Resource Management
– EGL can be implemented on multiple operating systems (such as Android and Linux) and native
window systems (such as X and Microsoft Windows). Implementations may also choose to allow
rendering into specific types of EGL surfaces via other supported native rendering APIs, such as Xlib
or GDI. EGL provides:
• Mechanisms for creating rendering surfaces (windows, pbuffers, pixmaps) onto which client APIs can draw and
share
• Methods to create and manage graphics contexts for client APIs
• Ways to synchronize drawing by client APIs as well as native platform rendering APIs.
EGL Features
• Specifically EGL is a wrapper over the following subsystems;
– WGL – Windows GL – the Windows-OpenGL interface (pronounced wiggle)
– CGL – the Mac OS X-OpenGL interface (the AGL layer sits on top of CGL)
– GLX – the equivalent X11-OpenGL interface
• EGL not only provides a convenient binding between the operating system
resources and the OpenGL subsystem, but also provides the hooks to the
operating system to inform it when you require something, such as;
1. Iterating, selecting, and initializing an OpenGL context
2. This can be the OGL API level, software vs. hardware rendering, etc.
3. Requesting a surface or memory resource.
4. The OS services requests for system or video memory
5. Iterating through the available surface formats (to pick an optimal one)
6. You can find out properties of the video card(s) from the OS – the surfaces presented will
resides on the video card(s) or software renderer interface.
7. Selecting the desired surface format
8. Informing the OS you are done rendering and it’s time to show the scene.
9. Informing the OS to use a different OpenGL context
10. Informing the OS you are done with the resources.
EGLWindow, EGLDisplay, EGLSurface
• EGLDisplay
– Abstract display on which graphics are drawn
– Single physical screen
– Initialize by querying a default display
– All EGL objects are associated with an EGLDisplay
• EGLContext(Rendering Contexts)
– EGLContext is a state machine defined by a client API
– EGLContext is associated with EGLSurfaces
• EGLSurface(Drawing Surfaces)
– Types: windows, pbuffers, pixmaps
• Windows, pixmaps: tied to native window system
– Created with EGLConfig
• Describes depth of color buffer component and types, quantities, and sizes of the ancillary buffers(depth,
multisample, stencil buffers)
– Ancillary buffers are associated with an EGLSurface
• Not EGLContext
EGL Operation
• Interaction with native rendering
– Native rendering will always be supported by pixmap surfaces
• Pixmap surfaces have restricted capabilities and performance relative to window and pbuffer surfaces
– Native rendering will not be supported by pbuffer surfaces, since the color buffers of pbuffers are allocated internally by EGL and
are not accessible through any other means.
– Native rendering may be supported by window surfaces, but only if the native window system has a compatible rendering model
allowing it to share the back color buffer, or if single buffered rendering to the window surface is being done.
– When both native rendering APIs and client APIs are drawing into the same underlying surface, no guarantees are placed on the
relative order of completion of operations in the different rendering streams other than those provided by the synchronization
primitives discussed in section 3.8
• Shared State
– OpenGL and OpenGL ES Texture Objects
• OpenGL and OpenGL ES makes no attempt to synchronize access to texture objects. If a texture object is bound to more than
one context, then it is up to the programmer to ensure that the contents of the object are not being changed via one context
while another context is using the texture object for rendering. The results of changing a texture object while another context
is using it are undefined.
– OpenGL and OpenGL ES Buffer Objects
• hen it is up to the programmer to ensure that the contents of the object are not being changed via one context while another
context is using the buffer object for rendering. The results of changing a buffer object while another context is using it are
undefined.
• Multiple Threads
– EGL guarantees sequentially within a command stream for each of its client APIs , but not between these APIs and native APIs
which may also be rendering into the same surface.
– Client API commands are not guaranteed to be atomic.
• Synchronization is in the hands of the client.
• It can be maintained at moderate cost with the judicious use of commands such as glFinish, vgFinish, eglWaitClient, and
eglWaitNative, as well as (if they exist) synchronization commands present in native rendering APIs.
EGL Operation
• Power Management
– Power management events can occur synchronously while an
application is running. When the system returns from the power
management event the EGLContext will be invalidated, and all
subsequent client API calls will have no effect (as if no context is
bound).
– Following a power management event, calls to eglSwapBuffers,
eglCopyBuffers, or eglMakeCurrent will indicate failure by returning
EGL_FALSE. The error EGL_CONTEXT_LOST will be returned if a power
management event has occurred.
• On detection of this error, the application must destroy all contexts (by calling
eglDestroyContext for each context). To continue rendering the application must
recreate any contexts it requires, and subsequently restore any client API state and
objects it wishes to use.
• Any EGLSurfaces that the application has created need not be destroyed following a
power management event, but their contents will be invalid.
EGL Basic Usage
• The basic usage of EGL and similar API are the following;
1. (Android) Obtain the EGL interface.
• So you can make EGL calls
2. Obtain a display that’s associated with an app or physical display
3. Initialize the display
4. Configure the display
5. Create surfaces
• Front, back, offscreen buffers, etc.
6. Create a context associated with the display
• This holds the “state” for the OpenGL calls
7. Make the context “current”
• This selects the active state
8. Render with OpenGL (OpenGL not EGL calls, the OpenGL state is held by EGL context)
9. Flush or swap the buffers so EGL tells the OS to display the rendered scene. Repeat
rendering till done.
10. Make the context “not current”
11. Clean up the EGL resources
OpenGL Framebuffer(Ancillary buffer)
• Framebuffer(Ancillary buffer)
– A Framebuffer is a collection of buffers that can be used as
the destination for rendering.
Name Description
Color Buffer Double buffering, stereo buffering
glDrawBuffer,glReadBuffer,glClearColor
Depth Buffer Shadow map, internal rendering
glDepthFunc,glClearDepth
Stencil Buffer Shadow volume, color masking, reflection
glStencilFunc,glStencilOp,glClearStencil
Accum Buffer Motion blur, anti-aliasing
glAccum,glClearAccum
Functions Parameters
glClear GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT,GL_STENCIL_BUFFER_BIT,GL_ACC
UM_BUFFER_BIT
glEnable GL_DEPTH_TEST, GL_STENCIL_TEST
API Usage (1/2)
API Usage (2/2)
Initializing
Funtion Description
EGLDisplay eglGetDisplay(EGLNativeDisplayType
display_id);
EGL_DEFAULT_DISPLAY
EGLBoolean eglInitialize(EGLDisplay dpy, EGLint
*major, EGLint *minor);
the values of *major and *minor would be 1 and 2, respectively).
major and minor are not updated if they are specified as NULL.
EGLBoolean eglTerminate(EGLDisplay dpy);
const char *eglQueryString(EGLDisplay dpy, EGLint
name);
EGL_CLIENT_APIS, EGL_EXTENSIONS, EGL_VENDOR, or EGL_
VERSION.
Configuration
Funtion Description
EGLBoolean eglGetConfigs(EGLDisplay dpy,
EGLConfig *configs, EGLint config_size,
EGLint *num_config);
Get configs
EGLBoolean eglChooseConfig(EGLDisplay dpy,
const
EGLint *attrib_list, EGLConfig *configs,
EGLint config_size, EGLint *num_config);
Choose configs by attrib_list
EGLBoolean eglGetConfigAttrib(EGLDisplay dpy,
EGLConfig config, EGLint attribute, EGLint
*value);
Get config attribs
Surface
Funtion Description
EGLSurface eglCreateWindowSurface(EGLDisplay dpy,
EGLConfig config, EGLNativeWindowType win,
const EGLint *attrib_list);
Create surface for window rendering
EGLSurface eglCreatePbufferSurface(EGLDisplay dpy,
EGLConfig config, const EGLint
*attrib_list);
Create surface for offline rendering
EGLSurface eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,
EGLConfig config, const EGLint *attrib_list);
Create surface for offline rendering from
client buffer
EGLSurface eglCreatePixmapSurface(EGLDisplay dpy,
EGLConfig config, EGLNativePixmapType
pixmap, const EGLint *attrib_list);
Create surface for pixmap rendering
EGLBoolean eglDestroySurface(EGLDisplay dpy,
EGLSurface surface);
Destroy a surface
EGLBoolean eglSurfaceAttrib(EGLDisplay dpy,
EGLSurface surface, EGLint attribute,
EGLint value);
Get surface attributes
EGLBoolean eglQuerySurface(EGLDisplay dpy,
EGLSurface surface, EGLint attribute,
EGLint *value);
Get surface attributes
Rendering to Textures
Funtion Description
EGLBoolean eglBindTexImage(EGLDisplay dpy,
EGLSurface surface, EGLint buffer);
Bind OpenGL ES Texture
EGLBoolean eglReleaseTexImage(EGLDisplay dpy,
EGLSurface surface, EGLint buffer);
Release OpenGL ES Texture
Context
Funtion Description
EGLBoolean eglBindAPI(EGLenum api); EGL_OPENGL_API,
EGL_OPENGL_ES_API, or EGL_OPENVG_API.
EGLenum eglQueryAPI(void); The value returned will be one of the valid api parameters to
eglBindAPI, or
EGL_NONE.
EGLContext eglCreateContext(EGLDisplay dpy,
EGLConfig config, EGLContext share_context,
const EGLint *attrib_list);
Create a context
EGLBoolean eglDestroyContext(EGLDisplay dpy,
EGLContext ctx);
Destroy a context
EGLBoolean eglMakeCurrent(EGLDisplay dpy,
EGLSurface draw, EGLSurface read,
EGLContext ctx);
Set context to current context
EGLContext eglGetCurrentContext(void); Get current context
EGLSurface eglGetCurrentSurface(EGLint readdraw); Get current surface
EGLDisplay eglGetCurrentDisplay(void); Get current display
EGLBoolean eglQueryContext(EGLDisplay dpy,
EGLContext ctx, EGLint attribute, EGLint
*value);
Return attribute list
Syncronization
Funtion Description
EGLBoolean eglWaitClient(void); The same result can be achieved using client API -specific calls
such as glFinish
or vgFinish.
EGLBoolean eglWaitGL(void); EGLenum api = eglQueryAPI();
eglBindAPI(EGL_OPENGL_ES_API);
eglWaitClient();
eglBindAPI(api);
Posting the color buffer
Funtion Description
EGLBoolean eglSwapBuffers(EGLDisplay dpy,
EGLSurface surface);
Posting to a Window
When native window resizing, called automatically
EGLBoolean eglCopyBuffers(EGLDisplay dpy,
EGLSurface surface, EGLNativePixmapType
target);
Copying to a Native Pixmap
EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint
interval);
Control swap buffer interval
EGL Extension
Funtion Description
void (*eglGetProcAddress(const char *procname))(void); eglQueryString(dpy, EGL_EXTENSIONS)
GLSurfaceView
• Features
– Inherited from SurfaceView
– EGL encapsulation
• Functions
– setRenderer()
– setEGLConfigChooser()
• Default egl config chooser included
– setRenderMode()
• RENDERMODE_WHEN_DIRTY
• requestRender()
– setDebugFlags()
• DEBUG_CHECK_GL_ERROR
• DEBUG_LOG_GL_CALLS
GLSurfaceView.Renderer
• Functions
– onSurfaceCreate()
• Create window surface
– onSurfaceChanged()
• Surface size changed
– onDrawFrame()
• Automatically eglSwapBuffers when non-dirty rendering
PBuffer example
Thank you
• Q & A
1 de 30

Recomendados

Understaing Android EGL por
Understaing Android EGLUnderstaing Android EGL
Understaing Android EGLSuhan Lee
10.1K visualizações50 slides
Design and Concepts of Android Graphics por
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android GraphicsNational Cheng Kung University
62.7K visualizações58 slides
Project meeting: Android Graphics Architecture Overview por
Project meeting: Android Graphics Architecture OverviewProject meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewYu-Hsin Hung
2.3K visualizações18 slides
EGL 1.4 Reference Card por
EGL 1.4 Reference CardEGL 1.4 Reference Card
EGL 1.4 Reference CardThe Khronos Group Inc.
11.6K visualizações2 slides
GFX Part 7 - Introduction to Rendering Targets in OpenGL ES por
GFX Part 7 - Introduction to Rendering Targets in OpenGL ESGFX Part 7 - Introduction to Rendering Targets in OpenGL ES
GFX Part 7 - Introduction to Rendering Targets in OpenGL ESPrabindh Sundareson
2.6K visualizações24 slides
BKK16-315 Graphics Stack Update por
BKK16-315 Graphics Stack UpdateBKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateLinaro
2.8K visualizações12 slides

Mais conteúdo relacionado

Mais procurados

Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver por
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan DriverTizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan DriverRyo Jin
1.7K visualizações34 slides
Android graphic system (SurfaceFlinger) : Design Pattern's perspective por
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveBin Chen
94.4K visualizações53 slides
OpenGL SC 2.0 Quick Reference por
OpenGL SC 2.0 Quick ReferenceOpenGL SC 2.0 Quick Reference
OpenGL SC 2.0 Quick ReferenceThe Khronos Group Inc.
3.7K visualizações4 slides
Using and Customizing the Android Framework / part 4 of Embedded Android Work... por
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Opersys inc.
10K visualizações61 slides
Embedded Linux from Scratch to Yocto por
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoSherif Mousa
5.6K visualizações20 slides
Low Level View of Android System Architecture por
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System ArchitectureNational Cheng Kung University
12.2K visualizações102 slides

Mais procurados(20)

Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver por Ryo Jin
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan DriverTizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver
Ryo Jin1.7K visualizações
Android graphic system (SurfaceFlinger) : Design Pattern's perspective por Bin Chen
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Bin Chen94.4K visualizações
OpenGL SC 2.0 Quick Reference por The Khronos Group Inc.
OpenGL SC 2.0 Quick ReferenceOpenGL SC 2.0 Quick Reference
OpenGL SC 2.0 Quick Reference
The Khronos Group Inc.3.7K visualizações
Using and Customizing the Android Framework / part 4 of Embedded Android Work... por Opersys inc.
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Opersys inc.10K visualizações
Embedded Linux from Scratch to Yocto por Sherif Mousa
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to Yocto
Sherif Mousa5.6K visualizações
Docker for .NET Developers por Taswar Bhatti
Docker for .NET DevelopersDocker for .NET Developers
Docker for .NET Developers
Taswar Bhatti1.1K visualizações
A split screen-viable UI event system - Unite Copenhagen 2019 por Unity Technologies
A split screen-viable UI event system - Unite Copenhagen 2019A split screen-viable UI event system - Unite Copenhagen 2019
A split screen-viable UI event system - Unite Copenhagen 2019
Unity Technologies1.6K visualizações
Booting Android: bootloaders, fastboot and boot images por Chris Simmonds
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot images
Chris Simmonds120.9K visualizações
How to write a Dockerfile por Knoldus Inc.
How to write a DockerfileHow to write a Dockerfile
How to write a Dockerfile
Knoldus Inc.307 visualizações
Intro to unreal with framework and vr por Luis Cataldi
Intro to unreal with framework and vrIntro to unreal with framework and vr
Intro to unreal with framework and vr
Luis Cataldi4.6K visualizações
Exploring the power of Gradle in android studio - Basics & Beyond por Kaushal Dhruw
Exploring the power of Gradle in android studio - Basics & BeyondExploring the power of Gradle in android studio - Basics & Beyond
Exploring the power of Gradle in android studio - Basics & Beyond
Kaushal Dhruw1.4K visualizações
AGDK tutorial step by step por Jungsoo Nam
AGDK tutorial step by stepAGDK tutorial step by step
AGDK tutorial step by step
Jungsoo Nam907 visualizações
OpenGLES - Graphics Programming in Android por Arvind Devaraj
OpenGLES - Graphics Programming in Android OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android
Arvind Devaraj8.3K visualizações
Android internals 07 - Android graphics (rev_1.1) por Egor Elizarov
Android internals 07 - Android graphics (rev_1.1)Android internals 07 - Android graphics (rev_1.1)
Android internals 07 - Android graphics (rev_1.1)
Egor Elizarov11K visualizações
Kotlin Basics & Introduction to Jetpack Compose.pptx por takshilkunadia
Kotlin Basics & Introduction to Jetpack Compose.pptxKotlin Basics & Introduction to Jetpack Compose.pptx
Kotlin Basics & Introduction to Jetpack Compose.pptx
takshilkunadia222 visualizações
Introduction of openGL por Gary Yeh
Introduction  of openGLIntroduction  of openGL
Introduction of openGL
Gary Yeh1.9K visualizações
Skia & Freetype - Android 2D Graphics Essentials por Kyungmin Lee
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics Essentials
Kyungmin Lee12.8K visualizações

Similar a OpenGL ES EGL Spec&APIs

Seminar presentation on OpenGL por
Seminar presentation on OpenGLSeminar presentation on OpenGL
Seminar presentation on OpenGLMegha V
373 visualizações23 slides
Advanced Graphics Workshop - GFX2011 por
Advanced Graphics Workshop - GFX2011Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011Prabindh Sundareson
2.4K visualizações80 slides
18csl67 vtu lab manual por
18csl67 vtu lab manual18csl67 vtu lab manual
18csl67 vtu lab manualNatsuDragoneel5
1.8K visualizações100 slides
Opengl basics por
Opengl basicsOpengl basics
Opengl basicspushpa latha
2.3K visualizações46 slides
13th kandroid OpenGL and EGL por
13th kandroid OpenGL and EGL13th kandroid OpenGL and EGL
13th kandroid OpenGL and EGLJungsoo Nam
3.4K visualizações41 slides
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System por
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering SystemOpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering Systemoasiskim
3K visualizações22 slides

Similar a OpenGL ES EGL Spec&APIs(20)

Seminar presentation on OpenGL por Megha V
Seminar presentation on OpenGLSeminar presentation on OpenGL
Seminar presentation on OpenGL
Megha V373 visualizações
Advanced Graphics Workshop - GFX2011 por Prabindh Sundareson
Advanced Graphics Workshop - GFX2011Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011
Prabindh Sundareson2.4K visualizações
18csl67 vtu lab manual por NatsuDragoneel5
18csl67 vtu lab manual18csl67 vtu lab manual
18csl67 vtu lab manual
NatsuDragoneel51.8K visualizações
Opengl basics por pushpa latha
Opengl basicsOpengl basics
Opengl basics
pushpa latha2.3K visualizações
13th kandroid OpenGL and EGL por Jungsoo Nam
13th kandroid OpenGL and EGL13th kandroid OpenGL and EGL
13th kandroid OpenGL and EGL
Jungsoo Nam3.4K visualizações
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System por oasiskim
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering SystemOpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System
oasiskim3K visualizações
Computer graphics workbook por Muhammadalizardari
Computer graphics workbookComputer graphics workbook
Computer graphics workbook
Muhammadalizardari142 visualizações
Gdc 14 bringing unreal engine 4 to open_gl por changehee lee
Gdc 14 bringing unreal engine 4 to open_glGdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_gl
changehee lee2.8K visualizações
Minko - Flash Conference #5 por Minko3D
Minko - Flash Conference #5Minko - Flash Conference #5
Minko - Flash Conference #5
Minko3D17.2K visualizações
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf por SamiraKids
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdfJIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
SamiraKids26 visualizações
System Support for OpenGL Direct Rendering por Mark Kilgard
System Support for OpenGL Direct RenderingSystem Support for OpenGL Direct Rendering
System Support for OpenGL Direct Rendering
Mark Kilgard1.3K visualizações
OpenGL ES based UI Development on TI Platforms por Prabindh Sundareson
OpenGL ES based UI Development on TI PlatformsOpenGL ES based UI Development on TI Platforms
OpenGL ES based UI Development on TI Platforms
Prabindh Sundareson2.4K visualizações
Introduction to OpenGL.ppt por 16118MdFirozAhmed
Introduction to OpenGL.pptIntroduction to OpenGL.ppt
Introduction to OpenGL.ppt
16118MdFirozAhmed27 visualizações
Why is EFL used on Tizen? por Ryo Jin
Why is EFL used on Tizen?Why is EFL used on Tizen?
Why is EFL used on Tizen?
Ryo Jin3.8K visualizações
3 CG_U1_P2_PPT_3 OpenGL.pptx por ssuser255bf1
3 CG_U1_P2_PPT_3 OpenGL.pptx3 CG_U1_P2_PPT_3 OpenGL.pptx
3 CG_U1_P2_PPT_3 OpenGL.pptx
ssuser255bf113 visualizações
OpenGL Introduction. por Girish Ghate
OpenGL Introduction.OpenGL Introduction.
OpenGL Introduction.
Girish Ghate7K visualizações
Embedded Graphics Drivers in Mesa (ELCE 2019) por Igalia
Embedded Graphics Drivers in Mesa (ELCE 2019)Embedded Graphics Drivers in Mesa (ELCE 2019)
Embedded Graphics Drivers in Mesa (ELCE 2019)
Igalia513 visualizações

Mais de Jungsoo Nam

NVIDIA CUDA por
NVIDIA CUDANVIDIA CUDA
NVIDIA CUDAJungsoo Nam
403 visualizações33 slides
Android Grabber Module Proposal por
Android Grabber Module ProposalAndroid Grabber Module Proposal
Android Grabber Module ProposalJungsoo Nam
211 visualizações5 slides
Unity3D Audio Grabber design por
Unity3D Audio Grabber designUnity3D Audio Grabber design
Unity3D Audio Grabber designJungsoo Nam
143 visualizações6 slides
Android OpenGL ES Game ImageGrabber Final Report por
Android OpenGL ES Game ImageGrabber Final ReportAndroid OpenGL ES Game ImageGrabber Final Report
Android OpenGL ES Game ImageGrabber Final ReportJungsoo Nam
188 visualizações15 slides
Android RenderScript por
Android RenderScriptAndroid RenderScript
Android RenderScriptJungsoo Nam
2.7K visualizações32 slides
OpenGL Shading Language por
OpenGL Shading LanguageOpenGL Shading Language
OpenGL Shading LanguageJungsoo Nam
5.9K visualizações41 slides

Mais de Jungsoo Nam(6)

NVIDIA CUDA por Jungsoo Nam
NVIDIA CUDANVIDIA CUDA
NVIDIA CUDA
Jungsoo Nam403 visualizações
Android Grabber Module Proposal por Jungsoo Nam
Android Grabber Module ProposalAndroid Grabber Module Proposal
Android Grabber Module Proposal
Jungsoo Nam211 visualizações
Unity3D Audio Grabber design por Jungsoo Nam
Unity3D Audio Grabber designUnity3D Audio Grabber design
Unity3D Audio Grabber design
Jungsoo Nam143 visualizações
Android OpenGL ES Game ImageGrabber Final Report por Jungsoo Nam
Android OpenGL ES Game ImageGrabber Final ReportAndroid OpenGL ES Game ImageGrabber Final Report
Android OpenGL ES Game ImageGrabber Final Report
Jungsoo Nam188 visualizações
Android RenderScript por Jungsoo Nam
Android RenderScriptAndroid RenderScript
Android RenderScript
Jungsoo Nam2.7K visualizações
OpenGL Shading Language por Jungsoo Nam
OpenGL Shading LanguageOpenGL Shading Language
OpenGL Shading Language
Jungsoo Nam5.9K visualizações

Último

Attacking IoT Devices from a Web Perspective - Linux Day por
Attacking IoT Devices from a Web Perspective - Linux Day Attacking IoT Devices from a Web Perspective - Linux Day
Attacking IoT Devices from a Web Perspective - Linux Day Simone Onofri
15 visualizações68 slides
Tunable Laser (1).pptx por
Tunable Laser (1).pptxTunable Laser (1).pptx
Tunable Laser (1).pptxHajira Mahmood
23 visualizações37 slides
The Research Portal of Catalonia: Growing more (information) & more (services) por
The Research Portal of Catalonia: Growing more (information) & more (services)The Research Portal of Catalonia: Growing more (information) & more (services)
The Research Portal of Catalonia: Growing more (information) & more (services)CSUC - Consorci de Serveis Universitaris de Catalunya
73 visualizações25 slides
Special_edition_innovator_2023.pdf por
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdfWillDavies22
16 visualizações6 slides
Unit 1_Lecture 2_Physical Design of IoT.pdf por
Unit 1_Lecture 2_Physical Design of IoT.pdfUnit 1_Lecture 2_Physical Design of IoT.pdf
Unit 1_Lecture 2_Physical Design of IoT.pdfStephenTec
11 visualizações36 slides
Voice Logger - Telephony Integration Solution at Aegis por
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at AegisNirmal Sharma
17 visualizações1 slide

Último(20)

Attacking IoT Devices from a Web Perspective - Linux Day por Simone Onofri
Attacking IoT Devices from a Web Perspective - Linux Day Attacking IoT Devices from a Web Perspective - Linux Day
Attacking IoT Devices from a Web Perspective - Linux Day
Simone Onofri15 visualizações
Tunable Laser (1).pptx por Hajira Mahmood
Tunable Laser (1).pptxTunable Laser (1).pptx
Tunable Laser (1).pptx
Hajira Mahmood23 visualizações
Special_edition_innovator_2023.pdf por WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2216 visualizações
Unit 1_Lecture 2_Physical Design of IoT.pdf por StephenTec
Unit 1_Lecture 2_Physical Design of IoT.pdfUnit 1_Lecture 2_Physical Design of IoT.pdf
Unit 1_Lecture 2_Physical Design of IoT.pdf
StephenTec11 visualizações
Voice Logger - Telephony Integration Solution at Aegis por Nirmal Sharma
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at Aegis
Nirmal Sharma17 visualizações
6g - REPORT.pdf por Liveplex
6g - REPORT.pdf6g - REPORT.pdf
6g - REPORT.pdf
Liveplex9 visualizações
Info Session November 2023.pdf por AleksandraKoprivica4
Info Session November 2023.pdfInfo Session November 2023.pdf
Info Session November 2023.pdf
AleksandraKoprivica410 visualizações
The details of description: Techniques, tips, and tangents on alternative tex... por BookNet Canada
The details of description: Techniques, tips, and tangents on alternative tex...The details of description: Techniques, tips, and tangents on alternative tex...
The details of description: Techniques, tips, and tangents on alternative tex...
BookNet Canada121 visualizações
Uni Systems for Power Platform.pptx por Uni Systems S.M.S.A.
Uni Systems for Power Platform.pptxUni Systems for Power Platform.pptx
Uni Systems for Power Platform.pptx
Uni Systems S.M.S.A.50 visualizações
virtual reality.pptx por G036GaikwadSnehal
virtual reality.pptxvirtual reality.pptx
virtual reality.pptx
G036GaikwadSnehal11 visualizações
Java Platform Approach 1.0 - Picnic Meetup por Rick Ossendrijver
Java Platform Approach 1.0 - Picnic MeetupJava Platform Approach 1.0 - Picnic Meetup
Java Platform Approach 1.0 - Picnic Meetup
Rick Ossendrijver25 visualizações
Data-centric AI and the convergence of data and model engineering: opportunit... por Paolo Missier
Data-centric AI and the convergence of data and model engineering:opportunit...Data-centric AI and the convergence of data and model engineering:opportunit...
Data-centric AI and the convergence of data and model engineering: opportunit...
Paolo Missier34 visualizações
Top 10 Strategic Technologies in 2024: AI and Automation por AutomationEdge Technologies
Top 10 Strategic Technologies in 2024: AI and AutomationTop 10 Strategic Technologies in 2024: AI and Automation
Top 10 Strategic Technologies in 2024: AI and Automation
AutomationEdge Technologies14 visualizações
Microsoft Power Platform.pptx por Uni Systems S.M.S.A.
Microsoft Power Platform.pptxMicrosoft Power Platform.pptx
Microsoft Power Platform.pptx
Uni Systems S.M.S.A.47 visualizações
Five Things You SHOULD Know About Postman por Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman27 visualizações
Kyo - Functional Scala 2023.pdf por Flavio W. Brasil
Kyo - Functional Scala 2023.pdfKyo - Functional Scala 2023.pdf
Kyo - Functional Scala 2023.pdf
Flavio W. Brasil165 visualizações
Report 2030 Digital Decade por Massimo Talia
Report 2030 Digital DecadeReport 2030 Digital Decade
Report 2030 Digital Decade
Massimo Talia14 visualizações
From chaos to control: Managing migrations and Microsoft 365 with ShareGate! por sammart93
From chaos to control: Managing migrations and Microsoft 365 with ShareGate!From chaos to control: Managing migrations and Microsoft 365 with ShareGate!
From chaos to control: Managing migrations and Microsoft 365 with ShareGate!
sammart939 visualizações

OpenGL ES EGL Spec&APIs

  • 1. OpenGL ES EGL Spec & APIs SK planet/Mobile Platform Dept. Jungsoo Nam namjungsoo@gmail.com
  • 2. OpenGL ARB and Khronos Group • OpenGL ES – OpenGL ES is a lightweight graphics API which is designed for Embedded System from OpenGL which is designed for Work Station. – OpenGL is maintained by OpenGL ARB(Architecture Review Board), OpenGL ES is maintained Khronos Group.
  • 3. OpenGL Driver and Implementation • OpenGL Terminology(Link) Name Description ICD Installable Client Driver, contains the entire rendering pipeline of OpenGL. This solution, while providing the highest possible performance, was also daunting to IHVs. The Microsoft ICD kit required considerable effort to turn into a driver. SGI's DDK is also an ICD, but comes with a sample driver (for Virge/GX) as an example. IHV Independent Hardware Vendor, the manufacturers of 3D accelerators. MCD Mini Client Driver, designed as an abstraction of the rasterization layer of the rendering pipeline. The MCD promised to make developing OpenGL drivers for Windows easy for IHVs. Released for Windows/NT, it was promised, then never delivered for Win95. The MCD also gave up considerable performance due to it's design. PFD Pixel Format Descriptor, describes the pixel depth and buffers available.
  • 4. OpenGL Utility Libraries Prefix Name Functions gl OpenGL API glClear,glDrawArrays,… glu OpenGL Utility Library gluPerspective,gluLookAt glut OpenGL Utility Toolkit glutInitDisplayMode,glutSwapBuffers aux OpenGL Auxiliary Library auxDIBImageLoad,auxInitWindow glew OpenGL Extension Wrangler Library glewInit, glewIsSupported wgl/agl/cgl/glx/egl Native Interface for OpenGL wglCreateContext,wglMakeCurrent,eglCr eateContext,eglMakeCurrent
  • 5. GLU • OpenGL Utility Library – Matrix support • gluPerspective, gluOrtho, gluLookAt – Modeling support(GLUquadric) • gluDisk, gluPartialDisk, gluSphere, gluCylinder, gluCone
  • 6. GLAUX • OpenGL Auxiliary Library – which was a part of the GLUT library and is now obsolete. We need to rewrite the program using GLUT.
  • 7. GLUT • The OpenGL Utility Toolkit – GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL. GLUT makes it considerably easier to learn about and explore OpenGL programming. GLUT provides a portable API so you can write a single OpenGL program that works across all PC and workstation OS platforms. • Usage – Window system support – Modeling support • glutSolid/WireCube • glutSolid/WireSphere • glutSolid/WireTorus • glutSolid/WireTeapot • glutSolid/WireDodecahedron(12면체)
  • 8. GLEW • The OpenGL Extension Wrangler Library – http://glew.sourceforge.net/basic.html • Usage – Initializing – Checking extensions • How to get WGL extension
  • 9. WGL • OpenGL Native Interface for Windows – WGL or Wiggle is an API between OpenGL and the windowing system interface of Microsoft Windows. • http://nehe.gamedev.net/tutorial/creating_an_opengl_window_(win32)/13001/ ChoosePixelFormat() SetPixelFormat() wglCreateContext() wglMakeCurrent()
  • 10. EGL (Native Platform Graphics Interface) Overview • Native Platform Interface – EGL™ is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform window system. It handles graphics context management, surface/buffer binding, and rendering synchronization and enables high-performance, accelerated, mixed-mode 2D and 3D rendering using other Khronos APIs. EGL also provides interop capability between Khronos to enable efficient transfer of data between APIs – for example between a video subsystem running OpenMAX AL and a GPU running OpenGL ES. • Portable Layer for Graphics Resource Management – EGL can be implemented on multiple operating systems (such as Android and Linux) and native window systems (such as X and Microsoft Windows). Implementations may also choose to allow rendering into specific types of EGL surfaces via other supported native rendering APIs, such as Xlib or GDI. EGL provides: • Mechanisms for creating rendering surfaces (windows, pbuffers, pixmaps) onto which client APIs can draw and share • Methods to create and manage graphics contexts for client APIs • Ways to synchronize drawing by client APIs as well as native platform rendering APIs.
  • 11. EGL Features • Specifically EGL is a wrapper over the following subsystems; – WGL – Windows GL – the Windows-OpenGL interface (pronounced wiggle) – CGL – the Mac OS X-OpenGL interface (the AGL layer sits on top of CGL) – GLX – the equivalent X11-OpenGL interface • EGL not only provides a convenient binding between the operating system resources and the OpenGL subsystem, but also provides the hooks to the operating system to inform it when you require something, such as; 1. Iterating, selecting, and initializing an OpenGL context 2. This can be the OGL API level, software vs. hardware rendering, etc. 3. Requesting a surface or memory resource. 4. The OS services requests for system or video memory 5. Iterating through the available surface formats (to pick an optimal one) 6. You can find out properties of the video card(s) from the OS – the surfaces presented will resides on the video card(s) or software renderer interface. 7. Selecting the desired surface format 8. Informing the OS you are done rendering and it’s time to show the scene. 9. Informing the OS to use a different OpenGL context 10. Informing the OS you are done with the resources.
  • 12. EGLWindow, EGLDisplay, EGLSurface • EGLDisplay – Abstract display on which graphics are drawn – Single physical screen – Initialize by querying a default display – All EGL objects are associated with an EGLDisplay • EGLContext(Rendering Contexts) – EGLContext is a state machine defined by a client API – EGLContext is associated with EGLSurfaces • EGLSurface(Drawing Surfaces) – Types: windows, pbuffers, pixmaps • Windows, pixmaps: tied to native window system – Created with EGLConfig • Describes depth of color buffer component and types, quantities, and sizes of the ancillary buffers(depth, multisample, stencil buffers) – Ancillary buffers are associated with an EGLSurface • Not EGLContext
  • 13. EGL Operation • Interaction with native rendering – Native rendering will always be supported by pixmap surfaces • Pixmap surfaces have restricted capabilities and performance relative to window and pbuffer surfaces – Native rendering will not be supported by pbuffer surfaces, since the color buffers of pbuffers are allocated internally by EGL and are not accessible through any other means. – Native rendering may be supported by window surfaces, but only if the native window system has a compatible rendering model allowing it to share the back color buffer, or if single buffered rendering to the window surface is being done. – When both native rendering APIs and client APIs are drawing into the same underlying surface, no guarantees are placed on the relative order of completion of operations in the different rendering streams other than those provided by the synchronization primitives discussed in section 3.8 • Shared State – OpenGL and OpenGL ES Texture Objects • OpenGL and OpenGL ES makes no attempt to synchronize access to texture objects. If a texture object is bound to more than one context, then it is up to the programmer to ensure that the contents of the object are not being changed via one context while another context is using the texture object for rendering. The results of changing a texture object while another context is using it are undefined. – OpenGL and OpenGL ES Buffer Objects • hen it is up to the programmer to ensure that the contents of the object are not being changed via one context while another context is using the buffer object for rendering. The results of changing a buffer object while another context is using it are undefined. • Multiple Threads – EGL guarantees sequentially within a command stream for each of its client APIs , but not between these APIs and native APIs which may also be rendering into the same surface. – Client API commands are not guaranteed to be atomic. • Synchronization is in the hands of the client. • It can be maintained at moderate cost with the judicious use of commands such as glFinish, vgFinish, eglWaitClient, and eglWaitNative, as well as (if they exist) synchronization commands present in native rendering APIs.
  • 14. EGL Operation • Power Management – Power management events can occur synchronously while an application is running. When the system returns from the power management event the EGLContext will be invalidated, and all subsequent client API calls will have no effect (as if no context is bound). – Following a power management event, calls to eglSwapBuffers, eglCopyBuffers, or eglMakeCurrent will indicate failure by returning EGL_FALSE. The error EGL_CONTEXT_LOST will be returned if a power management event has occurred. • On detection of this error, the application must destroy all contexts (by calling eglDestroyContext for each context). To continue rendering the application must recreate any contexts it requires, and subsequently restore any client API state and objects it wishes to use. • Any EGLSurfaces that the application has created need not be destroyed following a power management event, but their contents will be invalid.
  • 15. EGL Basic Usage • The basic usage of EGL and similar API are the following; 1. (Android) Obtain the EGL interface. • So you can make EGL calls 2. Obtain a display that’s associated with an app or physical display 3. Initialize the display 4. Configure the display 5. Create surfaces • Front, back, offscreen buffers, etc. 6. Create a context associated with the display • This holds the “state” for the OpenGL calls 7. Make the context “current” • This selects the active state 8. Render with OpenGL (OpenGL not EGL calls, the OpenGL state is held by EGL context) 9. Flush or swap the buffers so EGL tells the OS to display the rendered scene. Repeat rendering till done. 10. Make the context “not current” 11. Clean up the EGL resources
  • 16. OpenGL Framebuffer(Ancillary buffer) • Framebuffer(Ancillary buffer) – A Framebuffer is a collection of buffers that can be used as the destination for rendering. Name Description Color Buffer Double buffering, stereo buffering glDrawBuffer,glReadBuffer,glClearColor Depth Buffer Shadow map, internal rendering glDepthFunc,glClearDepth Stencil Buffer Shadow volume, color masking, reflection glStencilFunc,glStencilOp,glClearStencil Accum Buffer Motion blur, anti-aliasing glAccum,glClearAccum Functions Parameters glClear GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT,GL_STENCIL_BUFFER_BIT,GL_ACC UM_BUFFER_BIT glEnable GL_DEPTH_TEST, GL_STENCIL_TEST
  • 19. Initializing Funtion Description EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id); EGL_DEFAULT_DISPLAY EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor); the values of *major and *minor would be 1 and 2, respectively). major and minor are not updated if they are specified as NULL. EGLBoolean eglTerminate(EGLDisplay dpy); const char *eglQueryString(EGLDisplay dpy, EGLint name); EGL_CLIENT_APIS, EGL_EXTENSIONS, EGL_VENDOR, or EGL_ VERSION.
  • 20. Configuration Funtion Description EGLBoolean eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); Get configs EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); Choose configs by attrib_list EGLBoolean eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); Get config attribs
  • 21. Surface Funtion Description EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); Create surface for window rendering EGLSurface eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); Create surface for offline rendering EGLSurface eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); Create surface for offline rendering from client buffer EGLSurface eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); Create surface for pixmap rendering EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface); Destroy a surface EGLBoolean eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); Get surface attributes EGLBoolean eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); Get surface attributes
  • 22. Rendering to Textures Funtion Description EGLBoolean eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer); Bind OpenGL ES Texture EGLBoolean eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer); Release OpenGL ES Texture
  • 23. Context Funtion Description EGLBoolean eglBindAPI(EGLenum api); EGL_OPENGL_API, EGL_OPENGL_ES_API, or EGL_OPENVG_API. EGLenum eglQueryAPI(void); The value returned will be one of the valid api parameters to eglBindAPI, or EGL_NONE. EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); Create a context EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx); Destroy a context EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); Set context to current context EGLContext eglGetCurrentContext(void); Get current context EGLSurface eglGetCurrentSurface(EGLint readdraw); Get current surface EGLDisplay eglGetCurrentDisplay(void); Get current display EGLBoolean eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); Return attribute list
  • 24. Syncronization Funtion Description EGLBoolean eglWaitClient(void); The same result can be achieved using client API -specific calls such as glFinish or vgFinish. EGLBoolean eglWaitGL(void); EGLenum api = eglQueryAPI(); eglBindAPI(EGL_OPENGL_ES_API); eglWaitClient(); eglBindAPI(api);
  • 25. Posting the color buffer Funtion Description EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface surface); Posting to a Window When native window resizing, called automatically EGLBoolean eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); Copying to a Native Pixmap EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval); Control swap buffer interval
  • 26. EGL Extension Funtion Description void (*eglGetProcAddress(const char *procname))(void); eglQueryString(dpy, EGL_EXTENSIONS)
  • 27. GLSurfaceView • Features – Inherited from SurfaceView – EGL encapsulation • Functions – setRenderer() – setEGLConfigChooser() • Default egl config chooser included – setRenderMode() • RENDERMODE_WHEN_DIRTY • requestRender() – setDebugFlags() • DEBUG_CHECK_GL_ERROR • DEBUG_LOG_GL_CALLS
  • 28. GLSurfaceView.Renderer • Functions – onSurfaceCreate() • Create window surface – onSurfaceChanged() • Surface size changed – onDrawFrame() • Automatically eglSwapBuffers when non-dirty rendering