Commit: 8072b6838755f2493fade14a904fa9f818a94aed
Author: Nick Wu
Date:   Tue Aug 28 17:34:12 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB8072b6838755f2493fade14a904fa9f818a94aed

Directional light control object ok, fixing file rw

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

M       release/scripts/startup/bl_ui/properties_scene.py
M       source/blender/blenloader/intern/readfile.c
M       source/blender/draw/engines/lanpr/lanpr_ops.c
M       source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
M       
source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
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 461f1f7db71..96cdeb2e518 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -676,6 +676,7 @@ class SCENE_PT_lanpr(SceneButtonsPanel, Panel):
                 layout.label(text= "Normal:")
                 layout.prop(active_layer,"normal_mode", expand = True)
                 if active_layer.normal_mode != "DISABLED":
+                    layout.prop(active_layer,"normal_control_object")
                     layout.prop(active_layer,"normal_effect_inverse", toggle = 
True)
                     layout.prop(active_layer,"normal_ramp_begin")
                     layout.prop(active_layer,"normal_ramp_end")
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 2bf211da431..148400da644 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6525,13 +6525,13 @@ static void direct_link_scene(FileData *fd, Scene *sce)
        for (LANPR_LineLayer *ll = sce->lanpr.line_layers.first; ll; ll = 
ll->next) {
                link_list(fd, &ll->components);
                for(LANPR_LineLayerComponent *llc = ll->components.first; 
llc;llc=llc->next){
-                       llc->object_select = newdataadr(fd, llc->object_select);
-                       llc->material_select = newdataadr(fd, 
llc->material_select);
-                       llc->collection_select = newdataadr(fd, 
llc->collection_select);
+                       llc->object_select = newlibadr(fd, sce->id.lib, 
llc->object_select);
+                       llc->material_select = newlibadr(fd, sce->id.lib, 
llc->material_select);
+                       llc->collection_select = newlibadr(fd, sce->id.lib, 
llc->collection_select);
                }
                ll->batch = NULL;
                ll->shgrp = NULL;
-               ll->normal_control_object = newdataadr(fd, 
ll->normal_control_object);
+               ll->normal_control_object = newlibadr(fd, sce->id.lib, 
ll->normal_control_object);
        }
 
        sce->layer_properties = newdataadr(fd, sce->layer_properties);
@@ -9902,6 +9902,8 @@ static void expand_scene(FileData *fd, Main *mainvar, 
Scene *sce)
        SceneRenderLayer *srl;
        FreestyleModuleConfig *module;
        FreestyleLineSet *lineset;
+       LANPR_LineLayer* ll;
+       LANPR_LineLayerComponent* llc;
 
        for (Base *base_legacy = sce->base.first; base_legacy; base_legacy = 
base_legacy->next) {
                expand_doit(fd, mainvar, base_legacy->object);
@@ -9949,6 +9951,15 @@ static void expand_scene(FileData *fd, Main *mainvar, 
Scene *sce)
                }
        }
 
+       for (LANPR_LineLayer *ll = sce->lanpr.line_layers.first; ll; ll = 
ll->next) {
+               for (LANPR_LineLayerComponent *llc = ll->components.first; llc; 
llc = llc->next) {
+                       if (llc->object_select) expand_doit(fd, mainvar, 
llc->object_select);
+                       if (llc->material_select) expand_doit(fd, mainvar, 
llc->material_select);
+                       if (llc->collection_select) expand_doit(fd, mainvar, 
llc->collection_select);
+               }
+               if (ll->normal_control_object) expand_doit(fd, mainvar, 
ll->normal_control_object);
+       }
+
        if (sce->gpd)
                expand_doit(fd, mainvar, sce->gpd);
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c 
b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 7e8488d5092..3e359ea8667 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -3028,6 +3028,38 @@ void 
lanpr_viewport_draw_offline_result(LANPR_TextureList *txl, LANPR_Framebuffe
 
 void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb, float 
dist_threshold);
 
