[Bf-blender-cvs] [6b6428fcbcc] master: Cleanup: Move (edit)mesh_tangent.c to C++

Lukas Stockner noreply at git.blender.org
Wed Sep 7 01:01:05 CEST 2022


Commit: 6b6428fcbcc7b210e6d3dcf51df9c6de3070a9db
Author: Lukas Stockner
Date:   Sat Sep 3 16:35:24 2022 +0200
Branches: master
https://developer.blender.org/rB6b6428fcbcc7b210e6d3dcf51df9c6de3070a9db

Cleanup: Move (edit)mesh_tangent.c to C++

This changes the two tangent-related files in BKE to C++ in preparation for the C++ Mikktspace port in D15589.
For now, they still use the original Mikktspace.

Differential Revision: https://developer.blender.org/D15636

===================================================================

M	source/blender/blenkernel/CMakeLists.txt
R089	source/blender/blenkernel/intern/editmesh_tangent.c	source/blender/blenkernel/intern/editmesh_tangent.cc
R087	source/blender/blenkernel/intern/mesh_tangent.c	source/blender/blenkernel/intern/mesh_tangent.cc

===================================================================

diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 61549a66e1f..9521da8417e 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -128,7 +128,7 @@ set(SRC
   intern/editmesh.c
   intern/editmesh_bvh.c
   intern/editmesh_cache.cc
-  intern/editmesh_tangent.c
+  intern/editmesh_tangent.cc
   intern/effect.c
   intern/fcurve.c
   intern/fcurve_cache.c
@@ -211,7 +211,7 @@ set(SRC
   intern/mesh_remesh_voxel.cc
   intern/mesh_runtime.cc
   intern/mesh_sample.cc
-  intern/mesh_tangent.c
+  intern/mesh_tangent.cc
   intern/mesh_tessellate.cc
   intern/mesh_validate.cc
   intern/mesh_wrapper.cc
diff --git a/source/blender/blenkernel/intern/editmesh_tangent.c b/source/blender/blenkernel/intern/editmesh_tangent.cc
similarity index 89%
rename from source/blender/blenkernel/intern/editmesh_tangent.c
rename to source/blender/blenkernel/intern/editmesh_tangent.cc
index ec608f79e66..5a01f64826d 100644
--- a/source/blender/blenkernel/intern/editmesh_tangent.c
+++ b/source/blender/blenkernel/intern/editmesh_tangent.cc
@@ -29,7 +29,7 @@
 /* Necessary complexity to handle looptri's as quads for correct tangents */
 #define USE_LOOPTRI_DETECT_QUADS
 
-typedef struct {
+struct SGLSLEditMeshToTangent {
   const float (*precomputedFaceNormals)[3];
   const float (*precomputedLoopNormals)[3];
   const BMLoop *(*looptris)[3];
@@ -44,8 +44,7 @@ typedef struct {
   const int *face_as_quad_map;
   int num_face_as_quad_map;
 #endif
-
-} SGLSLEditMeshToTangent;
+};
 
 #ifdef USE_LOOPTRI_DETECT_QUADS
 /* seems weak but only used on quads */
@@ -61,7 +60,7 @@ static const BMLoop *bm_loop_at_face_index(const BMFace *f, int vert_index)
 
 static int emdm_ts_GetNumFaces(const SMikkTSpaceContext *pContext)
 {
-  SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+  SGLSLEditMeshToTangent *pMesh = static_cast<SGLSLEditMeshToTangent *>(pContext->m_pUserData);
 
 #ifdef USE_LOOPTRI_DETECT_QUADS
   return pMesh->num_face_as_quad_map;
@@ -73,7 +72,7 @@ static int emdm_ts_GetNumFaces(const SMikkTSpaceContext *pContext)
 static int emdm_ts_GetNumVertsOfFace(const SMikkTSpaceContext *pContext, const int face_num)
 {
 #ifdef USE_LOOPTRI_DETECT_QUADS
-  SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+  SGLSLEditMeshToTangent *pMesh = static_cast<SGLSLEditMeshToTangent *>(pContext->m_pUserData);
   if (pMesh->face_as_quad_map) {
     const BMLoop **lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
     if (lt[0]->f->len == 4) {
@@ -93,7 +92,7 @@ static void emdm_ts_GetPosition(const SMikkTSpaceContext *pContext,
                                 const int vert_index)
 {
   // BLI_assert(vert_index >= 0 && vert_index < 4);
-  SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+  SGLSLEditMeshToTangent *pMesh = static_cast<SGLSLEditMeshToTangent *>(pContext->m_pUserData);
   const BMLoop **lt;
   const BMLoop *l;
 
@@ -127,7 +126,7 @@ static void emdm_ts_GetTextureCoordinate(const SMikkTSpaceContext *pContext,
                                          const int vert_index)
 {
   // BLI_assert(vert_index >= 0 && vert_index < 4);
-  SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+  SGLSLEditMeshToTangent *pMesh = static_cast<SGLSLEditMeshToTangent *>(pContext->m_pUserData);
   const BMLoop **lt;
   const BMLoop *l;
 
@@ -150,7 +149,7 @@ static void emdm_ts_GetTextureCoordinate(const SMikkTSpaceContext *pContext,
 
 finally:
   if (pMesh->cd_loop_uv_offset != -1) {
-    const float *uv = BM_ELEM_CD_GET_VOID_P(l, pMesh->cd_loop_uv_offset);
+    const float *uv = BM_ELEM_CD_GET_FLOAT_P(l, pMesh->cd_loop_uv_offset);
     copy_v2_v2(r_uv, uv);
   }
   else {
@@ -165,7 +164,7 @@ static void emdm_ts_GetNormal(const SMikkTSpaceContext *pContext,
                               const int vert_index)
 {
   // BLI_assert(vert_index >= 0 && vert_index < 4);
-  SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+  SGLSLEditMeshToTangent *pMesh = static_cast<SGLSLEditMeshToTangent *>(pContext->m_pUserData);
   const BMLoop **lt;
   const BMLoop *l;
 
@@ -210,7 +209,7 @@ static void emdm_ts_SetTSpace(const SMikkTSpaceContext *pContext,
                               const int vert_index)
 {
   // BLI_assert(vert_index >= 0 && vert_index < 4);
-  SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+  SGLSLEditMeshToTangent *pMesh = static_cast<SGLSLEditMeshToTangent *>(pContext->m_pUserData);
   const BMLoop **lt;
   const BMLoop *l;
 
@@ -241,11 +240,11 @@ finally:
 
 static void emDM_calc_loop_tangents_thread(TaskPool *__restrict UNUSED(pool), void *taskdata)
 {
-  struct SGLSLEditMeshToTangent *mesh2tangent = taskdata;
+  SGLSLEditMeshToTangent *mesh2tangent = static_cast<SGLSLEditMeshToTangent *>(taskdata);
   /* new computation method */
   {
-    SMikkTSpaceContext sContext = {NULL};
-    SMikkTSpaceInterface sInterface = {NULL};
+    SMikkTSpaceContext sContext{};
+    SMikkTSpaceInterface sInterface{};
     sContext.m_pUserData = mesh2tangent;
     sContext.m_pInterface = &sInterface;
     sInterface.m_getNumFaces = emdm_ts_GetNumFaces;
@@ -254,6 +253,7 @@ static void emDM_calc_loop_tangents_thread(TaskPool *__restrict UNUSED(pool), vo
     sInterface.m_getTexCoord = emdm_ts_GetTextureCoordinate;
     sInterface.m_getNormal = emdm_ts_GetNormal;
     sInterface.m_setTSpaceBasic = emdm_ts_SetTSpace;
+    sInterface.m_setTSpace = nullptr;
     /* 0 if failed */
     genTangSpaceDefault(&sContext);
   }
@@ -304,7 +304,7 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
     if ((tangent_mask & DM_TANGENT_MASK_ORCO) &&
         CustomData_get_named_layer_index(loopdata_out, CD_TANGENT, "") == -1) {
       CustomData_add_layer_named(
-          loopdata_out, CD_TANGENT, CD_SET_DEFAULT, NULL, (int)loopdata_out_len, "");
+          loopdata_out, CD_TANGENT, CD_SET_DEFAULT, nullptr, (int)loopdata_out_len, "");
     }
     if (calc_act && act_uv_name[0]) {
       BKE_mesh_add_loop_tangent_named_layer_for_uv(
@@ -317,14 +317,14 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
     int totface = em->tottri;
 #ifdef USE_LOOPTRI_DETECT_QUADS
     int num_face_as_quad_map;
-    int *face_as_quad_map = NULL;
+    int *face_as_quad_map = nullptr;
 
     /* map faces to quads */
     if (em->tottri != bm->totface) {
       /* Over allocate, since we don't know how many ngon or quads we have. */
 
       /* map fake face index to looptri */
-      face_as_quad_map = MEM_mallocN(sizeof(int) * totface, __func__);
+      face_as_quad_map = static_cast<int *>(MEM_mallocN(sizeof(int) * totface, __func__));
       int i, j;
       for (i = 0, j = 0; j < totface; i++, j++) {
         face_as_quad_map[i] = j;
@@ -342,7 +342,7 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
     /* Calculation */
     if (em->tottri != 0) {
       TaskPool *task_pool;
-      task_pool = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH);
+      task_pool = BLI_task_pool_create(nullptr, TASK_PRIORITY_HIGH);
 
       tangent_mask_curr = 0;
       /* Calculate tangent layers */
@@ -392,10 +392,11 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
         }
         BM_mesh_elem_index_ensure(bm, htype_index);
 
-        mesh2tangent->looptris = (const BMLoop *(*)[3])em->looptris;
-        mesh2tangent->tangent = loopdata_out->layers[index].data;
+        mesh2tangent->looptris = (const BMLoop *(*)[3])(em->looptris);
+        mesh2tangent->tangent = static_cast<float(*)[4]>(loopdata_out->layers[index].data);
 
-        BLI_task_pool_push(task_pool, emDM_calc_loop_tangents_thread, mesh2tangent, false, NULL);
+        BLI_task_pool_push(
+            task_pool, emDM_calc_loop_tangents_thread, mesh2tangent, false, nullptr);
       }
 
       BLI_assert(tangent_mask_curr == tangent_mask);
diff --git a/source/blender/blenkernel/intern/mesh_tangent.c b/source/blender/blenkernel/intern/mesh_tangent.cc
similarity index 87%
rename from source/blender/blenkernel/intern/mesh_tangent.c
rename to source/blender/blenkernel/intern/mesh_tangent.cc
index 8e3f98b9b95..4ebc6b74705 100644
--- a/source/blender/blenkernel/intern/mesh_tangent.c
+++ b/source/blender/blenkernel/intern/mesh_tangent.cc
@@ -36,7 +36,7 @@
 /* Tangent space utils. */
 
 /* User data. */
-typedef struct {
+struct BKEMeshToTangent {
   const MPoly *mpolys;     /* faces */
   const MLoop *mloops;     /* faces's vertices */
   const MVert *mverts;     /* vertices */
@@ -44,18 +44,18 @@ typedef struct {
   const float (*lnors)[3]; /* loops' normals */
   float (*tangents)[4];    /* output tangents */
   int num_polys;           /* number of polygons */
-} BKEMeshToTangent;
+};
 
 /* Mikktspace's API */
 static int get_num_faces(const SMikkTSpaceContext *pContext)
 {
-  BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+  BKEMeshToTangent *p_mesh = static_cast<BKEMeshToTangent *>(pContext->m_pUserData);
   return p_mesh->num_polys;
 }
 
 static int get_num_verts_of_face(const SMikkTSpaceContext *pContext, const int face_idx)
 {
-  BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+  BKEMeshToTangent *p_mesh = static_cast<BKEMeshToTangent *>(pContext->m_pUserData);
   return p_mesh->mpolys[face_idx].totloop;
 }
 
@@ -64,7 +64,7 @@ static void get_position(const SMikkTSpaceContext *pContext,
                          const int face_idx,
                          const int vert_idx)
 {
-  BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+  BKEMeshToTangent *p_mesh = static_cast<BKEMeshToTangent *>(pContext->m_pUserData);
   const int loop_idx = p_mesh->mpolys[face_idx].loopstart + vert_idx;
   copy_v3_v3(r_co, p_mesh->mverts[p_mesh->mloops[loop_idx].v].co);
 }
@@ -74,7 +74,7 @@ static void get_texture_coordinate(const SMikkTSpaceContext *pContext,
                                    const int face_idx,
                                    const int vert_idx)
 {
-  BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+  BKEMeshToTangent *p_mesh = static_cast<BKEMeshToTangent *>(pContext->m_pUserData);
   copy_v2_v2(r_uv, p_mesh->luvs[p_mesh->mpolys[face_idx].loopstart + vert_idx].uv);
 }
 
@@ -83,7 +83,7 @@ static void get_normal(const SMikkTSpaceContext *pContext,
            

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list