forked from enlightenment/efl
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
This commit is contained in:
parent
2e545ee34e
commit
17e60a5585
|
@ -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')
|
||||
|
|
|
@ -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};
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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()+'"']
|
||||
)
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue