This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch evas-sdl3-rewrite
in repository efl.

View the commit online.

commit e1f537dfcf359364350c90ad5713d0a124dbd63a
Author: Swagtoy <[email protected]>
AuthorDate: Sun May 17 23:07:09 2026 -0400

    ecore_evas_sdl: split sw renderer creation into separate functions
    
    Signed-off-by: Swagtoy <[email protected]>
---
 .../ecore_evas/engines/sdl/ecore_evas_sdl.c        | 113 ++++++++++++++-------
 1 file changed, 76 insertions(+), 37 deletions(-)

diff --git a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
index 42c30f4caa..4c08b4069f 100644
--- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
+++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
@@ -380,11 +380,73 @@ static Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
    .fn_selection_request             = NULL,
 };
 
-static Ecore_Evas*
-_ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, Eina_Bool gl)
+static SDL_Window*
+_create_evas_sdl_window(Ecore_Evas *ee, const char *name, int w, int h)
+{
+   SDL_Window *win = SDL_CreateWindow(name, w, h, SDL_WINDOW_RESIZABLE);
+   if (!win)
+     {
+        ERR("SDL_CreateWindow failed: %s", SDL_GetError());
+        return NULL;
+     }
+   // so we later can retrieve this from the window pointer alone
+   SDL_SetPointerProperty(SDL_GetWindowProperties(win), "_Ecore_Evas", ee);
+   ee->prop.window = SDL_GetWindowID(win);
+   return win;
+}
+
+static Eina_Bool
+_ecore_evas_internal_sdl_new_gl(Ecore_Evas_SDL_Data *edata, Ecore_Evas *ee, const char *name, int rmethod, int w, int h)
+{
+   ee->can_async_render = EINA_TRUE;
+
+   return EINA_TRUE;
+
+ error:
+   return EINA_FALSE;
+}
+
+static Eina_Bool
+_ecore_evas_internal_sdl_new_soft(Ecore_Evas_SDL_Data *edata, Ecore_Evas *ee, const char *name, int rmethod, int w, int h)
+{
+   evas_output_method_set(ee->evas, rmethod);
+   ee->func.fn_post_render = _ecore_evas_sdl_post_render;
+   ee->can_async_render = EINA_FALSE;
+
+   edata->w = _create_evas_sdl_window(ee, name, w, h);
+   if (!edata->w)
+     {
+        goto error;
+     }
+
+   // XXX: error
+   SDL_Surface *surface = SDL_GetWindowSurface(edata->w);
+
+   Evas_Engine_Info_Software_SDL *einfo = (Evas_Engine_Info_Software_SDL *) evas_engine_info_get(ee->evas);
+   if (!einfo)
+     {
+        ERR("evas_engine_info_get failed.");
+        goto error;
+     }
+
+   einfo->info.format = surface->format;
+   if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *) einfo))
+     {
+        ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
+        goto error;
+     }
+
+   return EINA_TRUE;
+
+ error:
+   return EINA_FALSE;
+}
+
+static Ecore_Evas*
+_ecore_evas_internal_sdl_new(int rmethod, const char *name, int w, int h, Eina_Bool gl)
 {
-   Ecore_Evas_SDL_Data *edata;
    Ecore_Evas *ee;
+   Ecore_Evas_SDL_Data *edata;
 
    // XXX
    if (!name)
@@ -403,10 +465,7 @@ _ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, Eina_B
      return NULL;
    ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
 
-   ee->engine.data = "" = calloc(1, sizeof(Ecore_Evas_SDL_Data));
-
    ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_sdl_engine_func;
-
    ee->driver = "sdl";
    if (name) ee->name = strdup(name);
 
@@ -425,55 +484,35 @@ _ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, Eina_B
    ee->prop.withdrawn  = EINA_TRUE;
    ee->prop.sticky     = EINA_FALSE;
    ee->prop.window     = 0;
-   // TODO: probably make this only occur for the sw renderer, when GL
-   // is later implemented
-   if (gl)
-     ee->func.fn_post_render = _ecore_evas_sdl_post_render;
+
    /* init evas here */
    if (!ecore_evas_evas_new(ee, w, h))
      {
         ERR("Can not create Canvas.");
-        goto on_error;
+        goto error;
      }
-   evas_output_method_set(ee->evas, rmethod);
-   ee->can_async_render = gl ? EINA_FALSE : EINA_TRUE;
+   ee->engine.data = "" = calloc(1, sizeof(Ecore_Evas_SDL_Data));
 
-   edata->w = SDL_CreateWindow(name, w, h, SDL_WINDOW_RESIZABLE);
-   if (!edata->w)
+   if (gl)
      {
-        ERR("SDL_CreateWindow failed: %s", SDL_GetError());
-        goto on_error;
+        // TODO
+        if (!_ecore_evas_internal_sdl_new_gl(edata, ee, name, rmethod, w, h))
+          goto error;
      }
-   // XXX error
-   SDL_Surface *surface = SDL_GetWindowSurface(edata->w);
-
-   Evas_Engine_Info_Software_SDL *einfo = (Evas_Engine_Info_Software_SDL *) evas_engine_info_get(ee->evas);
-   if (!einfo)
+   else
      {
-        ERR("evas_engine_info_get failed.");
-        goto on_error;
+        if (!_ecore_evas_internal_sdl_new_soft(edata, ee, name, rmethod, w, h))
+          goto error;
      }
 
-   einfo->info.format = surface->format;
-   if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *) einfo))
-     {
-        ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
-        ecore_evas_free(ee);
-        return NULL;
-     }
-   // XXX move to new function, split out from gl
-
    _ecore_evas_sdl_init(ee, w, h);
-   ee->prop.window = SDL_GetWindowID(edata->w);
 
    ecore_evas_done(ee, EINA_FALSE);
 
-   SDL_SetPointerProperty(SDL_GetWindowProperties(edata->w), "_Ecore_Evas", ee);
-
    _ecore_evas_focus_device_set(ee, NULL, EINA_TRUE);
    return ee;
 
- on_error:
+ error:
    ecore_evas_free(ee);
    return NULL;
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to