From 429f6bee2845489a82983b54b6d63cc260a76387 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 24 May 2017 22:33:21 +1000 Subject: Fix T51561: Normal maps fail w/ quad + eevee Generalize derived-mesh tangent calculation so it can be used by Batch cache creation too. --- source/blender/blenkernel/BKE_mesh_tangent.h | 59 ++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 source/blender/blenkernel/BKE_mesh_tangent.h (limited to 'source/blender/blenkernel/BKE_mesh_tangent.h') diff --git a/source/blender/blenkernel/BKE_mesh_tangent.h b/source/blender/blenkernel/BKE_mesh_tangent.h new file mode 100644 index 00000000000..66b8a26e35b --- /dev/null +++ b/source/blender/blenkernel/BKE_mesh_tangent.h @@ -0,0 +1,59 @@ +/* + * ***** 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); + +/* 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); +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); + +#endif /* __BKE_MESH_TANGENT_H__ */ + -- cgit v1.2.3