Commit: a63777b879525ede2c0e8adf05d46373969bf64b
Author: Nick Wu
Date:   Thu Jun 28 12:30:58 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBa63777b879525ede2c0e8adf05d46373969bf64b

Fixed normal matrix error. obmat needs double to produce better result.

===================================================================

M       release/scripts/startup/bl_ui/properties_scene.py
M       source/blender/draw/engines/lanpr/lanpr_all.h
M       source/blender/draw/engines/lanpr/lanpr_engine.c
M       source/blender/draw/engines/lanpr/lanpr_ops.c
M       source/blender/draw/engines/lanpr/lanpr_util.c
M       source/blender/draw/engines/lanpr/lanpr_util.h
M       
source/blender/draw/engines/lanpr/shaders/lanpr_software_line_width.geometry
M       source/blender/makesdna/DNA_lanpr_types.h
M       source/blender/makesrna/intern/rna_lanpr.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_scene.py 
b/release/scripts/startup/bl_ui/properties_scene.py
index 504e55b89e4..14fbae0ccf4 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -623,16 +623,26 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, 
Panel):
                     else:
                         row.label(text="OFF")
 
-                    layout.prop(lanpr, "crease_threshold")
-                    layout.prop(lanpr, "crease_fade_threshold")
-
-                    split = layout.split()
+                    split = layout.split(align=True)
                     col = split.column()
-                    col.prop(lanpr, "depth_width_influence")
-                    col.prop(lanpr, "depth_alpha_influence")
+                    layout.prop(active_layer, "qi_begin")
                     col = split.column()
-                    col.prop(lanpr, "depth_width_curve")
-                    col.prop(lanpr, "depth_alpha_curve")
+                    layout.prop(active_layer, "qi_end")
+                
+                
+                layout.prop(lanpr, "crease_threshold")
+
+                layout.label(text="Below INOP in software:")
+
+                layout.prop(lanpr, "crease_fade_threshold")
+
+                split = layout.split()
+                col = split.column()
+                col.prop(lanpr, "depth_width_influence")
+                col.prop(lanpr, "depth_alpha_influence")
+                col = split.column()
+                col.prop(lanpr, "depth_width_curve")
+                col.prop(lanpr, "depth_alpha_curve")
             
         else:
             layout.label(text="Snake:")
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h 
b/source/blender/draw/engines/lanpr/lanpr_all.h
index 74daaa98ffd..82a7d355c81 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -422,6 +422,8 @@ typedef struct LANPR_RenderVert {
        char EdgeUsed;                    //                      <|            
       |>
 }LANPR_RenderVert;
 
+#define LANPR_EDGE_FLAG_EDGE_MARK 1
+
 typedef struct LANPR_RenderLine {
        nListItem Item;
        struct LANPR_RenderVert *L, *R;
@@ -430,6 +432,7 @@ typedef struct LANPR_RenderLine {
        //tnsEdge*       Edge;//should be edge material
        //tnsRenderTriangle* Testing;//Should Be tRT** Testing[NumOfThreads]
        char MinOcclude;
+       char Flags;
        struct Object *ObjectRef;
        //char            IgnoreConnectedFace;
        //char            CullStatus;
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c 
b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 252c183ec0e..84522c971e3 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -328,7 +328,15 @@ static void lanpr_cache_init(void *vedata){
                for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
                        ll->shgrp = DRW_shgroup_create(OneTime.software_shader, 
psl->software_pass);
                        DRW_shgroup_uniform_vec4(ll->shgrp, "color", ll->color, 
1);
-                       DRW_shgroup_uniform_float(ll->shgrp, "line_thickness", 
&ll->thickness, 1);
+                       DRW_shgroup_uniform_vec4(ll->shgrp, "crease_color", 
ll->crease_color, 1);
+                       DRW_shgroup_uniform_vec4(ll->shgrp, "material_color", 
ll->material_color, 1);
+                       DRW_shgroup_uniform_vec4(ll->shgrp, "edge_mark_color", 
ll->edge_mark_color, 1);
+                       DRW_shgroup_uniform_vec4(ll->shgrp, 
"intersection_color", ll->intersection_color, 1);
+                       DRW_shgroup_uniform_float(ll->shgrp, "thickness", 
&ll->thickness, 1);
+                       DRW_shgroup_uniform_float(ll->shgrp, 
"thickness_crease", &ll->thickness_crease, 1);
+                       DRW_shgroup_uniform_float(ll->shgrp, 
"thickness_material", &ll->thickness_material, 1);
+                       DRW_shgroup_uniform_float(ll->shgrp, 
"thickness_edge_mark", &ll->thickness_edge_mark, 1);
+                       DRW_shgroup_uniform_float(ll->shgrp, 
"thickness_intersection", &ll->thickness_intersection, 1);
                        if(ll->batch) DRW_shgroup_call_add(ll->shgrp, 
ll->batch, NULL);
                }
        }
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c 
b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 67670cad3db..83a15868a0c 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -2,6 +2,7 @@
 #include "DRW_render.h"
 #include "BLI_listbase.h"
 #include "BLI_linklist.h"
+#include "BLI_math_matrix.h"
 #include "lanpr_all.h"
 #include "lanpr_util.h"
 #include "DRW_render.h"
@@ -1472,7 +1473,7 @@ void lanpr_TransformRenderVert(BMVert *V, int index, 
LANPR_RenderVert *RVBuf, re
        //rv->V = V;
        //V->RV = rv;
        tMatApplyTransform43df(rv->GLocation, MVMat, V->co);
-       tMatApplyTransform43df(rv->FrameBufferCoord, MVPMat, V->co);
+       tMatApplyTransform43dfND(rv->FrameBufferCoord, MVPMat, V->co);
 
        
//if(rv->FrameBufferCoord[2]>0)tMatVectorMultiSelf3d(rv->FrameBufferCoord, (1 / 
rv->FrameBufferCoord[3]));
        //else tMatVectorMultiSelf3d(rv->FrameBufferCoord, 
