Mobile OpenGL game porting to Tizen: hands-on experience Yuriy - - PowerPoint PPT Presentation

mobile opengl game porting to tizen hands on experience
SMART_READER_LITE
LIVE PREVIEW

Mobile OpenGL game porting to Tizen: hands-on experience Yuriy - - PowerPoint PPT Presentation

Mobile OpenGL game porting to Tizen: hands-on experience Yuriy Ushakov (XenZu Technologies) bizdev@xenzu.com World Cup Table Tennis l Arcade game l 2-player game modes 2 Android application structure Android (Java) User Interface


slide-1
SLIDE 1

Mobile OpenGL game porting to Tizen: hands-on experience

Yuriy Ushakov (XenZu Technologies) bizdev@xenzu.com

slide-2
SLIDE 2

2

World Cup Table Tennis

l Arcade game l 2-player game modes

slide-3
SLIDE 3

3

Android application structure

Android (Java) User Interface OpenGL context while{ } Sound Player

render() { EnterFrame(); ExitFrame(); RenderScene(); }

Android NDK (C++)

Animated text

slide-4
SLIDE 4

4

Building Game Core for Tizen

Android (Java) Game Core (NDK, C++)

slide-5
SLIDE 5

5

Building Game Core for Tizen

Android (Java) Game Core (NDK, C++) Tizen Build

slide-6
SLIDE 6

6

Tizen OpenGL application

Frame Frame-based Frame Form-based Form 1 Splash Screen Form 3 OpenGL context Overlaying controls Form 2 UI menus Overlaying Tizen controls

slide-7
SLIDE 7

7

OpenGL texture loading (Android)

for(int id = 0; id < num_of_textures; id++) { inittexture(id); }

Android (Java)

initWithImage(id) { Bitmap *bmp = GetBitmapN(id); handleBitmap(bmp); glTexImage2D(..., bmp); delete bmp; }

Android NDK (C++)

inittexture(id); { glGenTextures(1, name); glBindTexture(..., *name); initWithImage(id); }

slide-8
SLIDE 8

8

Tizen application structure

Main Thread WcttTzApp GameThread MainActivity

Main Menu Scores Options Team Selection Paddle Selection Renderer

Sound Player

OpenGL form

: EventDrivenThread : IGlRenderer : Form : Form

MsgSender

: Event

Sound Thread

slide-9
SLIDE 9

9

Tizen application structure: GameThread class

Main Thread WcttTzApp GameThread MainActivity

Main Menu Scores Options Team Selection Paddle Selection Renderer

Sound Player

OpenGL form

: EventDrivenThread : IGlRenderer : Form : Form

MsgSender

: Event

Sound Thread

slide-10
SLIDE 10

10

Separate game thread (workaround for an early F/W ver.)

GameThread

while(); { render(); glFlush(); }

Rendering Thread WcttTzApp

while(); { _openGlForm->Invalidate(); }

Main Thread

d r a w

l Allowed FPS rate increase l Caused synchronization problem

~70 Hz ~20 Hz

slide-11
SLIDE 11

11

Tizen application structure

Main Thread WcttTzApp GameThread MainActivity

Main Menu Scores Options Team Selection Paddle Selection Renderer

Sound Player

OpenGL form

: EventDrivenThread : IGlRenderer : Form : Form

MsgSender

: Event

Sound Thread

slide-12
SLIDE 12

12

Tizen application structure: MainActivity class

Main Thread WcttTzApp GameThread MainActivity

Main Menu Scores Options Team Selection Paddle Selection Renderer

Sound Player

OpenGL form

: EventDrivenThread : IGlRenderer : Form : Form

MsgSender

: Event

Sound Thread

slide-13
SLIDE 13

13

Issue of a blank WebView

AddControl(web_view) In 1-2 seconds...

slide-14
SLIDE 14

14

Tizen application structure: SoundPlayer class

Main Thread WcttTzApp GameThread MainActivity

Main Menu Scores Options Team Selection Paddle Selection Renderer

SoundPlayer

OpenGL form

: EventDrivenThread : IGlRenderer : Form : Form

MsgSender

: Event

Sound Thread

slide-15
SLIDE 15

15

Sound Player use options

Tizen::Media::Player player; // Maximal delay player.OpenFile(path); player.Play(); // Lower delay player.OpenBuffer(buffer); player.Play(); Tizen::Media::Player player[64]; for(int i = 0; i < 63; i++) { player[i].OpenBuffer(buffer[i]); } // Minimal delay. // Playing simultaneously player[2].Play(); player[0].Play(); player[1].Play(); player[3].Play();

l Playing mp3 and other compressed formats l Playing a number of sounds simultaneosly

slide-16
SLIDE 16

16

Playing sound

l If one needs to play a sound “sound_id”

l Low number of players 1 If player is free:

player.OpenBuffer(buffer[sound_id]); player.Play();

Exit. 2 Otherwise, choose another player. Go to step 1. l High number of players 1 Open buffers in advance:

player[0].OpenBuffer(buffer[sound_0]); ... player[N].OpenBuffer(buffer[sound_N]);

2 Play sound in prepared player:

player[sound_id].Play();

slide-17
SLIDE 17

17

Tizen application structure: MsgSender class

Main Thread WcttTzApp GameThread MainActivity

Main Menu Scores Options Team Selection Paddle Selection Renderer

SoundPlayer

OpenGL form

: EventDrivenThread : IGlRenderer : Form : Form

MsgSender

: Event

Sound Thread

slide-18
SLIDE 18

18

Summary

l Relatively simple porting of C++ OpenGL code to Tizen l Rich Tizen::Ui namespace for implementation of complex

animated user interfaces

l Developer friendly Tizen::Media::Player class for mixed sounds

playing

slide-19
SLIDE 19

19

Q & A

XenZu Technologies www.xenzu.com bizdev@xenzu.com

slide-20
SLIDE 20