From ceaa66b59bbccf7721de4b687cd93b92bf47745b Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Tue, 5 Dec 2017 12:46:31 +0900 Subject: Merge sandbox source code to master Modify libwindowmanager's requestSurface api. Change failed log to HMI_ERROR. Delete global variable gWindow. Delete split window code. Change-Id: I83df68f2ae3d34d7589370df4010f5b297662f69 Signed-off-by: zheng_wenlong (cherry picked from commit 478ad89b8da9d5bc68755433cab4963b7d0c8b96) --- sample/simple-egl/src/simple-egl.cpp | 149 ++++++++--------------------------- 1 file changed, 31 insertions(+), 118 deletions(-) diff --git a/sample/simple-egl/src/simple-egl.cpp b/sample/simple-egl/src/simple-egl.cpp index 8be9d2e..be694d7 100644 --- a/sample/simple-egl/src/simple-egl.cpp +++ b/sample/simple-egl/src/simple-egl.cpp @@ -47,7 +47,7 @@ #include #include -#include "libwindowmanager.h" +#include #include #include @@ -64,7 +64,6 @@ string app_name = string("Navigation"); LibHomeScreen* hs; LibWindowmanager *wm; -bool gIsDraw = false; static const struct wl_interface *types[] = { NULL, @@ -149,7 +148,7 @@ struct window { EGLSurface egl_surface; struct wl_callback *callback; int fullscreen, opaque, buffer_size, frame_sync; -} *gWindow; +}; static const char *vert_shader_text = "uniform mat4 rotation;\n" @@ -224,7 +223,7 @@ init_egl(struct display *display, struct window *window) } free(configs); if (display->egl.conf == NULL) { - HMI_DEBUG("simple-egl","did not find config with buffer size %d", + HMI_ERROR("simple-egl","did not find config with buffer size %d", window->buffer_size); exit(EXIT_FAILURE); } @@ -272,7 +271,7 @@ create_shader(struct window *window, const char *source, GLenum shader_type) char log[1000]; GLsizei len; glGetShaderInfoLog(shader, 1000, &len, log); - HMI_DEBUG("simple-egl","Error: compiling %s: %*s", + HMI_ERROR("simple-egl","Error: compiling %s: %*s", shader_type == GL_VERTEX_SHADER ? "vertex" : "fragment", len, log); exit(1); @@ -301,7 +300,7 @@ init_gl(struct window *window) char log[1000]; GLsizei len; glGetProgramInfoLog(program, 1000, &len, log); - HMI_DEBUG("simple-egl","Error: linking:%*s", len, log); + HMI_ERROR("simple-egl","Error: linking:%*s", len, log); exit(1); } @@ -327,7 +326,7 @@ create_ivi_surface(struct window *window, struct display *display) id_ivisurf, window->surface); if (window->ivi_surface == NULL) { - HMI_DEBUG("simple-egl","Failed to create ivi_client_surface"); + HMI_ERROR("simple-egl","Failed to create ivi_client_surface"); abort(); } @@ -396,19 +395,7 @@ redraw(void *data, struct wl_callback *callback, uint32_t time) { 0, 0.5 } }; - static const GLfloat verts_sub[3][2] = { - { -0.25, -0.5 }, - { 0.25, -0.5 }, - { 0, 0.5 } - }; - - static const GLfloat colors_H[3][3] = { - { 1, 1, 1 }, - { 1, 1, 1 }, - { 1, 1, 1 } - }; - - static const GLfloat colors_N[3][3] = { + static const GLfloat colors[3][3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } @@ -465,20 +452,8 @@ redraw(void *data, struct wl_callback *callback, uint32_t time) glClearColor(0.0, 0.0, 0.0, 0.5); glClear(GL_COLOR_BUFFER_BIT); - if(window->geometry.height == 1488) - { - glVertexAttribPointer(window->gl.pos, 2, GL_FLOAT, GL_FALSE, 0, verts); - } - else - { - glVertexAttribPointer(window->gl.pos, 2, GL_FLOAT, GL_FALSE, 0, verts_sub); - } - if(app_name == string("HVAC")){ - glVertexAttribPointer(window->gl.col, 3, GL_FLOAT, GL_FALSE, 0, colors_H); - } - else{ - glVertexAttribPointer(window->gl.col, 3, GL_FLOAT, GL_FALSE, 0, colors_N); - } + glVertexAttribPointer(window->gl.pos, 2, GL_FLOAT, GL_FALSE, 0, verts); + glVertexAttribPointer(window->gl.col, 3, GL_FLOAT, GL_FALSE, 0, colors); glEnableVertexAttribArray(window->gl.pos); glEnableVertexAttribArray(window->gl.col); @@ -548,49 +523,24 @@ signal_int(int signum) } int -init_wm(LibWindowmanager *wm) +init_wm(LibWindowmanager *wm, struct window *window) { HMI_DEBUG("simple-egl","called"); - char* surfaceIdStr; if (wm->init(port, token.c_str()) != 0) { - HMI_DEBUG("simple-egl","wm init failed. "); - return -1; + HMI_ERROR("simple-egl","wm init failed. "); + return -1; } json_object *obj = json_object_new_object(); json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); - if (wm->requestSurface(obj) != 0) { - HMI_DEBUG("simple-egl","wm request surface failed "); + g_id_ivisurf = wm->requestSurface(obj); + if (g_id_ivisurf < 0) { + HMI_ERROR("simple-egl","wm request surface failed "); return -1; } - - wm->set_event_handler(LibWindowmanager::Event_Active, [wm](json_object *object) { - const char *label = json_object_get_string( - json_object_object_get(object, wm->kKeyDrawingName)); - HMI_DEBUG("simple-egl","Surface %s got activated! ", label); - }); - - wm->set_event_handler(LibWindowmanager::Event_Inactive, [wm](json_object *object) { - const char *label = json_object_get_string( - json_object_object_get(object, wm->kKeyDrawingName)); - HMI_DEBUG("simple-egl","Surface %s got inactivated!", label); - }); - - wm->set_event_handler(LibWindowmanager::Event_Visible, [wm](json_object *object) { - const char *label = json_object_get_string( - json_object_object_get(object, wm->kKeyDrawingName)); - HMI_DEBUG("simple-egl","Surface %s got visibled!", label); - }); - - wm->set_event_handler(LibWindowmanager::Event_Invisible, [wm](json_object *object) { - const char *label = json_object_get_string( - json_object_object_get(object, wm->kKeyDrawingName)); - HMI_DEBUG("simple-egl","Surface %s got invisibled!", label); - gIsDraw = false; - }); - - wm->set_event_handler(LibWindowmanager::Event_SyncDraw, [wm](json_object *object) { + HMI_DEBUG("simple-egl","IVI_SURFACE_ID: %d ", g_id_ivisurf); + wm->set_event_handler(LibWindowmanager::Event_SyncDraw, [wm, window](json_object *object) { const char *label = json_object_get_string( json_object_object_get(object, wm->kKeyDrawingName)); const char *area = json_object_get_string( @@ -598,42 +548,25 @@ init_wm(LibWindowmanager *wm) HMI_DEBUG("simple-egl","Surface %s got syncDraw! Area: %s. ", label, area); if ((wm->kStrLayoutNormal + "." + wm->kStrAreaFull) == std::string(area)) { - HMI_DEBUG("simple-egl","Layout:%s x:%d y:%d w:%d h:%d ", area, 0, 0, 1080, 1488); - wl_egl_window_resize(gWindow->native, 1080, 1488, 0, 0); - gWindow->geometry.width = 1080; - gWindow->geometry.height = 1488; + wl_egl_window_resize(window->native, 1080, 1488, 0, 0); + window->geometry.width = 1080; + window->geometry.height = 1488; } else if ((wm->kStrLayoutSplit + "." + wm->kStrAreaMain) == std::string(area) || (wm->kStrLayoutSplit + "." + wm->kStrAreaSub) == std::string(area)) { - HMI_DEBUG("simple-egl","Layout:%s x:%d y:%d w:%d h:%d ", area, 0, 0, 1080, 744); - wl_egl_window_resize(gWindow->native, 1080, 744, 0, 0); - gWindow->geometry.width = 1080; - gWindow->geometry.height = 744; + wl_egl_window_resize(window->native, 1080, 744, 0, 0); + window->geometry.width = 1080; + window->geometry.height = 744; } - if (!gWindow->fullscreen) - gWindow->window_size = gWindow->geometry; - gIsDraw = true; + if (!window->fullscreen) + window->window_size = window->geometry; json_object *obj = json_object_new_object(); json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); wm->endDraw(obj); }); - wm->set_event_handler(LibWindowmanager::Event_FlushDraw, [wm](json_object *object) { - const char *label = json_object_get_string( - json_object_object_get(object, wm->kKeyDrawingName)); - HMI_DEBUG("simple-egl","Surface %s got flushdraw! ", label); - }); - - do - { - surfaceIdStr = getenv("QT_IVI_SURFACE_ID"); - } while (surfaceIdStr == NULL); - - g_id_ivisurf = atoi(surfaceIdStr); - HMI_DEBUG("simple-egl","IVI_SURFACE_ID: %d ", g_id_ivisurf); - return 0; } @@ -641,7 +574,7 @@ int init_hs(LibHomeScreen* hs){ if(hs->init(port, token)!=0) { - HMI_DEBUG("simple-egl","homescreen init failed. "); + HMI_ERROR("simple-egl","homescreen init failed. "); return -1; } @@ -655,17 +588,10 @@ init_hs(LibHomeScreen* hs){ json_object *obj = json_object_new_object(); json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); json_object_object_add(obj, wm->kKeyDrawingArea, json_object_new_string("normal.full")); - gIsDraw = false; wm->activateSurface(obj); } }); - hs->set_event_handler(LibHomeScreen::Event_OnScreenMessage, [](json_object *object){ - const char *display_message = json_object_get_string( - json_object_object_get(object, "display_message")); - HMI_DEBUG("simple-egl","Event_OnScreenMessage display_message = %s ", display_message); - }); - return 0; } @@ -683,12 +609,8 @@ main(int argc, char **argv) window.window_size = window.geometry; window.buffer_size = 32; window.frame_sync = 1; - gWindow = &window; - if(argc > 2) - { - if(string(argv[0]).find("hvac") != string::npos) - app_name = string("HVAC"); + if(argc > 2){ port = strtol(argv[1], NULL, 10); token = argv[2]; } @@ -707,9 +629,7 @@ main(int argc, char **argv) init_egl(&display, &window); wm = new LibWindowmanager(); - hs = new LibHomeScreen(); - - if(init_wm(wm)!=0){ + if(init_wm(wm, &window)!=0){ fini_egl(&display); if (display.ivi_application) ivi_application_destroy(display.ivi_application); @@ -720,6 +640,7 @@ main(int argc, char **argv) return -1; } + hs = new LibHomeScreen(); if(init_hs(hs)!=0){ fini_egl(&display); if (display.ivi_application) @@ -740,8 +661,7 @@ main(int argc, char **argv) sigint.sa_flags = SA_RESETHAND; sigaction(SIGINT, &sigint, NULL); - wl_display_dispatch_pending(display.display); - redraw(&window, NULL, 0); + eglSwapBuffers(window.display->egl.dpy, window.egl_surface); json_object *obj = json_object_new_object(); json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); json_object_object_add(obj, wm->kKeyDrawingArea, json_object_new_string("normal.full")); @@ -753,14 +673,7 @@ main(int argc, char **argv) * queued up as a side effect. */ while (running) { wl_display_dispatch_pending(display.display); - if(!gIsDraw) { - usleep(100000); - continue; - } - else - { - redraw(&window, NULL, 0); - } + redraw(&window, NULL, 0); } HMI_DEBUG("simple-egl","simple-egl exiting! "); -- cgit 1.2.3-korg