Commit: 54e054cce4b013bc70df56059bf0fcd4bfee9827
Author: IRIE Shinsuke
Date:   Thu May 29 14:53:33 2014 +0900
https://developer.blender.org/rB54e054cce4b013bc70df56059bf0fcd4bfee9827

Followup to rB1973b17fce65, partially bring back GLSL lamp's previous behavior.

Using layer visibility in active render layer makes more accurate
preview but can cause problems in some cases:

https://developer.blender.org/rB1973b17fce65a4dfececb45b19abec37898c1ab5#comment-1

GLSL lamps now ignore layer visibility if lock_camera_and_layers is
OFF or game engine is running. The material lamp group still works
unconditionally though.

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

M       source/blender/editors/space_view3d/view3d_draw.c
M       source/blender/gpu/GPU_material.h
M       source/blender/gpu/intern/gpu_draw.c
M       source/blender/gpu/intern/gpu_material.c
M       source/gameengine/Ketsji/BL_BlenderShader.cpp

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

diff --git a/source/blender/editors/space_view3d/view3d_draw.c 
b/source/blender/editors/space_view3d/view3d_draw.c
index 219d77a..2eef7d9 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -2416,7 +2416,7 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D 
*v3d)
        Scene *sce_iter;
        Base *base;
        Object *ob;
-       SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+       SceneRenderLayer *srl = v3d->scenelock ? BLI_findlink(&scene->r.layers, 
scene->r.actlay) : NULL;
        
        BLI_listbase_clear(&shadows);
        
diff --git a/source/blender/gpu/GPU_material.h 
b/source/blender/gpu/GPU_material.h
index 1011ac8..a1c249d 100644
--- a/source/blender/gpu/GPU_material.h
+++ b/source/blender/gpu/GPU_material.h
@@ -137,7 +137,7 @@ void GPU_material_free(struct Material *ma);
 void GPU_materials_free(void);
 
 bool GPU_lamp_override_visible(GPULamp *lamp, struct SceneRenderLayer *srl, 
struct Material *ma);
-void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double 
time, int mipmap, float viewmat[4][4], float viewinv[4][4]);
+void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double 
time, int mipmap, float viewmat[4][4], float viewinv[4][4], bool scenelock);
 void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[4][4], 
float obcol[4], float autobumpscale);
 void GPU_material_unbind(GPUMaterial *material);
 int GPU_material_bound(GPUMaterial *material);
diff --git a/source/blender/gpu/intern/gpu_draw.c 
b/source/blender/gpu/intern/gpu_draw.c
index 1051ce5..68b8492 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -1375,6 +1375,7 @@ static struct GPUMaterialState {
        Object *gob;
        Scene *gscene;
        int glay;
+       bool gscenelock;
        float (*gviewmat)[4];
        float (*gviewinv)[4];
 
@@ -1463,6 +1464,7 @@ void GPU_begin_object_materials(View3D *v3d, RegionView3D 
*rv3d, Scene *scene, O
        GMS.gscene = scene;
        GMS.totmat = use_matcap ? 1 : ob->totcol + 1;  /* materials start from 
1, default material is 0 */
        GMS.glay= (v3d->localvd)? v3d->localvd->lay: v3d->lay; /* keep lamps 
visible in local view */
+       GMS.gscenelock = (v3d->scenelock != 0);
        GMS.gviewmat= rv3d->viewmat;
        GMS.gviewinv= rv3d->viewinv;
 
@@ -1623,7 +1625,7 @@ int GPU_enable_material(int nr, void *attribs)
 
                        gpumat = GPU_material_from_blender(GMS.gscene, mat);
                        GPU_material_vertex_attributes(gpumat, gattribs);
-                       GPU_material_bind(gpumat, GMS.gob->lay, GMS.glay, 1.0, 
!(GMS.gob->mode & OB_MODE_TEXTURE_PAINT), GMS.gviewmat, GMS.gviewinv);
+                       GPU_material_bind(gpumat, GMS.gob->lay, GMS.glay, 1.0, 
!(GMS.gob->mode & OB_MODE_TEXTURE_PAINT), GMS.gviewmat, GMS.gviewinv, 
GMS.gscenelock);
 
                        auto_bump_scale = GMS.gob->derivedFinal != NULL ? 
GMS.gob->derivedFinal->auto_bump_scale : 1.0f;
                        GPU_material_bind_uniforms(gpumat, GMS.gob->obmat, 
GMS.gob->col, auto_bump_scale);
diff --git a/source/blender/gpu/intern/gpu_material.c 
b/source/blender/gpu/intern/gpu_material.c
index d7fa36a..5594c08 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -270,13 +270,13 @@ bool GPU_lamp_override_visible(GPULamp *lamp, 
SceneRenderLayer *srl, Material *m
                return true;
 }
 
-void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double 
time, int mipmap, float viewmat[4][4], float viewinv[4][4])
+void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double 
time, int mipmap, float viewmat[4][4], float viewinv[4][4], bool scenelock)
 {
        if (material->pass) {
                LinkData *nlink;
                GPULamp *lamp;
                GPUShader *shader = GPU_pass_shader(material->pass);
-               SceneRenderLayer *srl = 
BLI_findlink(&material->scene->r.layers, material->scene->r.actlay);
+               SceneRenderLayer *srl = scenelock ? 
BLI_findlink(&material->scene->r.layers, material->scene->r.actlay) : NULL;
 
                if (srl)
                        viewlay &= srl->lay;
diff --git a/source/gameengine/Ketsji/BL_BlenderShader.cpp 
b/source/gameengine/Ketsji/BL_BlenderShader.cpp
index 6f6925d..bcdef85 100644
--- a/source/gameengine/Ketsji/BL_BlenderShader.cpp
+++ b/source/gameengine/Ketsji/BL_BlenderShader.cpp
@@ -77,7 +77,7 @@ void BL_BlenderShader::SetProg(bool enable, double time, 
RAS_IRasterizer* rasty)
                        view.getValue((float*)viewmat);
                        viewinv.getValue((float*)viewinvmat);
 
-                       GPU_material_bind(mGPUMat, mLightLayer, 
mBlenderScene->lay, time, 1, viewmat, viewinvmat);
+                       GPU_material_bind(mGPUMat, mLightLayer, 
mBlenderScene->lay, time, 1, viewmat, viewinvmat, false);
                }
                else
                        GPU_material_unbind(mGPUMat);

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

Reply via email to