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:
authorIRIE Shinsuke <irieshinsuke@yahoo.co.jp>2014-04-27 20:08:10 +0400
committerIRIE Shinsuke <irieshinsuke@yahoo.co.jp>2014-04-27 20:20:36 +0400
commit1973b17fce65a4dfececb45b19abec37898c1ab5 (patch)
tree36f730d98d31f4fb993bcfca57f6e8af36a48dcc /source/blender/gpu
parenta2489e29f6233b407c577a7bbf6400a9b160117d (diff)
View3D: Tweak GLSL preview, use only lamps enabled in active render layer and material light group.
This change makes lighting in GLSL preview more accurate, though it still doesn't support material's "Exclusive" option. Technical note: Changes in view3d_draw.c are not essential, these avoid preparing unused shadow buffers. Reviewers: brecht Reviewed By: brecht Differential Revision: https://developer.blender.org/D457
Diffstat (limited to 'source/blender/gpu')
-rw-r--r--source/blender/gpu/GPU_material.h2
-rw-r--r--source/blender/gpu/intern/gpu_material.c18
2 files changed, 19 insertions, 1 deletions
diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h
index bc410cb8369..1011ac80901 100644
--- a/source/blender/gpu/GPU_material.h
+++ b/source/blender/gpu/GPU_material.h
@@ -47,6 +47,7 @@ struct Image;
struct bNode;
struct LinkNode;
struct Scene;
+struct SceneRenderLayer;
struct GPUVertexAttribs;
struct GPUNode;
struct GPUNodeLink;
@@ -135,6 +136,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_uniforms(GPUMaterial *material, float obmat[4][4], float obcol[4], float autobumpscale);
void GPU_material_unbind(GPUMaterial *material);
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index 0f05a7f0cda..4b070a4568a 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -58,6 +58,7 @@
#include "BKE_node.h"
#include "BKE_scene.h"
#include "BKE_texture.h"
+#include "BKE_group.h"
#include "IMB_imbuf_types.h"
@@ -259,18 +260,33 @@ void GPU_material_free(Material *ma)
BLI_freelistN(&ma->gpumaterial);
}
+bool GPU_lamp_override_visible(GPULamp *lamp, SceneRenderLayer *srl, Material *ma)
+{
+ if (srl && srl->light_override)
+ return BKE_group_object_exists(srl->light_override, lamp->ob);
+ else if (ma && ma->group)
+ return BKE_group_object_exists(ma->group, lamp->ob);
+ else
+ return true;
+}
+
void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double time, int mipmap, float viewmat[4][4], float viewinv[4][4])
{
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);
+
+ if (srl)
+ viewlay &= srl->lay;
/* handle layer lamps */
for (nlink=material->lamps.first; nlink; nlink=nlink->next) {
lamp= nlink->data;
- if (!lamp->hide && (lamp->lay & viewlay) && (!(lamp->mode & LA_LAYER) || (lamp->lay & oblay))) {
+ if (!lamp->hide && (lamp->lay & viewlay) && (!(lamp->mode & LA_LAYER) || (lamp->lay & oblay))
+ && GPU_lamp_override_visible(lamp, srl, material->ma)) {
lamp->dynenergy = lamp->energy;
copy_v3_v3(lamp->dyncol, lamp->col);
}