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); }