Blender
V3.3
|
#include "BLI_math.h"
#include "BLI_task.h"
#include "DNA_customdata_types.h"
#include "DNA_defs.h"
#include "DNA_meshdata_types.h"
#include "BKE_customdata.h"
#include "BKE_editmesh.h"
#include "BKE_editmesh_tangent.h"
#include "BKE_mesh.h"
#include "BKE_mesh_tangent.h"
#include "MEM_guardedalloc.h"
#include "mikktspace.h"
Go to the source code of this file.
Classes | |
struct | SGLSLEditMeshToTangent |
Tangent Space Calculation | |
#define | USE_LOOPTRI_DETECT_QUADS |
static const BMLoop * | bm_loop_at_face_index (const BMFace *f, int vert_index) |
static int | emdm_ts_GetNumFaces (const SMikkTSpaceContext *pContext) |
static int | emdm_ts_GetNumVertsOfFace (const SMikkTSpaceContext *pContext, const int face_num) |
static void | emdm_ts_GetPosition (const SMikkTSpaceContext *pContext, float r_co[3], const int face_num, const int vert_index) |
static void | emdm_ts_GetTextureCoordinate (const SMikkTSpaceContext *pContext, float r_uv[2], const int face_num, const int vert_index) |
static void | emdm_ts_GetNormal (const SMikkTSpaceContext *pContext, float r_no[3], const int face_num, const int vert_index) |
static void | emdm_ts_SetTSpace (const SMikkTSpaceContext *pContext, const float fvTangent[3], const float fSign, const int face_num, const int vert_index) |
static void | emDM_calc_loop_tangents_thread (TaskPool *__restrict UNUSED(pool), void *taskdata) |
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 *loopdata_out, const uint loopdata_out_len, short *tangent_mask_curr_p) |
#define USE_LOOPTRI_DETECT_QUADS |
Definition at line 30 of file editmesh_tangent.c.
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, | ||
uint | dm_loopdata_out_len, | ||
short * | tangent_mask_curr_p | ||
) |
Definition at line 262 of file editmesh_tangent.c.
References BKE_mesh_add_loop_tangent_named_layer_for_uv(), BKE_mesh_calc_loop_tangent_step_0(), BLI_assert, BLI_task_pool_create(), BLI_task_pool_free(), BLI_task_pool_push(), BLI_task_pool_work_and_wait(), BMEditMesh::bm, bm, BM_FACE, BM_LOOP, BM_mesh_elem_index_ensure(), BM_VERT, CD_CALLOC, SGLSLEditMeshToTangent::cd_loop_uv_offset, CD_MLOOPUV, CD_TANGENT, CustomData_add_layer_named(), CustomData_get_layer_index(), CustomData_get_layer_index_n(), CustomData_get_n_offset(), CustomData_get_named_layer_index(), CustomData_number_of_layers(), CustomData_set_layer_active_index(), CustomData_set_layer_render_index(), CustomData_update_typemap(), CustomDataLayer::data, DM_TANGENT_MASK_ORCO, emDM_calc_loop_tangents_thread(), BMLoop::f, SGLSLEditMeshToTangent::face_as_quad_map, CustomData::layers, BMesh::ldata, BMFace::len, BMEditMesh::looptris, SGLSLEditMeshToTangent::looptris, MAX_MTFACE, MAX_NAME, MEM_freeN, MEM_mallocN, CustomDataLayer::name, NULL, SGLSLEditMeshToTangent::num_face_as_quad_map, SGLSLEditMeshToTangent::numTessFaces, SGLSLEditMeshToTangent::orco, SGLSLEditMeshToTangent::precomputedFaceNormals, SGLSLEditMeshToTangent::precomputedLoopNormals, SGLSLEditMeshToTangent::tangent, task_pool, TASK_PRIORITY_HIGH, BMesh::totface, and BMEditMesh::tottri.
Referenced by blender::draw::extract_tan_init_common().
Definition at line 52 of file editmesh_tangent.c.
References BM_FACE_FIRST_LOOP, l, and BMLoop::next.
Referenced by emdm_ts_GetNormal(), emdm_ts_GetPosition(), emdm_ts_GetTextureCoordinate(), and emdm_ts_SetTSpace().
|
static |
Definition at line 242 of file editmesh_tangent.c.
References emdm_ts_GetNormal(), emdm_ts_GetNumFaces(), emdm_ts_GetNumVertsOfFace(), emdm_ts_GetPosition(), emdm_ts_GetTextureCoordinate(), emdm_ts_SetTSpace(), genTangSpaceDefault(), SMikkTSpaceInterface::m_getNormal, SMikkTSpaceInterface::m_getNumFaces, SMikkTSpaceInterface::m_getNumVerticesOfFace, SMikkTSpaceInterface::m_getPosition, SMikkTSpaceInterface::m_getTexCoord, SMikkTSpaceContext::m_pInterface, SMikkTSpaceContext::m_pUserData, SMikkTSpaceInterface::m_setTSpaceBasic, and NULL.
Referenced by BKE_editmesh_loop_tangent_calc().
|
static |
Definition at line 162 of file editmesh_tangent.c.
References BM_elem_flag_test, BM_elem_index_get, BM_ELEM_SMOOTH, bm_loop_at_face_index(), copy_v3_v3(), BMLoop::f, SGLSLEditMeshToTangent::face_as_quad_map, l, SGLSLEditMeshToTangent::looptris, SMikkTSpaceContext::m_pUserData, BMVert::no, BMFace::no, SGLSLEditMeshToTangent::precomputedFaceNormals, SGLSLEditMeshToTangent::precomputedLoopNormals, and BMLoop::v.
Referenced by emDM_calc_loop_tangents_thread().
|
static |
Definition at line 62 of file editmesh_tangent.c.
References SMikkTSpaceContext::m_pUserData, SGLSLEditMeshToTangent::num_face_as_quad_map, and SGLSLEditMeshToTangent::numTessFaces.
Referenced by emDM_calc_loop_tangents_thread().
|
static |
Definition at line 73 of file editmesh_tangent.c.
References SGLSLEditMeshToTangent::face_as_quad_map, SGLSLEditMeshToTangent::looptris, SMikkTSpaceContext::m_pUserData, and UNUSED_VARS.
Referenced by emDM_calc_loop_tangents_thread().
|
static |
Definition at line 90 of file editmesh_tangent.c.
References bm_loop_at_face_index(), BMVert::co, copy_v3_v3(), SGLSLEditMeshToTangent::face_as_quad_map, l, SGLSLEditMeshToTangent::looptris, SMikkTSpaceContext::m_pUserData, and BMLoop::v.
Referenced by emDM_calc_loop_tangents_thread().
|
static |
Definition at line 124 of file editmesh_tangent.c.
References BM_ELEM_CD_GET_VOID_P, BM_elem_index_get, bm_loop_at_face_index(), SGLSLEditMeshToTangent::cd_loop_uv_offset, copy_v2_v2(), SGLSLEditMeshToTangent::face_as_quad_map, l, SGLSLEditMeshToTangent::looptris, SMikkTSpaceContext::m_pUserData, map_to_sphere(), SGLSLEditMeshToTangent::orco, and BMLoop::v.
Referenced by emDM_calc_loop_tangents_thread().
|
static |
Definition at line 206 of file editmesh_tangent.c.
References BM_elem_index_get, bm_loop_at_face_index(), copy_v3_v3(), SGLSLEditMeshToTangent::face_as_quad_map, l, SGLSLEditMeshToTangent::looptris, SMikkTSpaceContext::m_pUserData, and SGLSLEditMeshToTangent::tangent.
Referenced by emDM_calc_loop_tangents_thread().