-rv->FrameBufferCoord[3]);
@@ -1498,6 +1499,7 @@ void lanpr_MakeRenderGeometryBuffersObject(Object *o, 
real *MVMat, real *MVPMat,
        tnsMatrix44d NewMVP;
        tnsMatrix44d NewMV;
        tnsMatrix44d SelfTransform;
+       tnsMatrix44d Normal;
        LANPR_RenderElementLinkNode *reln;
        Object *cam_object = rb->Scene->camera;
        Camera *c = cam_object->data;
@@ -1505,6 +1507,8 @@ void lanpr_MakeRenderGeometryBuffersObject(Object *o, 
real *MVMat, real *MVPMat,
        LANPR_RenderVert *orv;
        LANPR_RenderLine *orl;
        LANPR_RenderTriangle *ort;
+       FreestyleEdge *fe;
+       int CanFindFreestyle = 0;
        int i;
 
 
@@ -1515,6 +1519,11 @@ void lanpr_MakeRenderGeometryBuffersObject(Object *o, 
real *MVMat, real *MVPMat,
                tMatMultiply44d(NewMVP, MVPMat, SelfTransform);
                tMatMultiply44d(NewMV, MVMat, SelfTransform);
 
+               invert_m4_m4(o->imat, o->obmat);
+               transpose_m4(o->imat);
+               tMatObmatTo16d(o->imat, Normal);
+
+
                const BMAllocTemplate allocsize = 
BMALLOC_TEMPLATE_FROM_ME(((Mesh *)(o->data)));
                bm = BM_mesh_create(&allocsize,
                                    &((struct BMeshCreateParams) 
{.use_toolflags = true, }));
@@ -1523,6 +1532,10 @@ void lanpr_MakeRenderGeometryBuffersObject(Object *o, 
real *MVMat, real *MVPMat,
                BM_mesh_elem_table_ensure(bm, BM_VERT | BM_EDGE | BM_FACE);
                BM_mesh_elem_index_ensure(bm, BM_VERT | BM_EDGE | BM_FACE);
 
+               if (CustomData_has_layer(&bm->edata, CD_FREESTYLE_EDGE)) {
+                       CanFindFreestyle = 1;
+               }
+
                orv = MEM_callocN(sizeof(LANPR_RenderVert) * bm->totvert, 
"object render verts");
                ort = MEM_callocN(bm->totface * rb->TriangleSize, "object 
render triangles");//CreateNewBuffer(LANPR_RenderTriangle, mo->TriangleCount);
                orl = MEM_callocN(sizeof(LANPR_RenderLine) * bm->totedge, 
"object render edge");
@@ -1550,6 +1563,10 @@ void lanpr_MakeRenderGeometryBuffersObject(Object *o, 
real *MVMat, real *MVPMat,
                rl = orl;
                for (i = 0; i < bm->totedge; i++) {
                        e = BM_edge_at_index(bm, i);
+                       if (CanFindFreestyle) {
+                               fe = CustomData_bmesh_get(&bm->edata, 
e->head.data, CD_FREESTYLE_EDGE);
+                               if (fe->flag & FREESTYLE_EDGE_MARK)rl->Flags |= 
LANPR_EDGE_FLAG_EDGE_MARK;
+                       }
                        rl->L = &orv[BM_elem_index_get(e->v1)];
                        rl->R = &orv[BM_elem_index_get(e->v2)];
                        LANPR_RenderLineSegment *rls = 
memStaticAquire(&rb->RenderDataPool, sizeof(LANPR_RenderLineSegment));
@@ -1572,7 +1589,7 @@ void lanpr_MakeRenderGeometryBuffersObject(Object *o, 
real *MVMat, real *MVPMat,
                        rt->V[2] = &orv[BM_elem_index_get(loop->v)];
                        rt->RL[2] = &orl[BM_elem_index_get(loop->e)];
 
-                       //rt->F = F;
+                       rt->F = f;
                        rt->GN[0] = f->no[0];
                        rt->GN[1] = f->no[1];
                        rt->GN[2] = f->no[2];
@@ -1581,7 +1598,7 @@ void lanpr_MakeRenderGeometryBuffersObject(Object *o, 
real *MVMat, real *MVPMat,
                        tMatVectorAccum3d(rt->GC, rt->V[1]->FrameBufferCoord);
                        tMatVectorAccum3d(rt->GC, rt->V[2]->FrameBufferCoord);
                        tMatVectorMultiSelf3d(rt->GC, 1.0f / 3.0f);
-                       tMatApplyNormalTransform43df(rt->GN, MVMat, f->no);
+                       tMatApplyNormalTransform43df(rt->GN, Normal, f->no);
                        tMatNormalizeSelf3d(rt->GN);
                        lanpr_AssignRenderLineWithTriangle(rt);
                        //m = tnsGetIndexedMaterial(rb->Scene, f->MaterialID);
@@ -2017,8 +2034,8 @@ int 
lanpr_TriangleLineImageSpaceIntersectTestOnlyV2(LANPR_RenderTriangle *rt, LA
        //}
 
 
-       DotLA = fabs(DotL); if (DotLA < DBL_EPSILON) { DotLA = 0; DotL = 0; }
-       DotRA = fabs(DotR); if (DotRA < DBL_EPSILON) { DotRA = 0; DotR = 0; }
+       DotLA = fabs(DotL); if (DotLA < 0) { DotLA = 0; DotL = 0; }
+       DotRA = fabs(DotR); if (DotRA < 0) { DotRA = 0; DotR = 0; }
        if (DotL - DotR == 0) Cut = 100000;
        else if (DotL * DotR <= 0) {
                Cut = DotLA / fabs(DotL - DotR);
@@ -2397,7 +2414,7 @@ int lanpr_LineCrossesFrame(tnsVector2d L, tnsVector2d R) {
 }
 
 void lanpr_ComputeViewVector(LANPR_RenderBuffer *rb) {
-       tnsVector3d Direction = { 0, 0, -1 };
+       tnsVector3d Direction = { 0, 0, 1 };
        tnsVector3d Trans;
        tnsMatrix44d inv;
        tnsMatrix44d obmat;
@@ -2438,6 +2455,11 @@ void lanpr_ComputeSceneContours(LANPR_RenderBuffer *rb) {
                //if (!lanpr_LineCrossesFrame(rl->L->FrameBufferCoord, 
rl->R->FrameBufferCoord))
                //      continue;
 
+               if (rl->Flags & LANPR_EDGE_FLAG_EDGE_MARK) {
+                       lstAppendPointerStatic(&rb->EdgeMarks, 
&rb->RenderDataPool, rl);
+                       continue;
+               }
+
                Add = 0; Dot1 = 0; Dot2 = 0;
 
                if (c->type == CAM_PERSP) {
@@ -2525,10 +2547,19 @@ void lanpr_DestroyRenderData(LANPR_RenderBuffer *rb) {
                FreeMem(reln->Pointer);
        }
 
+       while (reln = lstPopItem(&rb->LineBufferPointers)) {
+               FreeMem(reln->Pointer);
+       }
+
        while (reln = lstPopItem(&rb->TriangleBufferPointers)) {
                FreeMem(reln->Pointer);
        }
 
+       BLI_spin_end(&rb->csData);
+       BLI_spin_end(&rb->csInfo);
+       BLI_spin_end(&rb->csManagement);
+       BLI_spin_end(&rb->RenderDataPool.csMem);
+
        memStaticDestroy(&rb->RenderDataPool);
 }
 
@@ -2698,7 +2729,7 @@ long 
lanpr_CountIntersectionSegmentCount(LANPR_RenderBuffer *rb) {
        }
        return Count;
 }
-void *lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, nListHandle 
*LineList, float *VertexArray, int qi_begin, int qi_end) {
+void *lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, nListHandle 
*LineList, float *VertexArray, int qi_begin, int qi_end,float componet_id) {
        nListItemPointer *lip;
        LANPR_RenderLine *rl;
        LANPR_RenderLineSegment *rls, *irls;
@@ -2720,97 +2751,19 @@ void *lan

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to