2018-06-05 15:59:53 +02:00
|
|
|
/*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*
|
|
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
#ifndef __BKE_MESH_RUNTIME_H__
|
|
|
|
#define __BKE_MESH_RUNTIME_H__
|
|
|
|
|
2019-02-17 22:08:12 +01:00
|
|
|
/** \file
|
|
|
|
* \ingroup bke
|
2018-06-05 15:59:53 +02:00
|
|
|
*
|
|
|
|
* This file contains access functions for the Mesh.runtime struct.
|
|
|
|
*/
|
|
|
|
|
Refactor CDData masks, to have one mask per mesh elem type.
We already have different storages for cddata of verts, edges etc.,
'simply' do the same for the mask flags we use all around Blender code
to request some data, or limit some operation to some layers, etc.
Reason we need this is that some cddata types (like Normals) are
actually shared between verts/polys/loops, and we don’t want to generate
clnors everytime we request vnors!
As a side note, this also does final fix to T59338, which was the
trigger for this patch (need to request computed loop normals for
another mesh than evaluated one).
Reviewers: brecht, campbellbarton, sergey
Differential Revision: https://developer.blender.org/D4407
2019-03-07 11:13:40 +01:00
|
|
|
//#include "BKE_customdata.h" /* for CustomDataMask */
|
2018-06-05 16:58:08 +02:00
|
|
|
|
2018-06-22 17:54:18 +02:00
|
|
|
struct CustomData;
|
Refactor CDData masks, to have one mask per mesh elem type.
We already have different storages for cddata of verts, edges etc.,
'simply' do the same for the mask flags we use all around Blender code
to request some data, or limit some operation to some layers, etc.
Reason we need this is that some cddata types (like Normals) are
actually shared between verts/polys/loops, and we don’t want to generate
clnors everytime we request vnors!
As a side note, this also does final fix to T59338, which was the
trigger for this patch (need to request computed loop normals for
another mesh than evaluated one).
Reviewers: brecht, campbellbarton, sergey
Differential Revision: https://developer.blender.org/D4407
2019-03-07 11:13:40 +01:00
|
|
|
struct CustomData_MeshMasks;
|
2018-06-05 16:58:08 +02:00
|
|
|
struct Depsgraph;
|
2018-06-21 18:24:32 +02:00
|
|
|
struct KeyBlock;
|
2018-06-05 15:59:53 +02:00
|
|
|
struct MLoop;
|
|
|
|
struct MLoopTri;
|
|
|
|
struct MVertTri;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct Mesh;
|
2018-06-05 16:58:08 +02:00
|
|
|
struct Object;
|
|
|
|
struct Scene;
|
|
|
|
|
2018-06-05 15:59:53 +02:00
|
|
|
void BKE_mesh_runtime_reset(struct Mesh *mesh);
|
2019-02-13 14:29:27 +01:00
|
|
|
void BKE_mesh_runtime_reset_on_copy(struct Mesh *mesh, const int flag);
|
2018-06-05 15:59:53 +02:00
|
|
|
int BKE_mesh_runtime_looptri_len(const struct Mesh *mesh);
|
|
|
|
void BKE_mesh_runtime_looptri_recalc(struct Mesh *mesh);
|
|
|
|
const struct MLoopTri *BKE_mesh_runtime_looptri_ensure(struct Mesh *mesh);
|
|
|
|
bool BKE_mesh_runtime_ensure_edit_data(struct Mesh *mesh);
|
|
|
|
bool BKE_mesh_runtime_clear_edit_data(struct Mesh *mesh);
|
|
|
|
void BKE_mesh_runtime_clear_geometry(struct Mesh *mesh);
|
|
|
|
void BKE_mesh_runtime_clear_cache(struct Mesh *mesh);
|
|
|
|
|
2019-04-17 06:17:24 +02:00
|
|
|
void BKE_mesh_runtime_verttri_from_looptri(struct MVertTri *r_verttri,
|
|
|
|
const struct MLoop *mloop,
|
|
|
|
const struct MLoopTri *looptri,
|
|
|
|
int looptri_num);
|
2018-06-05 15:59:53 +02:00
|
|
|
|
2018-06-05 16:58:08 +02:00
|
|
|
/* NOTE: the functions below are defined in DerivedMesh.c, and are intended to be moved
|
2018-08-21 12:52:41 +02:00
|
|
|
* to a more suitable location when that file is removed.
|
|
|
|
* They should also be renamed to use conventions from BKE, not old DerivedMesh.c.
|
|
|
|
* For now keep the names similar to avoid confusion. */
|
2019-04-17 06:17:24 +02:00
|
|
|
struct Mesh *mesh_get_eval_final(struct Depsgraph *depsgraph,
|
|
|
|
struct Scene *scene,
|
|
|
|
struct Object *ob,
|
|
|
|
const struct CustomData_MeshMasks *dataMask);
|
|
|
|
|
|
|
|
struct Mesh *mesh_get_eval_deform(struct Depsgraph *depsgraph,
|
|
|
|
struct Scene *scene,
|
|
|
|
struct Object *ob,
|
|
|
|
const struct CustomData_MeshMasks *dataMask);
|
|
|
|
|
|
|
|
struct Mesh *mesh_create_eval_final_render(struct Depsgraph *depsgraph,
|
|
|
|
struct Scene *scene,
|
|
|
|
struct Object *ob,
|
|
|
|
const struct CustomData_MeshMasks *dataMask);
|
|
|
|
|
|
|
|
struct Mesh *mesh_create_eval_final_index_render(struct Depsgraph *depsgraph,
|
|
|
|
struct Scene *scene,
|
|
|
|
struct Object *ob,
|
|
|
|
const struct CustomData_MeshMasks *dataMask,
|
|
|
|
int index);
|
|
|
|
|
|
|
|
struct Mesh *mesh_create_eval_final_view(struct Depsgraph *depsgraph,
|
|
|
|
struct Scene *scene,
|
|
|
|
struct Object *ob,
|
|
|
|
const struct CustomData_MeshMasks *dataMask);
|
|
|
|
|
|
|
|
struct Mesh *mesh_create_eval_no_deform(struct Depsgraph *depsgraph,
|
|
|
|
struct Scene *scene,
|
|
|
|
struct Object *ob,
|
|
|
|
const struct CustomData_MeshMasks *dataMask);
|
|
|
|
struct Mesh *mesh_create_eval_no_deform_render(struct Depsgraph *depsgraph,
|
|
|
|
struct Scene *scene,
|
|
|
|
struct Object *ob,
|
|
|
|
const struct CustomData_MeshMasks *dataMask);
|
|
|
|
|
|
|
|
void BKE_mesh_runtime_eval_to_meshkey(struct Mesh *me_deformed,
|
|
|
|
struct Mesh *me,
|
|
|
|
struct KeyBlock *kb);
|
2018-06-25 13:03:56 +02:00
|
|
|
|
2018-06-22 17:54:18 +02:00
|
|
|
#ifndef NDEBUG
|
|
|
|
char *BKE_mesh_runtime_debug_info(struct Mesh *me_eval);
|
|
|
|
void BKE_mesh_runtime_debug_print(struct Mesh *me_eval);
|
|
|
|
void BKE_mesh_runtime_debug_print_cdlayers(struct CustomData *data);
|
|
|
|
bool BKE_mesh_runtime_is_valid(struct Mesh *me_eval);
|
2019-04-17 06:17:24 +02:00
|
|
|
#endif /* NDEBUG */
|
2018-06-21 18:24:32 +02:00
|
|
|
|
2018-06-05 15:59:53 +02:00
|
|
|
#endif /* __BKE_MESH_RUNTIME_H__ */
|