68 const int(*idx)[3] = (int(*)[3])dlt->
dl->
index;
79 const int(*idx)[3] = (int(*)[3])dlt->
dl->
index;
81 r_uv[0] = idx[face_num][vert_index] / (
float)(dlt->
dl->
nr - 1);
97 const float fvTangent[3],
100 const int vert_index)
131 const int vert_index)
133 int u = face_num % dlt->
u_len;
134 int v = face_num / dlt->
u_len;
136 if (vert_index == 0) {
139 else if (vert_index == 1) {
143 else if (vert_index == 2) {
151 return v * dlt->
dl->
nr + u;
157 const int vert_index)
168 const int vert_index)
176 r_uv[0] = (idx / dlt->
dl->
nr) / (
float)(dlt->
v_len);
177 r_uv[1] = (idx % dlt->
dl->
nr) / (
float)(dlt->
u_len);
179 if (r_uv[0] == 0.0f &&
ELEM(vert_index, 1, 2)) {
182 if (r_uv[1] == 0.0f &&
ELEM(vert_index, 0, 1)) {
190 const int vert_index)
204 const float fvTangent[3],
207 const int vert_index)
212 float *r_tan = dlt->
tangent[face_num * 4 + vert_index];
251 .fnormals = fnormals,
254 int loop_len = mesh2tangent.
u_len * mesh2tangent.
v_len * 4;
256 if (*r_tangent ==
NULL) {
257 *r_tangent =
MEM_mallocN(
sizeof(
float[4]) * loop_len,
"displist tangents");
259 mesh2tangent.
tangent = *r_tangent;
typedef float(TangentPoint)[2]
display list (or rather multi purpose list) stuff.
MINLINE void copy_v3_v3(float r[3], const float a[3])
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert * v
static int face_to_vert_index(SGLSLDisplistToTangent *dlt, const int face_num, const int vert_index)
static void dlsurf_ts_GetNormal(const SMikkTSpaceContext *pContext, float r_no[3], const int face_num, const int vert_index)
static void dlsurf_ts_SetTSpace(const SMikkTSpaceContext *pContext, const float fvTangent[3], const float fSign, const int face_num, const int vert_index)
void BKE_displist_tangent_calc(const DispList *dl, float(*fnormals)[3], float(**r_tangent)[4])
static int dl3_ts_GetNumVertsOfFace(const SMikkTSpaceContext *pContext, const int face_num)
static int dl3_ts_GetNumFaces(const SMikkTSpaceContext *pContext)
static void dl3_ts_GetNormal(const SMikkTSpaceContext *pContext, float r_no[3], const int face_num, const int vert_index)
static void dl3_ts_GetPosition(const SMikkTSpaceContext *pContext, float r_co[3], const int face_num, const int vert_index)
static void dl3_ts_GetTextureCoordinate(const SMikkTSpaceContext *pContext, float r_uv[2], const int face_num, const int vert_index)
static void dlsurf_ts_GetTextureCoordinate(const SMikkTSpaceContext *pContext, float r_uv[2], const int face_num, const int vert_index)
static int dlsurf_ts_GetNumFaces(const SMikkTSpaceContext *pContext)
static void dl3_ts_SetTSpace(const SMikkTSpaceContext *pContext, const float fvTangent[3], const float fSign, const int face_num, const int vert_index)
static void dlsurf_ts_GetPosition(const SMikkTSpaceContext *pContext, float r_co[3], const int face_num, const int vert_index)
static int dlsurf_ts_GetNumVertsOfFace(const SMikkTSpaceContext *pContext, const int face_num)
void *(* MEM_mallocN)(size_t len, const char *str)
tbool genTangSpaceDefault(const SMikkTSpaceContext *pContext)
SMikkTSpaceInterface * m_pInterface
void(* m_getNormal)(const SMikkTSpaceContext *pContext, float fvNormOut[], const int iFace, const int iVert)
void(* m_getPosition)(const SMikkTSpaceContext *pContext, float fvPosOut[], const int iFace, const int iVert)
void(* m_getTexCoord)(const SMikkTSpaceContext *pContext, float fvTexcOut[], const int iFace, const int iVert)
void(* m_setTSpaceBasic)(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert)
int(* m_getNumFaces)(const SMikkTSpaceContext *pContext)
int(* m_getNumVerticesOfFace)(const SMikkTSpaceContext *pContext, const int iFace)