[Bf-blender-cvs] [e1482841dd5] blender2.8: Merge branch 'master' into blender2.8

Alexander Romanov noreply at git.blender.org
Mon Jul 3 19:16:44 CEST 2017


Commit: e1482841dd5dd55cb453d37d115ec80f44c02316
Author: Alexander Romanov
Date:   Mon Jul 3 19:49:35 2017 +0300
Branches: blender2.8
https://developer.blender.org/rBe1482841dd5dd55cb453d37d115ec80f44c02316

Merge branch 'master' into blender2.8

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



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

diff --cc source/blender/blenkernel/BKE_DerivedMesh.h
index 116724463ca,63ff1149a68..78c2efcc8a2
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@@ -767,7 -788,16 +767,11 @@@ void DM_draw_attrib_vertex_uniforms(con
  void DM_calc_tangents_names_from_gpu(
          const struct GPUVertexAttribs *gattribs,
          char (*tangent_names)[MAX_NAME], int *tangent_names_count);
 +
+ void DM_add_named_tangent_layer_for_uv(
+         CustomData *uv_data, CustomData *tan_data, int numLoopData,
+         const char *layer_name);
+ 
 -#define DM_TANGENT_MASK_ORCO (1 << 9)
 -void DM_calc_loop_tangents_step_0(
 -        const CustomData *loopData, bool calc_active_tangent,
 -        const char (*tangent_names)[MAX_NAME], int tangent_names_count,
 -        bool *rcalc_act, bool *rcalc_ren, int *ract_uv_n, int *rren_uv_n,
 -        char *ract_uv_name, char *rren_uv_name, short *rtangent_mask);
  void DM_calc_loop_tangents(
          DerivedMesh *dm, bool calc_active_tangent, const char (*tangent_names)[MAX_NAME],
          int tangent_names_count);
diff --cc source/blender/blenkernel/BKE_editmesh_tangent.h
index 7d6839a4e6a,00000000000..9553fbc1a5c
mode 100644,000000..100644
--- a/source/blender/blenkernel/BKE_editmesh_tangent.h
+++ b/source/blender/blenkernel/BKE_editmesh_tangent.h
@@@ -1,40 -1,0 +1,40 @@@
 +/*
 + * ***** BEGIN GPL LICENSE BLOCK *****
 + *
 + * 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.
 + *
 + * Contributor(s): Joseph Eagar.
 + *
 + * ***** END GPL LICENSE BLOCK *****
 + */
 +
 +#ifndef __BKE_EDITMESH_TANGENT_H__
 +#define __BKE_EDITMESH_TANGENT_H__
 +
 +/** \file BKE_editmesh_tangent.h
 + *  \ingroup bke
 + */
 +
 +void BKE_editmesh_loop_tangent_calc(
 +        BMEditMesh *em, bool calc_active_tangent,
 +        const char (*tangent_names)[MAX_NAME], int tangent_names_len,
 +        const float (*poly_normals)[3],
 +        const float (*loop_normals)[3],
 +        const float (*vert_orco)[3],
 +        CustomData *dm_loopdata_out,
 +        const uint dm_loopdata_out_len,
-         char *tangent_mask_curr_p);
++        short *tangent_mask_curr_p);
 +
 +#endif /* __BKE_EDITMESH_TANGENT_H__ */
