zmike pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=17e60a55851c8d37ccd8cabb5757a9c0f59e2930
commit 17e60a55851c8d37ccd8cabb5757a9c0f59e2930 Author: Marcel Hollerbach <[email protected]> Date: Tue Mar 26 10:09:42 2019 -0400 evas_3d: stop just segfaulting straight away Summary: there have been wrong function calls, that did not work at all, since the function pointer had the wrong type. This fixes the segfaulting examples of evas3d. However, they still do not render, at least, they don't crash anymore. Depends on D8381 Reviewers: cedric, segfaultxavi, zmike, stefan_schmidt Reviewed By: zmike Subscribers: #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D8382 --- src/examples/evas/meson.build | 4 +++- src/examples/evas/shooter/evas-3d-shooter-header.h | 6 +++--- src/examples/evas/shooter/evas-3d-shooter.c | 5 +++++ src/examples/evas/shooter/meson.build | 5 +++++ src/lib/evas/canvas/evas_canvas3d_node.c | 1 + .../evas/engines/gl_generic/Evas_Engine_GL_Generic.h | 16 ++++++++++++++++ src/modules/evas/engines/gl_generic/evas_engine.c | 12 ++++++------ 7 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/examples/evas/meson.build b/src/examples/evas/meson.build index c07587dec6..34c8bd3463 100644 --- a/src/examples/evas/meson.build +++ b/src/examples/evas/meson.build @@ -51,7 +51,9 @@ examples = [ ] foreach example : examples - executable(example, example + '.c', + executable(example, example + '.c', dependencies: [eina, ecore_evas, ecore_file, m], c_args : ['-DPACKAGE_EXAMPLES_DIR="'+meson.current_source_dir()+'"']) endforeach + +subdir('shooter') diff --git a/src/examples/evas/shooter/evas-3d-shooter-header.h b/src/examples/evas/shooter/evas-3d-shooter-header.h index aaa6ff389c..cd30fde209 100644 --- a/src/examples/evas/shooter/evas-3d-shooter-header.h +++ b/src/examples/evas/shooter/evas-3d-shooter-header.h @@ -113,9 +113,9 @@ typedef struct _Scene_Data Eina_Bool normal; } Scene_Data; -static Evas *evas = NULL; -static Eo *background = NULL; -static Eo *image = NULL; +extern Evas *evas; +extern Eo *background; +extern Eo *image; static const vec2 tex_scale = {1, 1}; diff --git a/src/examples/evas/shooter/evas-3d-shooter.c b/src/examples/evas/shooter/evas-3d-shooter.c index 1c4deb4d7e..2dcad1db61 100644 --- a/src/examples/evas/shooter/evas-3d-shooter.c +++ b/src/examples/evas/shooter/evas-3d-shooter.c @@ -19,6 +19,11 @@ #define LOCAL_IMAGE_FOLDER PACKAGE_EXAMPLES_DIR "" EVAS_PROJECT_IMAGE_FOLDER #define LOCAL_MODEL_FOLDER PACKAGE_EXAMPLES_DIR "" EVAS_PROJECT_MODEL_FOLDER + +Evas *evas = NULL; +Eo *background = NULL; +Eo *image = NULL; + static const char *gray_brick_n_path = LOCAL_IMAGE_FOLDER "/brick-stone_n.jpg"; static const char *gray_brick_path = LOCAL_IMAGE_FOLDER "/brick-stone.jpg"; static const char *red_brick_n_path = LOCAL_IMAGE_FOLDER "/bricks_n.jpg"; diff --git a/src/examples/evas/shooter/meson.build b/src/examples/evas/shooter/meson.build new file mode 100644 index 0000000000..abb782d540 --- /dev/null +++ b/src/examples/evas/shooter/meson.build @@ -0,0 +1,5 @@ +executable('evas-3d-shooter', + ['evas-3d-shooter-header.c', 'evas-3d-shooter.c'], + dependencies: [ecore_evas], + c_args : ['-DPACKAGE_EXAMPLES_DIR="'+meson.current_source_dir()+'"'] +) diff --git a/src/lib/evas/canvas/evas_canvas3d_node.c b/src/lib/evas/canvas/evas_canvas3d_node.c index 5d78183a39..98492fa502 100644 --- a/src/lib/evas/canvas/evas_canvas3d_node.c +++ b/src/lib/evas/canvas/evas_canvas3d_node.c @@ -1048,6 +1048,7 @@ _evas_canvas3d_node_efl_object_finalize(Eo *obj, Evas_Canvas3D_Node_Data *pd) EOLIAN static Efl_Object * _evas_canvas3d_node_efl_object_constructor(Eo *obj, Evas_Canvas3D_Node_Data *pd) { + efl_constructor(efl_super(obj, MY_CLASS)); evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_NODE); eina_vector3_set(&pd->position, 0.0, 0.0, 0.0); diff --git a/src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h b/src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h index a7effafde0..56a0cf3cad 100644 --- a/src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h +++ b/src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h @@ -165,4 +165,20 @@ gl_generic_any_output_get(Render_Engine_GL_Generic *engine) return NULL; } +static inline Render_Output_GL_Generic * +gl_generic_output_find(Render_Engine_GL_Generic *engine) +{ + Render_Output_GL_Generic *output; + Eina_List *l; + + EINA_LIST_FOREACH(engine->software.outputs, l, output) + { + if (!output->software.ob) continue; + return output; + } + + return NULL; +} + + #endif diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 78d11edaca..2659498611 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -2306,7 +2306,7 @@ eng_renderer_3d_get(void *output) static void * eng_drawable_new(void *engine, int w, int h, int alpha) { - eng_context_3d_use(engine); + eng_context_3d_use(gl_generic_output_find(engine)); #ifdef GL_GLES return e3d_drawable_new(w, h, alpha, GL_DEPTH_STENCIL_OES, GL_NONE); #else @@ -2317,7 +2317,7 @@ eng_drawable_new(void *engine, int w, int h, int alpha) static void eng_drawable_free(void *engine, void *drawable) { - eng_context_3d_use(engine); + eng_context_3d_use(gl_generic_output_find(engine)); e3d_drawable_free(drawable); } @@ -2349,7 +2349,7 @@ eng_image_drawable_set(void *engine, void *image, void *drawable) } static void -eng_drawable_scene_render(void *engine EINA_UNUSED, void *data, void *drawable, void *scene_data) +eng_drawable_scene_render(void *engine, void *data, void *drawable, void *scene_data) { Evas_Engine_GL_Context *gl_context; E3D_Renderer *renderer = NULL; @@ -2357,7 +2357,7 @@ eng_drawable_scene_render(void *engine EINA_UNUSED, void *data, void *drawable, gl_context = gl_generic_context_get(data, 1); evas_gl_common_context_flush(gl_context); - eng_context_3d_use(data); + eng_context_3d_use(gl_generic_output_find(engine)); renderer = eng_renderer_3d_get(data); e3d_drawable_scene_render(drawable, renderer, scene_data); } @@ -2390,7 +2390,7 @@ eng_drawable_scene_render_to_texture(void *engine, void *drawable, void *scene_d gl_context = gl_generic_context_get(engine, 1); evas_gl_common_context_flush(gl_context); - eng_context_3d_use(engine); + eng_context_3d_use(gl_generic_output_find(engine)); renderer = eng_renderer_3d_get(engine); return e3d_drawable_scene_render_to_texture((E3D_Drawable *)drawable, renderer, scene_data); @@ -2453,7 +2453,7 @@ eng_texture_image_set(void *engine, void *texture, void *image) { Evas_Engine_GL_Context *gl_context; - gl_context = gl_generic_context_get(engine, 1); + gl_context = gl_generic_context_find(engine, 1); e3d_texture_set(gl_context, (E3D_Texture *)texture, (Evas_GL_Image *)image); } --
