Fix editmesh GLSL tangent drawing

The generic tangent calculation relied on CDDM arrays which aren't available in edit-mode.

Add a tangent calculation callback, which has its own implementation for editmesh data.
This commit is contained in:
2015-08-24 15:14:34 +10:00
parent 4f61de6588
commit 30067b499a
9 changed files with 250 additions and 105 deletions

View File

@@ -375,7 +375,7 @@ static void mesh_calc_tri_tessface(
if (tangent) {
DM_ensure_normals(dm);
DM_add_tangent_layer(dm);
DM_calc_loop_tangents(dm);
precomputed_normals = dm->getPolyDataArray(dm, CD_NORMAL);
calculate_normal = precomputed_normals ? false : true;

View File

@@ -3275,7 +3275,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
if (need_nmap_tangent!=0 && CustomData_get_layer_index(&dm->faceData, CD_TANGENT) == -1) {
bool generate_data = false;
if (CustomData_get_layer_index(&dm->loopData, CD_TANGENT) == -1) {
DM_add_tangent_layer(dm);
dm->calcLoopTangents(dm);
generate_data = true;
}
DM_generate_tangent_tessface_data(dm, generate_data);

View File

@@ -456,7 +456,7 @@ static void do_multires_bake(MultiresBakeRender *bkr, Image *ima, bool require_t
if (require_tangent) {
if (CustomData_get_layer_index(&dm->loopData, CD_TANGENT) == -1)
DM_add_tangent_layer(dm);
DM_calc_loop_tangents(dm);
pvtangent = DM_get_loop_data_layer(dm, CD_TANGENT);
}