Blender  V3.3
Classes
editmesh_tangent.c File Reference
#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 BMLoopbm_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)
 

Macro Definition Documentation

◆ USE_LOOPTRI_DETECT_QUADS

#define USE_LOOPTRI_DETECT_QUADS

Definition at line 30 of file editmesh_tangent.c.

Function Documentation

◆ BKE_editmesh_loop_tangent_calc()

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 
)
See also
#BKE_mesh_calc_loop_tangent, same logic but used arrays instead of BMesh data.
Note
This function is not so normal, its using BMesh.ldata as input, but output's to Mesh.ldata. This is done because CD_TANGENT is cache data used only for drawing.

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().

◆ bm_loop_at_face_index()

static const BMLoop* bm_loop_at_face_index ( const BMFace f,
int  vert_index 
)
static

◆ emDM_calc_loop_tangents_thread()

static void emDM_calc_loop_tangents_thread ( TaskPool *__restrict   UNUSEDpool,
void taskdata 
)
static

◆ emdm_ts_GetNormal()

static void emdm_ts_GetNormal ( const SMikkTSpaceContext pContext,
float  r_no[3],
const int  face_num,
const int  vert_index 
)
static

◆ emdm_ts_GetNumFaces()

static int emdm_ts_GetNumFaces ( const SMikkTSpaceContext pContext)
static

◆ emdm_ts_GetNumVertsOfFace()

static int emdm_ts_GetNumVertsOfFace ( const SMikkTSpaceContext pContext,
const int  face_num 
)
static

◆ emdm_ts_GetPosition()

static void emdm_ts_GetPosition ( const SMikkTSpaceContext pContext,
float  r_co[3],
const int  face_num,
const int  vert_index 
)
static

◆ emdm_ts_GetTextureCoordinate()

static void emdm_ts_GetTextureCoordinate ( const SMikkTSpaceContext pContext,
float  r_uv[2],
const int  face_num,
const int  vert_index 
)
static

◆ emdm_ts_SetTSpace()

static void emdm_ts_SetTSpace ( const SMikkTSpaceContext pContext,
const float  fvTangent[3],
const float  fSign,
const int  face_num,
const int  vert_index 
)
static