forked from enlightenment/efl
evas: Evas_3D - fix evas_3d_scene_pick when trying to get empty texcoords from mesh.
Summary: During filling evas pick public data by API evas_3d_scene_pick segfault can occur if mesh was created without texcoords. See functions - _pick_data_mesh_add, _pick_data_texcoord_update @fix Reviewers: cedric, Hermet, raster Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D1941 Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
c5c70e54fc
commit
0c4de0235c
|
@ -352,6 +352,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
|
||||
if (_pick_data_triangle_add(data, ray, &tri))
|
||||
{
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i0, i1, i2);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
@ -399,6 +400,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
i1 = ((unsigned char *)pdmesh->indices)[i + 1];
|
||||
}
|
||||
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i0, i1, i2);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
@ -439,6 +441,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
else
|
||||
i1 = ((unsigned char *)pdmesh->indices)[i];
|
||||
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i0, i1, i2);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
@ -458,6 +461,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
|
||||
if (_pick_data_triangle_add(data, ray, &tri))
|
||||
{
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i, i + 1, i + 2);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
@ -478,6 +482,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
|
||||
if (_pick_data_triangle_add(data, ray, &tri))
|
||||
{
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i, i + 1, i + 2);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
@ -497,6 +502,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
|
||||
if (_pick_data_triangle_add(data, ray, &tri))
|
||||
{
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, 0, i, i + 1);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
@ -516,6 +522,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
|
||||
if (_pick_data_triangle_add(data, ray, &tri))
|
||||
{
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i, i + 1, i + 2);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
@ -536,6 +543,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
|
||||
if (_pick_data_triangle_add(data, ray, &tri))
|
||||
{
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i, i + 1, i + 2);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
@ -555,6 +563,7 @@ _pick_data_mesh_add(Evas_3D_Pick_Data *data, const Evas_Ray3 *ray,
|
|||
|
||||
if (_pick_data_triangle_add(data, ray, &tri))
|
||||
{
|
||||
if (tex0.data)
|
||||
_pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, 0, i, i + 1);
|
||||
data->mesh = mesh;
|
||||
data->node = node;
|
||||
|
|
Loading…
Reference in New Issue