Top Banner
OpenGL ES EGL Spec & APIs SK 플플플 / 플플플 플플 2 플 플플플 [email protected]
30

OpenGL ES EGL Spec&APIs

May 17, 2015

Download

Technology

Jungsoo Nam

OpenGL ES EGL Spec&APIs
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: OpenGL ES EGL Spec&APIs

OpenGL ES EGL Spec & APIs

SK 플래닛 / 모바일 개발 2 팀남정수

[email protected]

Page 2: OpenGL ES EGL Spec&APIs

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.

Page 3: OpenGL ES EGL Spec&APIs

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 pos-sible 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 de-livered 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.

Page 4: OpenGL ES EGL Spec&APIs

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,eglCreateContext,eglMakeCurrent

Page 5: OpenGL ES EGL Spec&APIs

GLU

• OpenGL Utility Library– Matrix support

• gluPerspective, gluOrtho, gluLookAt– Modeling support(GLUquadric)

• gluDisk, gluPartialDisk, gluSphere, gluCylinder, gluCone

Page 6: OpenGL ES EGL Spec&APIs

GLAUX• OpenGL Auxiliary Library

– which was a part of the GLUT library and is now obsolete. We need to rewrite the program using GLUT.

Page 7: OpenGL ES EGL Spec&APIs

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 면체 )

Page 8: OpenGL ES EGL Spec&APIs

GLEW• The OpenGL Extension Wrangler Library

– http://glew.sourceforge.net/basic.html• Usage

– Initializing

– Checking extensions

• How to get WGL extension

Page 9: OpenGL ES EGL Spec&APIs

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()

Page 10: OpenGL ES EGL Spec&APIs

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.

Page 11: OpenGL ES EGL Spec&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 context2. 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 memory5. 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 format8. Informing the OS you are done rendering and it’s time to show the scene.9. Informing the OS to use a different OpenGL context10. Informing the OS you are done with the resources.

Page 12: OpenGL ES EGL Spec&APIs

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

Page 13: OpenGL ES EGL Spec&APIs

EGL Operation• Interaction with native rendering

– Native rendering will always be supported by pixmap surfaces• Pixmap surfaces have restricted capabilitis 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 sequentiality 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, eglWait-Client, and

eglWaitNative, as well as (if they exist) synchronization commands present in native rendering APIs.

Page 14: OpenGL ES EGL Spec&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, eglCopy-Buffers, 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.

Page 15: OpenGL ES EGL Spec&APIs

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 display3. Initialize the display4. Configure the display5. 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

Page 16: OpenGL ES EGL Spec&APIs

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 bufferingglDrawBuffer,glReadBuffer,glClearColor

Depth Buffer Shadow map, internal renderingglDepthFunc,glClearDepth

Stencil Buffer Shadow volume, color masking, reflectionglStencilFunc,glStencilOp,glClearStencil

Accum Buffer Motion blur, anti-aliasingglAccum,glClearAccum

Functions Parameters

glClear GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT,GL_STENCIL_BUFFER_BIT,GL_ACCUM_BUFFER_BIT

glEnable GL_DEPTH_TEST, GL_STENCIL_TEST

Page 17: OpenGL ES EGL Spec&APIs

API Usage (1/2)

Page 18: OpenGL ES EGL Spec&APIs

API Usage (2/2)

Page 19: OpenGL ES EGL Spec&APIs

InitializingFuntion Description

EGLDisplay eglGetDisplay(EGLNativeDisplayTypedisplay_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, EGLintname);

EGL_CLIENT_APIS, EGL_EXTENSIONS, EGL_VENDOR, or EGL_VERSION.

Page 20: OpenGL ES EGL Spec&APIs

ConfigurationFuntion Description

EGLBoolean eglGetConfigs(EGLDisplay dpy,EGLConfig *configs, EGLint config_size,EGLint *num_config);

Get configs

EGLBoolean eglChooseConfig(EGLDisplay dpy, constEGLint *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

Page 21: OpenGL ES EGL Spec&APIs

SurfaceFuntion 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, EGLNativePixmapTypepixmap, 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

Page 22: OpenGL ES EGL Spec&APIs

Rendering to TexturesFuntion 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

Page 23: OpenGL ES EGL Spec&APIs

ContextFuntion 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, orEGL_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

Page 24: OpenGL ES EGL Spec&APIs

SyncronizationFuntion Description

EGLBoolean eglWaitClient(void); The same result can be achieved using client API -specific calls such as glFinishor vgFinish.

EGLBoolean eglWaitGL(void); EGLenum api = eglQueryAPI();eglBindAPI(EGL_OPENGL_ES_API);eglWaitClient();eglBindAPI(api);

Page 25: OpenGL ES EGL Spec&APIs

Posting the color bufferFuntion Description

EGLBoolean eglSwapBuffers(EGLDisplay dpy,EGLSurface surface);

Posting to a WindowWhen native window resizing, called automatically

EGLBoolean eglCopyBuffers(EGLDisplay dpy,EGLSurface surface, EGLNativePixmapTypetarget);

Copying to a Native Pixmap

EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLintinterval);

Control swap buffer interval

Page 26: OpenGL ES EGL Spec&APIs

EGL ExtensionFuntion Description

void (*eglGetProcAddress(const char *procname))(void); eglQueryString(dpy, EGL_EXTENSIONS)

Page 27: OpenGL ES EGL Spec&APIs

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

Page 28: OpenGL ES EGL Spec&APIs

GLSurfaceView.Renderer• Functions

– onSurfaceCreate()• Create window surface

– onSurfaceChanged()• Surface size changed

– onDrawFrame()• Automatically eglSwapBuffers when non-dirty rendering

Page 29: OpenGL ES EGL Spec&APIs

PBuffer example

Page 30: OpenGL ES EGL Spec&APIs

Thank you

• 감사합니다 .