Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2014-04-13 14:29:21 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2014-04-13 14:34:45 +0400
commit41b8f8873284dc9a2b0df2151b5d384a4ea212d9 (patch)
tree60f43347ea0bad4e297357666ec643ea5050f043 /source/blender/gpu/intern/gpu_buffers.c
parent0b7f5813973c515b84cd7c18ef6d7d1e59374237 (diff)
Split Normals I (3/5): Add 3Dview shading support of split normals.
Mostly monkey coding in gpu ("modern" VBO drawing) and DM variants ("legacy" drawing) code... Reviewers: brecht Reviewed By: brecht CC: campbellbarton Differential Revision: https://developer.blender.org/D367
Diffstat (limited to 'source/blender/gpu/intern/gpu_buffers.c')
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 177ffd071fd..e2588c251fb 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -737,6 +737,7 @@ static void GPU_buffer_copy_normal(DerivedMesh *dm, float *varray, int *index, i
float f_no[3];
float *nors = dm->getTessFaceDataArray(dm, CD_NORMAL);
+ short (*tlnors)[4][3] = dm->getTessFaceDataArray(dm, CD_TESSLOOPNORMAL);
MVert *mvert = dm->getVertArray(dm);
MFace *f = dm->getTessFaceArray(dm);
@@ -747,7 +748,20 @@ static void GPU_buffer_copy_normal(DerivedMesh *dm, float *varray, int *index, i
start = index[mat_orig_to_new[f->mat_nr]];
index[mat_orig_to_new[f->mat_nr]] += f->v4 ? 18 : 9;
- if (smoothnormal) {
+ if (tlnors) {
+ short (*tlnor)[3] = tlnors[i];
+ /* Copy loop normals */
+ normal_short_to_float_v3(&varray[start], tlnor[0]);
+ normal_short_to_float_v3(&varray[start + 3], tlnor[1]);
+ normal_short_to_float_v3(&varray[start + 6], tlnor[2]);
+
+ if (f->v4) {
+ normal_short_to_float_v3(&varray[start + 9], tlnor[2]);
+ normal_short_to_float_v3(&varray[start + 12], tlnor[3]);
+ normal_short_to_float_v3(&varray[start + 15], tlnor[0]);
+ }
+ }
+ else if (smoothnormal) {
/* copy vertex normal */
normal_short_to_float_v3(&varray[start], mvert[f->v1].no);
normal_short_to_float_v3(&varray[start + 3], mvert[f->v2].no);