xdl_int XdevLWindowAndroid::init() { XdevLWindowImpl::init(); if(create() != RET_SUCCESS) { return RET_FAILED; } XDEVL_MODULE_SUCCESS("SDL window created successfully: " << m_window << std::endl); return RET_SUCCESS; }
xdl_int XdevLWindowEventServerAndroid::shutdown() { XDEVL_MODULE_SUCCESS("Shutdown process was successful.\n"); return RET_SUCCESS; }
xdl_int XdevLWindowEventServerAndroid::init() { XDEVL_MODULE_SUCCESS("Initialized successfully" << std::endl); return RET_SUCCESS; }
xdl_int XdevLWindowWayland::initializeEGL() { static const EGLint context_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; const char *extensions; EGLint config_attribs[] = { EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RED_SIZE, 1, EGL_GREEN_SIZE, 1, EGL_BLUE_SIZE, 1, EGL_ALPHA_SIZE, 1, EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, EGL_NONE }; EGLint major, minor, n, count, i, size; m_egl.m_eglDisplay = eglGetDisplay((EGLNativeDisplayType)display); if(m_egl.m_eglDisplay == EGL_NO_DISPLAY) { XDEVL_MODULE_ERROR("Can't create egl display\n"); return ERR_ERROR; } else { XDEVL_MODULE_SUCCESS("Created egl display\n"); } EGLBoolean ret = eglInitialize(m_egl.m_eglDisplay, &major, &minor); if(ret != EGL_TRUE) { XDEVL_MODULE_ERROR("Can't initialize egl display\n"); return ERR_ERROR; } ret = eglBindAPI(EGL_OPENGL_ES_API); if(ret != EGL_TRUE) { XDEVL_MODULE_ERROR("Can't bind egl API to EGL_OPENGL_ES_API\n"); return ERR_ERROR; } if(!eglGetConfigs(m_egl.m_eglDisplay, nullptr, 0, &count) || count < 1) { return ERR_ERROR; } EGLConfig* configs = new EGLConfig[count]; ret = eglChooseConfig(m_egl.m_eglDisplay, config_attribs, configs, count, &n); if(ret != EGL_TRUE) { return ERR_ERROR; } // TODO This is at the moment for only test purpose. As you can see only the first // config is used. for(i = 0; i < n; i++) { eglGetConfigAttrib(m_egl.m_eglDisplay, configs[i], EGL_BUFFER_SIZE, &size); printf("Buffer size for config %d is %d\n", i, size); // For now just use the first one. m_egl.m_eglConfig = configs[0]; } delete [] configs; // If we do not found any configs stop here. if(m_egl.m_eglConfig == nullptr) { return ERR_ERROR; } m_egl.m_eglContext = eglCreateContext(m_egl.m_eglDisplay, m_egl.m_eglConfig, EGL_NO_CONTEXT, context_attribs); if(m_egl.m_eglContext == nullptr) { return ERR_ERROR; } }
xdl_int XdevLWindowWayland::init() { XdevLWindowImpl::init(); wl_display_roundtrip(display); if(m_compositor == nullptr) { XDEVL_MODULE_ERROR("Wayland compositor object not received.\n"); return ERR_ERROR; } else { XDEVL_MODULE_SUCCESS("Received Wayland compositor object proxy\n"); } if(m_shell == nullptr) { XDEVL_MODULE_ERROR("Wayland shell object not received.\n"); return ERR_ERROR; } else { XDEVL_MODULE_SUCCESS("Received Wayland shell object proxy\n"); } if(m_sharedMemory == nullptr) { XDEVL_MODULE_ERROR("Wayland shared memory object not received.\n"); return ERR_ERROR; } else { XDEVL_MODULE_SUCCESS("Received Wayland shared memory object proxy\n"); } // // Now we create the surface we can see on the screen. // m_surface = wl_compositor_create_surface(m_compositor); if(m_surface == nullptr) { XDEVL_MODULE_ERROR("Can't create Wayland surface\n"); return ERR_ERROR; } else { XDEVL_MODULE_SUCCESS("Created surface\n"); } wl_surface_set_user_data(m_surface, this); m_shellSurface = wl_shell_get_shell_surface(m_shell, m_surface); if(m_shellSurface == nullptr) { XDEVL_MODULE_ERROR("Can't create Wayland shell surface\n"); return ERR_ERROR; } else { XDEVL_MODULE_SUCCESS("Created shell surface\n"); } wl_shell_surface_add_listener(m_shellSurface, &shell_surface_listener, this); // Bring the surface to the front. wl_shell_surface_set_toplevel(m_shellSurface); // m_frameCallback = wl_surface_frame(m_surface); // wl_callback_add_listener(m_frameCallback, &frame_listener, this); createOpaqueRegion(m_attribute.position.x, m_attribute.position.y, m_attribute.size.width, m_attribute.size.height); xdl_int ret = initializeEGL(); if(ret == ERR_ERROR) { XDEVL_MODULE_ERROR("Initializing EGL failed.\n"); return ERR_ERROR; } m_egl.m_eglWindow = wl_egl_window_create(m_surface, getWidth(), getHeight()); if(m_egl.m_eglWindow == EGL_NO_SURFACE) { XDEVL_MODULE_ERROR("Can't create egl window\n"); return ERR_ERROR; } else { XDEVL_MODULE_SUCCESS("Created egl window\n"); } m_egl.m_eglSurface = eglCreateWindowSurface(m_egl.m_eglDisplay, m_egl.m_eglConfig, m_egl.m_eglWindow, nullptr); if(!eglMakeCurrent(m_egl.m_eglDisplay, m_egl.m_eglSurface, m_egl.m_eglSurface, m_egl.m_eglContext)) { XDEVL_MODULE_ERROR("eglMakeCurrent failed\n"); } glClearColor((1.0f/255.0)*m_backgroundColor[0], (1.0f/255.0)*m_backgroundColor[1], (1.0f/255.0)*m_backgroundColor[2], (1.0f/255.0)*m_backgroundColor[3]); glClear(GL_COLOR_BUFFER_BIT); glFlush(); if(!eglSwapBuffers(m_egl.m_eglDisplay, m_egl.m_eglSurface)) { XDEVL_MODULE_ERROR("eglSwapBuffers failed\n"); } wl_display_flush(display); return ERR_OK; }