Overview of developing OpenGL ES Applications on …...•bada is Samsung’s smartphone platform...

Preview:

Citation preview

© 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

Recommended