[Bf-blender-cvs] [d8bf5c13784] blender2.8: Cleanup: use struct for custom-data offsets
Campbell Barton
noreply at git.blender.org
Mon May 8 05:00:57 CEST 2017
Commit: d8bf5c1378412d6b8b3b8c405a1cbd9f523d4ee2
Author: Campbell Barton
Date: Mon May 8 12:57:38 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBd8bf5c1378412d6b8b3b8c405a1cbd9f523d4ee2
Cleanup: use struct for custom-data offsets
===================================================================
M source/blender/draw/intern/draw_cache_impl_mesh.c
===================================================================
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 54ab262b2c6..bd2d933f34a 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -147,11 +147,14 @@ typedef struct MeshRenderData {
int vcol_active;
int tangent_active;
- int crease_ofs;
- int bweight_ofs;
- int *uv_ofs;
- int *vcol_ofs;
- int *tangent_ofs;
+ /* Custom-data offsets (only needed for BMesh access) */
+ struct {
+ int crease;
+ int bweight;
+ int *uv;
+ int *vcol;
+ int *tangent;
+ } cd_offset;
char (*auto_names)[32];
char (*uv_names)[32];
@@ -251,8 +254,8 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, const int types)
rdata->efa_act = BM_mesh_active_face_get(bm, false, true);
rdata->eed_act = BM_mesh_active_edge_get(bm);
rdata->eve_act = BM_mesh_active_vert_get(bm);
- rdata->crease_ofs = CustomData_get_offset(&bm->edata, CD_CREASE);
- rdata->bweight_ofs = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
+ rdata->cd_offset.crease = CustomData_get_offset(&bm->edata, CD_CREASE);
+ rdata->cd_offset.bweight = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
}
if (types & (MR_DATATYPE_DVERT)) {
bm_ensure_types |= BM_VERT;
@@ -342,9 +345,9 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, const int types)
rdata->vcol_names = MEM_mallocN(sizeof(*rdata->vcol_names) * rdata->vcol_len, "rdata->vcol_names");
rdata->tangent_names = MEM_mallocN(sizeof(*rdata->tangent_names) * rdata->uv_len, "rdata->tangent_names");
- rdata->uv_ofs = MEM_mallocN(sizeof(*rdata->uv_ofs) * rdata->uv_len, "rdata->uv_ofs");
- rdata->vcol_ofs = MEM_mallocN(sizeof(*rdata->vcol_ofs) * rdata->vcol_len, "rdata->vcol_ofs");
- rdata->tangent_ofs = MEM_mallocN(sizeof(*rdata->tangent_ofs) * rdata->uv_len, "rdata->tangent_ofs");
+ rdata->cd_offset.uv = MEM_mallocN(sizeof(*rdata->cd_offset.uv) * rdata->uv_len, "rdata->uv_ofs");
+ rdata->cd_offset.vcol = MEM_mallocN(sizeof(*rdata->cd_offset.vcol) * rdata->vcol_len, "rdata->vcol_ofs");
+ rdata->cd_offset.tangent = MEM_mallocN(sizeof(*rdata->cd_offset.tangent) * rdata->uv_len, "rdata->tangent_ofs");
/* Allocate max */
rdata->auto_vcol = MEM_callocN(
@@ -365,7 +368,7 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, const int types)
BLI_snprintf(rdata->vcol_names[i], sizeof(*rdata->vcol_names), "c%u", hash);
rdata->mloopcol[i] = CustomData_get_layer_n(&me->ldata, CD_MLOOPCOL, i);
if (rdata->edit_bmesh) {
- rdata->vcol_ofs[i] = CustomData_get_n_offset(&rdata->edit_bmesh->bm->ldata, CD_MLOOPCOL, i);
+ rdata->cd_offset.vcol[i] = CustomData_get_n_offset(&rdata->edit_bmesh->bm->ldata, CD_MLOOPCOL, i);
}
/* Gather number of auto layers. */
@@ -387,7 +390,7 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, const int types)
BLI_snprintf(rdata->uv_names[i], sizeof(*rdata->uv_names), "u%u", hash);
rdata->mloopuv[i] = CustomData_get_layer_n(&me->ldata, CD_MLOOPUV, i);
if (rdata->edit_bmesh) {
- rdata->uv_ofs[i] = CustomData_get_n_offset(&rdata->edit_bmesh->bm->ldata, CD_MLOOPUV, i);
+ rdata->cd_offset.uv[i] = CustomData_get_n_offset(&rdata->edit_bmesh->bm->ldata, CD_MLOOPUV, i);
}
BLI_snprintf(rdata->auto_names[i], sizeof(*rdata->auto_names), "a%u", hash);
}
@@ -411,7 +414,7 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, const int types)
rdata->tangent_ofs[i] = CustomData_get_n_offset(&bm->ldata, CD_MLOOPTANGENT, i);
#else
- rdata->tangent_ofs[i] = -1;
+ rdata->cd_offset.tangent[i] = -1;
#endif
}
else {
@@ -470,9 +473,9 @@ static void mesh_render_data_free(MeshRenderData *rdata)
{
MEM_SAFE_FREE(rdata->auto_vcol);
MEM_SAFE_FREE(rdata->auto_names);
- MEM_SAFE_FREE(rdata->uv_ofs);
- MEM_SAFE_FREE(rdata->vcol_ofs);
- MEM_SAFE_FREE(rdata->tangent_ofs);
+ MEM_SAFE_FREE(rdata->cd_offset.uv);
+ MEM_SAFE_FREE(rdata->cd_offset.vcol);
+ MEM_SAFE_FREE(rdata->cd_offset.tangent);
MEM_SAFE_FREE(rdata->orco);
MEM_SAFE_FREE(rdata->mloopuv);
MEM_SAFE_FREE(rdata->mloopcol);
@@ -1070,9 +1073,9 @@ static void mesh_render_data_looptri_uvs_get(
{
if (rdata->edit_bmesh) {
const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[tri_idx];
- (*r_vert_uvs)[0] = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(bm_looptri[0], rdata->uv_ofs[uv_layer]))->uv;
- (*r_vert_uvs)[1] = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(bm_looptri[1], rdata->uv_ofs[uv_layer]))->uv;
- (*r_vert_uvs)[2] = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(bm_looptri[2], rdata->uv_ofs[uv_layer]))->uv;
+ (*r_vert_uvs)[0] = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(bm_looptri[0], rdata->cd_offset.uv[uv_layer]))->uv;
+ (*r_vert_uvs)[1] = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(bm_looptri[1], rdata->cd_offset.uv[uv_layer]))->uv;
+ (*r_vert_uvs)[2] = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(bm_looptri[2], rdata->cd_offset.uv[uv_layer]))->uv;
}
else {
const MLoopTri *mlt = &rdata->mlooptri[tri_idx];
@@ -1088,9 +1091,9 @@ static void mesh_render_data_looptri_cols_get(
{
if (rdata->edit_bmesh) {
const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[tri_idx];
- (*r_vert_cols)[0] = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(bm_looptri[0], rdata->vcol_ofs[vcol_layer]))->r;
- (*r_vert_cols)[1] = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(bm_looptri[1], rdata->vcol_ofs[vcol_layer]))->r;
- (*r_vert_cols)[2] = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(bm_looptri[2], rdata->vcol_ofs[vcol_layer]))->r;
+ (*r_vert_cols)[0] = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(bm_looptri[0], rdata->cd_offset.vcol[vcol_layer]))->r;
+ (*r_vert_cols)[1] = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(bm_looptri[1], rdata->cd_offset.vcol[vcol_layer]))->r;
+ (*r_vert_cols)[2] = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(bm_looptri[2], rdata->cd_offset.vcol[vcol_layer]))->r;
}
else {
const MLoopTri *mlt = &rdata->mlooptri[tri_idx];
@@ -1107,9 +1110,9 @@ static void mesh_render_data_looptri_tans_get(
if (rdata->edit_bmesh) {
#if 0 /* waiting for edit mesh tangent calculation */
const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[tri_idx];
- (*r_vert_tans)[0] = ((float *)BM_ELEM_CD_GET_VOID_P(bm_looptri[0], rdata->tangent_ofs[tangent_layer]));
- (*r_vert_tans)[1] = ((float *)BM_ELEM_CD_GET_VOID_P(bm_looptri[1], rdata->tangent_ofs[tangent_layer]));
- (*r_vert_tans)[2] = ((float *)BM_ELEM_CD_GET_VOID_P(bm_looptri[2], rdata->tangent_ofs[tangent_layer]));
+ (*r_vert_tans)[0] = ((float *)BM_ELEM_CD_GET_VOID_P(bm_looptri[0], rdata->cd_offset.tangent[tangent_layer]));
+ (*r_vert_tans)[1] = ((float *)BM_ELEM_CD_GET_VOID_P(bm_looptri[1], rdata->cd_offset.tangent[tangent_layer]));
+ (*r_vert_tans)[2] = ((float *)BM_ELEM_CD_GET_VOID_P(bm_looptri[2], rdata->cd_offset.tangent[tangent_layer]));
#else
static float tan[4] = {0.0f};
(*r_vert_tans)[0] = tan;
@@ -1535,16 +1538,16 @@ static EdgeDrawAttr *mesh_render_data_edge_flag(MeshRenderData *rdata, const int
eattr.e_flag |= VFLAG_EDGE_SHARP;
/* Use a byte for value range */
- if (rdata->crease_ofs != -1) {
- float crease = BM_ELEM_CD_GET_FLOAT(be, rdata->crease_ofs);
+ if (rdata->cd_offset.crease != -1) {
+ float crease = BM_ELEM_CD_GET_FLOAT(be, rdata->cd_offset.crease);
if (crease > 0) {
eattr.crease = (char)(crease * 255.0f);
}
}
/* Use a byte for value range */
- if (rdata->bweight_ofs != -1) {
- float bweight = BM_ELEM_CD_GET_FLOAT(be, rdata->bweight_ofs);
+ if (rdata->cd_offset.bweight != -1) {
+ float bweight = BM_ELEM_CD_GET_FLOAT(be, rdata->cd_offset.bweight);
if (bweight > 0) {
eattr.bweight = (char)(bweight * 255.0f);
}
More information about the Bf-blender-cvs
mailing list