© Copyright Khronos Group, 2010 - Page 1
Overview of developing OpenGL ES Applications on bada
Sungyul ChoeSamsung Electronics
© Copyright Khronos Group, 2010 - Page 2
Contents
• bada: Smartphone platform
• OpenGL ES on bada
• bada-specific details
• Summary
© Copyright Khronos Group, 2010 - Page 3
1
bada: Samsung Smartphone Platform
© Copyright Khronos Group, 2010 - Page 4
Smartphone: Wave & WaveII
Wave : 1GHz Processor
Super AMOLED (3.3’’ WVGA)
5.0 Megapixel camera
HD video playback & recording
Bluetooth 3.0
Wi-Fi (802.11b/g/n)
Various sensors
Wave II : 1GHz Processor
Super LCD (3.7’’ WVGA)
5.0 Megapixel camera
HD video playback & recording
Bluetooth 3.0
Wi-Fi (802.11b/g/n)
Various sensors
© Copyright Khronos Group, 2010 - Page 5
Wave family, more bada devices
Wave525 Wave575 Wave723Wave533
< 500MHz Processor
TFT LCD (3.2’’ WQVGA)
3.2 ~ 5.0 Megapixel camera
Bluetooth 3.0
Wi-Fi (802.11b/g/n)
© Copyright Khronos Group, 2010 - Page 6
bada, Smartphone platform
• An execution environment for feature-rich apps and services
© Copyright Khronos Group, 2010 - Page 7
bada features: Overview
Audio
GraphicsSensors
Sound
Weather
Input Output
Vibration
$2 $3In-App
purchasing
Remote contents
Service-centric
SNS Gateway
Face detection
© Copyright Khronos Group, 2010 - Page 8
bada Development Environment
• bada IDE
- Eclipse based development environment
- C/C++ based development environment
© Copyright Khronos Group, 2010 - Page 9
Application Life-cycle
© Copyright Khronos Group, 2010 - Page 10
2
OpenGL ES on bada
© Copyright Khronos Group, 2010 - Page 11
3D rendering in bada
• bada supports
- EGL- Manages contexts and drawing surfaces
- Rendering on every kind of controls
- OpenGL® ES 1.1/2.0- 1.1 – Fixed function hardware
- 2.0 – Fully programmable 3D graphics
© Copyright Khronos Group, 2010 - Page 12
3D rendering in bada
• GlesCube - Sample application in SDK
- Initialize EGL
- Initialize GL
- Start timer
- Rendering loop- Draw a scene in regular interval
- Update screen
- Kill timer
- Release GL resources
© Copyright Khronos Group, 2010 - Page 13
3D rendering in bada
• Initialize EGL
bool GlesCube::InitEGL()
{
EGLint numConfigs = 1;
EGLint eglConfigList[] = {/*…*/};
EGLint eglContextList[] = {/*…*/};eglBindAPI(EGL_OPENGL_ES_API);
eglDisplay = eglGetDisplay(
(EGLNativeDisplayType)EGL_DEFAULT_DISPLAY);
eglInitialize(eglDisplay, null, null);
eglChooseConfig(eglDisplay, eglConfigList,
&eglConfig, 1, &numConfigs);
eglSurface = eglCreateWindowSurface(eglDisplay,
eglConfig, (EGLNativeWindowType)pForm, null);
eglContext = eglCreateContext(__eglDisplay,
eglConfig, EGL_NO_CONTEXT, eglContextList);
...
}
© Copyright Khronos Group, 2010 - Page 14
3D rendering in bada
• Initialize GL
bool GlesCube::InitGL()
{
GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER);
GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);
......
glShaderSource(fragShader, 1, (const char**)&fragmentText, null);
glCompileShader(fragShader);
glShaderSource(vertShader, 1, (const char**)&vertexText, null);
glCompileShader(vertShader);
programObject = glCreateProgram();
glAttachShader(programObject, fragShader);
glAttachShader(programObject, vertShader);
glLinkProgram(programObject);
......
glUseProgram(programObject);
© Copyright Khronos Group, 2010 - Page 15
3D rendering in bada
• Rendering loop
bool GlesCube::Draw()
{
eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
......
glViewport(0, 0, width, height);
......
glDrawElements(GL_TRIANGLES, numIndices,
GL_UNSIGNED_SHORT, indices);
glFinish();
eglSwapBuffers(eglDisplay, eglSurface);
......
return true;
}
© Copyright Khronos Group, 2010 - Page 16
3D rendering in bada
• Release GL resources
void GlesCube::DestroyGL()
{
glDeleteProgram(programObject);
eglMakeCurrent(eglDisplay, null, null, null);
eglDestroyContext(eglDisplay, eglContext);
eglDestroySurface(eglDisplay, eglSurface);
eglTerminate(eglDisplay);
}
© Copyright Khronos Group, 2010 - Page 17
3D rendering in bada
• Checks OpenGL ES version of device
• Result string
void Test1::CheckGLES(void)
{
String key(L"OpenGLESVersion");
String GLESVersion;
SystemInfo::GetValue(key,GLESVersion);
AppLog("%ls", GLESVersion.GetPointer());
}
Device Result
Wave/Wave II 1.1/2.0
Wave525
© Copyright Khronos Group, 2010 - Page 18
Animation in bada
• Timer-based rendering loop
- Step 1: Create a timer
- Step 2: Implement event listener
- Step 3: Handle timer event
pTimer= new Timer;
pTimer->Construct(*this);
pTimer->Start(TIME_OUT);
class GlesCube11 :
public Osp::Base::Runtime::ITimerEventListener
......
void OnTimerExpired(Osp::Base::Runtime::Timer& timer);
void GlesCube11::OnTimerExpired(Timer& timer){
pTimer->Start(TIME_OUT);
Draw(); // draw something..}
© Copyright Khronos Group, 2010 - Page 19
3
bada-specific details
© Copyright Khronos Group, 2010 - Page 20
3D accelerator of Wave/Wave II
• POWERVR SGX
- Unified Shader Architecture
- Tile-based Deferred Rendering (TBDR)- Enhanced rendering performance
- Failed to pass conformance test for depth buffer
Simulator
(Good)
Target
(Not Good)
© Copyright Khronos Group, 2010 - Page 21
3D accelerator of Wave/Wave II
• Hardware specific features
Visit http://www.imgtec.com
© Copyright Khronos Group, 2010 - Page 22
3D rendering of bada Simulator
• bada simulator
- Supports EGL & OpenGL® ES 1.1/2.0
- Invokes wgl & OpenGL® APIs corresponding to
those of EGL & OpenGL® ES
- Emulates all bada APIs and almost all EGL & OpenGL® APIs
© Copyright Khronos Group, 2010 - Page 23
3D rendering of bada Simulator
• Limitation
- Simulator functionalities depend on those of PC
- EGL Pixmap surface- OpenGL® does not support pixmap surface
- For simulator, you need to call eglUpdateBufferOSP to flush rendering results to Bitmap
eglSwapBuffers(eglDisplay, eglSurface);
eglUpdateBufferOSP(eglDisplay, pixmap_surface);
© Copyright Khronos Group, 2010 - Page 24
OpenGL ES Extensions
• Using eglGetProcAddress function
- Extensions depends on the functionalities of GPU
- Step1: Declare function pointer
- Step2: Get function pointer
- Step3: Call the extension function
fp_glCurrentPaletteMatrixOES(index); // Gluint index
Typedef void (GL_APIENTRYP PFNGLCURRENTPALETTEMATRIXOESPROC)
(GLuint matrixpaletteindex);
PFNGLCURRENTPALETTEMATRIXOESPROC fp_glCurrentPaletteMatrixOES;
fp_glCurrentPaletteMatrixOES =
(PFNGLCURRENTPALETTEMATRIXOESPROC)
eglGetProcAddress("glCurrentPaletteMatrixOES");
© Copyright Khronos Group, 2010 - Page 25
4
Summary
© Copyright Khronos Group, 2010 - Page 26
Screenshot
TwinBlades: The Reaping Vanguard
<Press Start Studio, 2010>
Modern Combat: Sandstorm
<© 2009 Gameloft>
© Copyright Khronos Group, 2010 - Page 27
Screenshot
Dark Shrine
<Hotdog Studio>
Need for Speed™ Shift
<Electronic Arts>
© Copyright Khronos Group, 2010 - Page 28
Summary
• bada is Samsung’s smartphone platform
• bada supports OpenGL ES 1.1/2.0 standards
• Some bada-specific details
- Graphics hardware specific features
- OpenGL ES in simulators
- OpenGL ES extensions
© Copyright Khronos Group, 2010 - Page 29
Find out more……
• bada SDK
- Latest is bada SDK 1.2
- IDE, Tutorials, Documentations, Sample codes and various resources
- Visit http://developers.bada.com/ !!!
• POWERVR Insider
- OpenGL ES 1.1/2.0 SDK
http://www.imgtec.com/powervr/insider/powervr-insider.asp
© Copyright Khronos Group, 2010 - Page 30
Thank you