diff --cc source/blender/blenkernel/BKE_mesh_tangent.h
index 66b8a26e35b,00000000000..cb3100c1c2f
mode 100644,000000..100644
--- a/source/blender/blenkernel/BKE_mesh_tangent.h
+++ b/source/blender/blenkernel/BKE_mesh_tangent.h
@@@ -1,59 -1,0 +1,61 @@@
 +/*
 + * ***** BEGIN GPL LICENSE BLOCK *****
 + *
 + * 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.
 + *
 + * ***** END GPL LICENSE BLOCK *****
 + */
 +#ifndef __BKE_MESH_TANGENT_H__
 +#define __BKE_MESH_TANGENT_H__
 +
 +void BKE_mesh_calc_loop_tangent_single_ex(
 +        const struct MVert *mverts, const int numVerts, const struct MLoop *mloops,
 +        float (*r_looptangent)[4], float (*loopnors)[3], const struct MLoopUV *loopuv,
 +        const int numLoops, const struct MPoly *mpolys, const int numPolys,
 +        struct ReportList *reports);
 +void BKE_mesh_calc_loop_tangent_single(
 +        struct Mesh *mesh, const char *uvmap, float (*r_looptangents)[4], struct ReportList *reports);
 +
 +void BKE_mesh_calc_loop_tangent_ex(
 +        const struct MVert *mvert,
 +        const struct MPoly *mpoly, const uint mpoly_len,
 +        const struct MLoop *mloop,
 +        const struct MLoopTri *looptri, const uint looptri_len,
 +
 +        struct CustomData *loopdata,
 +        bool calc_active_tangent,
 +        const char (*tangent_names)[64], int tangent_names_len,
 +        const float (*poly_normals)[3],
 +        const float (*loop_normals)[3],
 +        const float (*vert_orco)[3],
 +        /* result */
 +        struct CustomData *loopdata_out,
 +        const uint  loopdata_out_len,
-         char *tangent_mask_curr_p);
++        short *tangent_mask_curr_p);
 +
 +/* Helpers */
 +void BKE_mesh_add_loop_tangent_named_layer_for_uv(
 +        struct CustomData *uv_data, struct CustomData *tan_data, int numLoopData,
 +        const char *layer_name);
++
++#define DM_TANGENT_MASK_ORCO (1 << 9)
 +void BKE_mesh_calc_loop_tangent_step_0(
 +        const struct CustomData *loopData, bool calc_active_tangent,
 +        const char (*tangent_names)[64], int tangent_names_count,
 +        bool *rcalc_act, bool *rcalc_ren, int *ract_uv_n, int *rren_uv_n,
-         char *ract_uv_name, char *rren_uv_name, char *rtangent_mask);
++        char *ract_uv_name, char *rren_uv_name, short *rtangent_mask);
 +
 +#endif /* __BKE_MESH_TANGENT_H__ */
 +
diff --cc source/blender/blenkernel/intern/DerivedMesh.c
index 55d5f6f89a1,7eea8224ba1..aea2ad0cd9e
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@@ -3054,30 -3278,248 +3054,39 @@@ void DM_calc_tangents_names_from_gpu
  	*r_tangent_names_count = count;
  }
  
 -static void DM_calc_loop_tangents_thread(TaskPool * __restrict UNUSED(pool), void *taskdata, int UNUSED(threadid))
 -{
 -	struct SGLSLMeshToTangent *mesh2tangent = taskdata;
 -	/* new computation method */
 -	{
 -		SMikkTSpaceContext sContext = {NULL};
 -		SMikkTSpaceInterface sInterface = {NULL};
 -
 -		sContext.m_pUserData = mesh2tangent;
 -		sContext.m_pInterface = &sInterface;
 -		sInterface.m_getNumFaces = dm_ts_GetNumFaces;
 -		sInterface.m_getNumVerticesOfFace = dm_ts_GetNumVertsOfFace;
 -		sInterface.m_getPosition = dm_ts_GetPosition;
 -		sInterface.m_getTexCoord = dm_ts_GetTextureCoordinate;
 -		sInterface.m_getNormal = dm_ts_GetNormal;
 -		sInterface.m_setTSpaceBasic = dm_ts_SetTSpace;
 -
 -		/* 0 if failed */
 -		genTangSpaceDefault(&sContext);
 -	}
 -}
 -