+void lanpr_calculate_normal_object_vector(LANPR_LineLayer* ll, float* 
normal_object_direction) {
+       Object* ob;
+       switch (ll->normal_mode) {
+       case LANPR_NORMAL_DONT_CARE:
+               return;
+       case LANPR_NORMAL_DIRECTIONAL:
+               if (!(ob = ll->normal_control_object)) {
+                       normal_object_direction[0] = 0;
+                       normal_object_direction[1] = 0;
+                       normal_object_direction[2] = 1; // default z up 
direction
+               }else {
+                       float dir[3] = {0,0,1};
+                       mul_v3_m3v3(normal_object_direction, ob->obmat, dir);
+               }
+               return;
+       case LANPR_NORMAL_POINT:
+               if (!(ob = ll->normal_control_object)) {
+                       normal_object_direction[0] = 0;
+                       normal_object_direction[1] = 0;
+                       normal_object_direction[2] = 0; // default origin 
position
+               }
+               else {
+                       normal_object_direction[0] = ob->obmat[3][0];
+                       normal_object_direction[1] = ob->obmat[3][1];
+                       normal_object_direction[2] = ob->obmat[3][2];
+               }
+               return;
+       case LANPR_NORMAL_2D:
+               return;
+       }
+}
+
 void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int 
is_render) {
        LANPR_LineLayer *ll;
        LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
@@ -3040,6 +3072,7 @@ void lanpr_software_draw_scene(void *vedata, 
GPUFrameBuffer *dfb, int is_render)
        SceneLANPR *lanpr = &scene->lanpr;
        View3D *v3d = draw_ctx->v3d;
        float indentity_mat[4][4];
+       float normal_object_direction[3] = { 0,0,1 };
 
        if (is_render) {
                lanpr_rebuild_all_command(lanpr);
@@ -3091,6 +3124,9 @@ void lanpr_software_draw_scene(void *vedata, 
GPUFrameBuffer *dfb, int is_render)
                                psl->software_pass = DRW_pass_create("Software 
Render Preview", DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | 
DRW_STATE_DEPTH_LESS_EQUAL);
                                rb = lanpr->render_buffer;
                                rb->ChainShgrp = 
DRW_shgroup_create(lanpr_share.software_chaining_shader, psl->software_pass);
+
+                               lanpr_calculate_normal_object_vector(ll, 
normal_object_direction);
+
                                DRW_shgroup_uniform_vec4(rb->ChainShgrp, 
"color", ll->color, 1);
                                DRW_shgroup_uniform_vec4(rb->ChainShgrp, 
"crease_color", ll->crease_color, 1);
                                DRW_shgroup_uniform_vec4(rb->ChainShgrp, 
"material_color", ll->material_color, 1);
@@ -3108,6 +3144,7 @@ void lanpr_software_draw_scene(void *vedata, 
GPUFrameBuffer *dfb, int is_render)
                                DRW_shgroup_uniform_float(rb->ChainShgrp, 
"normal_ramp_end", &ll->normal_ramp_end, 1);
                                DRW_shgroup_uniform_float(rb->ChainShgrp, 
"normal_thickness_begin", &ll->normal_thickness_begin, 1);
                                DRW_shgroup_uniform_float(rb->ChainShgrp, 
"normal_thickness_end", &ll->normal_thickness_end, 1);
+                               DRW_shgroup_uniform_vec3(rb->ChainShgrp, 
"normal_direction", normal_object_direction, 1);
 
                                DRW_shgroup_uniform_int(rb->ChainShgrp, 
"occlusion_level_begin", &ll->qi_begin, 1);
                                DRW_shgroup_uniform_int(rb->ChainShgrp, 
"occlusion_level_end", &ll->qi_end, 1);
@@ -3136,6 +3173,9 @@ void lanpr_software_draw_scene(void *vedata, 
GPUFrameBuffer *dfb, int is_render)
                                if (ll->batch) {
                                        psl->software_pass = 
DRW_pass_create("Software Render Preview", DRW_STATE_WRITE_COLOR | 
DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL);
                                        ll->shgrp = 
DRW_shgroup_create(lanpr_share.software_shader, psl->software_pass);
+
+                                       
lanpr_calculate_normal_object_vector(ll, normal_object_direction);
+
                                        DRW_shgroup_uniform_vec4(ll->shgrp, 
"color", ll->color, 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);
@@ -3155,6 +3195,7 @@ void lanpr_software_draw_scene(void *vedata, 
GPUFrameBuffer *dfb, int is_render)
                                        DRW_shgroup_uniform_float(ll->shgrp, 
"normal_ramp_end", &ll->normal_ramp_end, 1);
                                        DRW_shgroup_uniform_float(ll->shgrp, 
"normal_thickness_begin", &ll->normal_thickness_begin, 1);
                                        DRW_shgroup_uniform_float(ll->shgrp, 
"normal_thickness_end", &ll->normal_thickness_end, 1);
+                                       DRW_shgroup_uniform_vec3(ll->shgrp, 
"normal_direction", normal_object_direction, 1);
 
                                        DRW_shgroup_call_add(ll->shgrp, 
ll->batch, NULL);
                                        DRW_draw_pass(psl->software_pass);
diff --git 
a/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl 
b/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
index facb5a32fd8..19272241cdd 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
@@ -163,7 +163,10 @@ void decide_line_style(int component_id){
        if(normal_mode == 0){
                th=thickness;
        }else if(normal_mode == 1){
-               float factor = dot(gNormal[0],vec3(0,0,1));
+               float factor = dot(gNormal[0],normal_direction);
+               th = factor_to_thickness(factor);
+       }else if(normal_mode == 2){
+               float factor = dot(gNormal[0],normal_direction);
                th = factor_to_thickness(factor);
        }
 
diff --git 
a/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl 
b/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
index 2112b47fcab..38254a7f992 100644
--- 
a/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
+++ 
b/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
@@ -74,7 +74,10 @@ void decide_color_and_thickness(float component_id){
        if(normal_mode == 0){
                th=thickness;
        }else if(normal_mode == 1){
-               float factor = dot(gNormal[0],vec3(0,0,1));
+               float factor = dot(gNormal[0],normal_direction);
+               th = factor_to_thickness(factor);
+       }else if(normal_mode == 2){
+               float factor = dot(gNormal[0],normal_direction);
                th = factor_to_thickness(factor);
        }
 
diff --git a/source/blender/makesdna/DNA_lanpr_types.h 
b/source/blender/makesdna/DNA_lanpr_types.h
index 3040bc0b992..1ed27187cfc 100644
--- a/source/blender/makesdna/DNA_lanpr_types.h
+++ b/source/blender/makesdna/DNA_lanpr_types.h
@@ -55,6 +55,8 @@ struct Collection;
 
 #define LANPR_NORMAL_DONT_CARE         0
 #define LANPR_NORMAL_DIRECTIONAL       1
+#define LANPR_NORMAL_POINT             2
+#define LANPR_NORMAL_2D                3
 
 #define LANPR_COMPONENT_MODE_ALL          0
 #define LANPR_COMPONENT_MODE_OBJECT       1
diff --git a/source/blender/makesrna/intern/rna_lanpr.c 
b/source/blender/makesrna/intern/rna_lanpr.c
index b6dd56d468c..0f716aecf1b 100644
--- a/source/blender/makesrna/intern/rna_lanpr.c
+++ b/source/blender/makesrna/intern/rna_lanpr.c
@@ -66,6 +66,7 @@ void RNA_def_lanpr(BlenderRNA *brna){
        static const EnumPropertyItem rna_enum_lanpr_normal_mode[] = {
                {LANPR_NORMAL_DONT_CARE, "DISABLED", 0, "Disabled", "Normal 
value does not affect line style"},
                {LANPR_NORMAL_DIRECTIONAL, "DIRECTIONAL", 0, "Directional", 
"Use directional vector to control line width"},
+               {LANPR_NORMAL_POINT, "POINT", 0, "Point", "Use Point Light 
Style"},
                {0, NULL, 

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to