diff options
author | Alexander Romanov <a.romanov@blend4web.com> | 2017-07-02 21:21:19 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2017-07-02 22:28:10 +0300 |
commit | e3e5ecfaa84e2ad37d56210f40b395007ae61651 (patch) | |
tree | 3915f0d7582eb3c9a1876c82a6c5c31ce884ff17 /source/blender/render | |
parent | eb1532a86094ba5d59bf62b1fbd50f74a639d0a8 (diff) |
Fix T51746: normal map tangents not working correctly when there are no UV maps.
Patch by Alexander, with some refactoring by Brecht.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D2709
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/include/render_types.h | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 7 |
2 files changed, 4 insertions, 5 deletions
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h index f0323340899..f9942bef61f 100644 --- a/source/blender/render/intern/include/render_types.h +++ b/source/blender/render/intern/include/render_types.h @@ -335,7 +335,7 @@ typedef struct ObjectRen { char (*mcol)[MAX_CUSTOMDATA_LAYER_NAME]; int actmtface, actmcol, bakemtface; - char tangent_mask; /* which tangent layer should be calculated */ + short tangent_mask; /* which tangent layer should be calculated */ float obmat[4][4]; /* only used in convertblender.c, for instancing */ diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 41ff8e046e7..4876d2d193e 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -3439,10 +3439,9 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) if (need_nmap_tangent_concrete || need_tangent) { int uv_start = CustomData_get_layer_index(&dm->faceData, CD_MTFACE); int uv_index = CustomData_get_named_layer_index(&dm->faceData, CD_MTFACE, layer->name); - BLI_assert(uv_start >= 0 && uv_index >= 0); - if ((uv_start < 0 || uv_index < 0)) - continue; - int n = uv_index - uv_start; + + /* if there are no UVs, orco tangents are in first slot */ + int n = (uv_start >= 0 && uv_index >= 0) ? uv_index - uv_start : 0; const float *tangent = (const float *) layer->data; float *ftang = RE_vlakren_get_nmap_tangent(obr, vlr, n, true); |