Breakthrough Games with Tizen

Breakthrough Games with Tizen

Breakthrough Games with Tizen Sungyul Choe Agenda 1. Introduction 2. Game Porting to Tizen 3. Tips for Development 4. Monetization 5. Demonstration – Games2Win 6. Summary 2 Introduction Introduction • Market Status 27 Games in TOP rank 50 (2015.06) 4 Why Tizen? • Expandability and Convergence • Tizen Mobile, Tizen Wearable, Tizen TV, Home Appliances, IoT and more 5 Why Tizen? • New devices, New marketplace, New opportunity • Hard to make your games visible to users # of apps 1,600,000 1,000,000 200,000 year 2010 2011 2012 2013 2014 6 * source: Business Insider Why Tizen? • Unexplored and New Game Area Multi-user Gaming Experience Multiple screens Game Experience 7 Why Tizen? • Efficiency • Development efficiency • C-based modules accelerate porting of open source modules iOS android App App iOS App Java (Native) Java swift JNI JNI Objective-C Tizen App Libraries (NDK) Library Libraries Library Libraries (Native) Library Kernel Kernel Kernel 8 Why Tizen? • Efficiency • Device performance • Graphics is highly optimized, which is deeply impressive for mass model with limited resources Z1 Z1 9 Why Tizen? • Developer friendly Tizen Store Seller Promotion 10 Game Porting to Tizen Game Porting to Tizen • Typical way • Develop game for Tizen with the same scenario 12 Game Porting to Tizen • Better way • Divide porting layer from game core, and adapt only porting layer Game Core Game Core Game Core Game Core 13 android iOS Tizen Windows Game Porting to Tizen • Best way • Adopt game engines, such as cocos2d-x & Unity3D Game App Game Core Game Engine (cocos2d-x, Unity3D, ……) 14 android iOS Tizen Windows Game Porting to Tizen • Famous Game Engines are ready for Tizen • Cocos2d-x (since ver.3.5.1) • Unity3D (since ver.5.1) 15 Tips for Development - evasgl Basics evasgl basics (1) • EFL (Enlightenment Foundation Libraries) • Collection of open source libraries from Enlightenment • evas (Efl + canVAS) • evas is Scene Graph composed of ‘evas objects’ Undrawn Area Tiled Rendering 17 Original Scene Immediate Mode Retained Mode (“Scene Graph”) evasgl basics (2) • EFL View Hierarchy UI Application elm_widgets (Label, Button, etc) evas_object compositing evas evas X-window 18 evasgl basics (3) • GPU Accelerated Rendering in EFL • How to make a surface for GLES? • How the surface is composited with other widgets? • evasgl • Abstraction for EGL and OpenGL-ES • EGL related operations are automatically and internally processed in evas • Provides wrappers for the native OpenGL-ES calls • Rendering results by evasgl goes to evas object • All evas objects are smoothly composited in EFL view hierarchy 19 evasgl basics (4) • Revisit EFL View Hierarchy GL Application evasgl commands elm_glview evas_object compositing evas evas X-window 20 Sameple code – Draw one cube • Overall sequence of sample codes 1 Application initialization 2 evasgl initialization 3 Animation and rendering settings • Add animator and renderer to ecore main loop 4 Define rendering with evasgl functions 21 1. Application Initialization app_main part #include <Elementary.h> int main(int argc, char *argv[]) #include <Evas_GL.h> { ...... appdata_s ad = {0,}; int ret = 0; // Define a global context for the application typedef struct appdata { ui_app_lifecycle_callback_s event_callback = {0,}; Evas_Object *win; ...... Evas_Object *img; Evas_GL *evasgl; event_callback.create = app_create; Evas_GL_API *glapi; event_callback.terminate = app_terminate; Evas_GL_Context *ctx; event_callback.pause = app_pause; Evas_GL_Surface *sfc; event_callback.resume = app_resume; Evas_GL_Config *cfg; event_callback.app_control = app_control; unsigned int program; unsigned int vtx_shader; ...... unsigned int fgmt_shader; ret = ui_app_main(argc, argv, &event_callback, &ad); unsigned int vbo; } appdata_s; return ret; } 22 1. Application Initialization app_main part #include <Elementary.h> int main(int argc, char *argv[]) #include <Evas_GL.h> { ...... appdata_s ad = {0,}; // Define a global context for the application int ret = 0; typedef// Define struct a global appdata context { for the application typedef struct appdata { ui_app_lifecycle_callback_s event_callback = {0,}; Evas_Object Evas_Object *win;*win; ...... Evas_Object Evas_Object **imgimg; ; Evas_GL Evas_GL **evasgl; ; event_callback.create = app_create; Evas_GL_API Evas_GL_API **glapiglapi; ; event_callback.terminate = app_terminate; Evas_GL_Context *ctx; event_callback.pause = app_pause; Evas_GL_Context *ctx; Evas_GL_Surface *sfc; event_callback.resume = app_resume; Evas_GL_Surface Evas_GL_Config *cfg *sfc; ; event_callback.app_control = app_control; Evas_GL_Config unsigned int program; *cfg ; unsigned unsigned int vtx_shaderprogram;; ...... unsigned unsigned int fgmt_shadervtx_shader; ; retret = ui_app_main= ui_app_main(argc(argc, argv, argv, &,event_callback &event_callback, &ad, &ad);); unsigned int vbo; unsigned int fgmt_shader; } appdata_s; return ret; unsigned int vbo; } } appdata_s; 23 1. Application Initialization app_main part #include <Elementary.h> int main(int argc, char *argv[]) #include <Evas_GL.h> { ...... appdata_s ad = {0,}; int ret = 0; // Define a global context for the application typedef struct appdata { ui_app_lifecycle_callback_s event_callback = {0,}; Evas_Object *win; ...... Evas_Object *img; Evas_GL *evasgl; event_callback.createevent_callback.create = app_create= app_create; ; Evas_GL_API *glapi; event_callback.terminateevent_callback.terminate = app_terminate= app_terminate; ; Evas_GL_Context *ctx; event_callback.pauseevent_callback.pause = app_pause= app_pause; ; Evas_GL_Surface *sfc; event_callback.resumeevent_callback.resume = app_resume= app_resume; ; Evas_GL_Config *cfg; event_callback.app_controlevent_callback.app_control = app_control = app_control; ; unsigned int program; unsigned int vtx_shader; ...... unsigned int fgmt_shader; retret = ui_app_main= ui_app_main(argc(argc, argv, argv, &, event_callback&event_callback, ,&ad); &ad); unsigned int vbo; } appdata_s; return ret; } 24 2. evasgl Initialization evasgl initialization /* Set config of the surface for evas gl */ ad->cfg = evas_gl_config_new(); ad->cfg->color_format = EVAS_GL_RGBA_8888; // Surface Color Format ad->cfg->depth_bits = EVAS_GL_DEPTH_BIT_24; // Surface Depth Format ad->cfg->stencil_bits = EVAS_GL_STENCIL_NONE; // Surface Stencil Format ad->cfg->options_bits = EVAS_GL_OPTIONS_NONE; // Configuration options (here, no extra options) /* Add Window */ ad->win = elm_win_util_standard_add("Evas_GL Example", "Evas_Gl Example"); /* Get the evas gl handle for doing gl things */ ad->evasgl = evas_gl_new(evas_object_evas_get(ad->win)); ad->glapi = evas_gl_api_get(ad->evasgl); /* Get the window size */ Evas_Coord w,h; evas_object_geometry_get(ad->win, NULL, NULL, &w, &h); /* Create a surface and context */ ad->sfc = evas_gl_surface_create(ad->evasgl, ad->cfg, w, h); ad->ctx = evas_gl_context_create(ad->evasgl, NULL); /* Initialization GLES including shader gneration and other stuffs */ 25 ...... 2. evasgl Initialization evasgl initialization /* /*Set Set config config ofof thethe surface surface for forevas evasgl */ gl */ ad-ad>-cfg>cfg = = evas_gl_config_newevas_gl_config_new(); (); ad->cfg->color_format = EVAS_GL_RGBA_8888; // Surface Color Format ad-ad>-cfg>cfg->->color_formatdepth_bits = =EVAS_GL_DEPTH_BIT_24; EVAS_GL_RGBA_8888; // Surface // SurfaceDepth Format Color Format ad-ad>-cfg>cfg->->depth_bitsstencil_bits = =EVAS_GL_STENCIL_NONE; EVAS_GL_DEPTH_BIT_24; // Surface // SurfaceStencil FormatDepth Format ad-ad>-cfg>cfg->->stencil_bitsoptions_bits = =EVAS_GL_OPTIONS_NONE; EVAS_GL_STENCIL_NONE; // Configuration // Surface options Stencil (here, Format no extra options) ad- >cfg->options_bits = EVAS_GL_OPTIONS_NONE; // Configuration options (here, no extra options) /* Add Window */ ad->win = elm_win_util_standard_add("Evas_GL Example", "Evas_Gl Example"); /* Get the evas gl handle for doing gl things */ ad->evasgl = evas_gl_new(evas_object_evas_get(ad->win)); ad->glapi = evas_gl_api_get(ad->evasgl); /* Get the window size */ Evas_Coord w,h; evas_object_geometry_get(ad->win, NULL, NULL, &w, &h); /* Create a surface and context */ ad->sfc = evas_gl_surface_create(ad->evasgl, ad->cfg, w, h); ad->ctx = evas_gl_context_create(ad->evasgl, NULL); /* Initialization GLES including shader gneration and other stuffs */ 26 ...... 2. evasgl Initialization evasgl initialization /* Set config of the surface for evas gl */ ad->cfg = evas_gl_config_new(); ad->cfg->color_format = EVAS_GL_RGBA_8888; // Surface Color Format ad->cfg->depth_bits = EVAS_GL_DEPTH_BIT_24; // Surface Depth Format ad->cfg->stencil_bits = EVAS_GL_STENCIL_NONE; // Surface Stencil Format ad->cfg->options_bits = EVAS_GL_OPTIONS_NONE; // Configuration options (here, no extra options) /* /*Add Add Window Window */ ad-ad>win->win == elm_win_util_standard_add("Evas_GL("Evas_GL Example", Example", "Evas_Gl Example"Evas_Gl"); Example"); /* Get the evas gl handle for doing gl things */ ad->evasgl = evas_gl_new(evas_object_evas_get(ad->win)); ad->glapi = evas_gl_api_get(ad->evasgl); /* Get the window size */ Evas_Coord w,h; evas_object_geometry_get(ad->win, NULL, NULL, &w, &h); /* Create a surface and context */ ad->sfc = evas_gl_surface_create(ad->evasgl, ad->cfg, w, h); ad->ctx = evas_gl_context_create(ad->evasgl, NULL); /* Initialization GLES including shader gneration and other stuffs */ 27 ...... 2. evasgl Initialization evasgl initialization /* Set config of the surface for evas gl */ ad->cfg = evas_gl_config_new(); ad->cfg->color_format = EVAS_GL_RGBA_8888; // Surface Color Format ad->cfg->depth_bits

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    76 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us