+ void DM_add_named_tangent_layer_for_uv(
+         CustomData *uv_data, CustomData *tan_data, int numLoopData,
+         const char *layer_name)
+ {
+ 	if (CustomData_get_named_layer_index(tan_data, CD_TANGENT, layer_name) == -1 &&
+ 	    CustomData_get_named_layer_index(uv_data, CD_MLOOPUV, layer_name) != -1)
+ 	{
+ 		CustomData_add_layer_named(
+ 		        tan_data, CD_TANGENT, CD_CALLOC, NULL,
+ 		        numLoopData, layer_name);
+ 	}
+ }
+ 
 -/**
 - * Here we get some useful information such as active uv layer name and search if it is already in tangent_names.
 - * Also, we calculate tangent_mask that works as a descriptor of tangents state.
 - * If tangent_mask has changed, then recalculate tangents.
 - */
 -void DM_calc_loop_tangents_step_0(
 -        const CustomData *loopData, bool calc_active_tangent,
 -        const char (*tangent_names)[MAX_NAME], int tangent_names_count,
 -        bool *rcalc_act, bool *rcalc_ren, int *ract_uv_n, int *rren_uv_n,
 -        char *ract_uv_name, char *rren_uv_name, short *rtangent_mask)
 -{
 -	/* Active uv in viewport */
 -	int layer_index = CustomData_get_layer_index(loopData, CD_MLOOPUV);
 -	*ract_uv_n = CustomData_get_active_layer(loopData, CD_MLOOPUV);
 -	ract_uv_name[0] = 0;
 -	if (*ract_uv_n != -1) {
 -		strcpy(ract_uv_name, loopData->layers[*ract_uv_n + layer_index].name);
 -	}
 -
 -	/* Active tangent in render */
 -	*rren_uv_n = CustomData_get_render_layer(loopData, CD_MLOOPUV);
 -	rren_uv_name[0] = 0;
 -	if (*rren_uv_n != -1) {
 -		strcpy(rren_uv_name, loopData->layers[*rren_uv_n + layer_index].name);
 -	}
 -
 -	/* If active tangent not in tangent_names we take it into account */
 -	*rcalc_act = false;
 -	*rcalc_ren = false;
 -	for (int i = 0; i < tangent_names_count; i++) {
 -		if (tangent_names[i][0] == 0) {
 -			calc_active_tangent = true;
 -		}
 -	}
 -	if (calc_active_tangent) {
 -		*rcalc_act = true;
 -		*rcalc_ren = true;
 -		for (int i = 0; i < tangent_names_count; i++) {
 -			if (STREQ(ract_uv_name, tangent_names[i]))
 -				*rcalc_act = false;
 -			if (STREQ(rren_uv_name, tangent_names[i]))
 -				*rcalc_ren = false;
 -		}
 -	}
 -	*rtangent_mask = 0;
 -
 -	const int uv_layer_num = CustomData_number_of_layers(loopData, CD_MLOOPUV);
 -	for (int n = 0; n < uv_layer_num; n++) {
 -		const char *name = CustomData_get_layer_name(loopData, CD_MLOOPUV, n);
 -		bool add = false;
 -		for (int i = 0; i < tangent_names_count; i++) {
 -			if (tangent_names[i][0] && STREQ(tangent_names[i], name)) {
 -				add = true;
 -				break;
 -			}
 -		}
 -		if ((*rcalc_act && ract_uv_name[0] && STREQ(ract_uv_name, name)) ||
 -		    (*rcalc_ren && rren_uv_name[0] && STREQ(rren_uv_name, name)))
 -		{
 -			add = true;
 -		}
 -		if (add)
 -			*rtangent_mask |= 1 << n;
 -	}
 -
 -	if (uv_layer_num == 0)
 -		*rtangent_mask |= DM_TANGENT_MASK_ORCO;
 -}
 -
  void DM_calc_loop_tangents(
          DerivedMesh *dm, bool calc_active_tangent,
 -        const char (*tangent_names)[MAX_NAME], int tangent_names_count)
 -{
 -	int act_uv_n = -1;
 -	int ren_uv_n = -1;
 -	bool calc_act = false;
 -	bool calc_ren = false;
 -	char act_uv_name[MAX_NAME];
 -	char ren_uv_name[MAX_NAME];
 -	short tangent_mask = 0;
 -	DM_calc_loop_tangents_step_0(
 -	        &dm->loopData

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list