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:
authorCampbell Barton <ideasman42@gmail.com>2015-07-17 22:29:34 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-07-17 22:30:13 +0300
commitb45749727ccc70f6155f7acfd4f7acc2c242d277 (patch)
treeff8fddb26b76828b4e68d26fd1213be543e42b92
parent32f7b4a3588f108c7ab4ec733ad4d97738017658 (diff)
Add check for GPU materials enable state
-rw-r--r--source/blender/gpu/GPU_draw.h1
-rw-r--r--source/blender/gpu/intern/gpu_draw.c9
2 files changed, 10 insertions, 0 deletions
diff --git a/source/blender/gpu/GPU_draw.h b/source/blender/gpu/GPU_draw.h
index a6bc5ff002f..26db4058d34 100644
--- a/source/blender/gpu/GPU_draw.h
+++ b/source/blender/gpu/GPU_draw.h
@@ -69,6 +69,7 @@ void GPU_state_init(void);
void GPU_begin_object_materials(struct View3D *v3d, struct RegionView3D *rv3d,
struct Scene *scene, struct Object *ob, bool glsl, bool *do_alpha_after);
void GPU_end_object_materials(void);
+bool GPU_object_materials_check(void);
int GPU_enable_material(int nr, void *attribs);
void GPU_disable_material(void);
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 4e2af56e1e5..79f92b76fe2 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -1407,6 +1407,8 @@ static struct GPUMaterialState {
GPUMaterialFixed (*matbuf);
GPUMaterialFixed matbuf_fixed[FIXEDMAT];
int totmat;
+ /* set when called inside GPU_begin_object_materials / GPU_end_object_materials */
+ bool is_enabled;
Material **gmatbuf;
Material *gmatbuf_fixed[FIXEDMAT];
@@ -1526,6 +1528,7 @@ void GPU_begin_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, O
/* DupliObject must be restored */
dob = GMS.dob;
memset(&GMS, 0, sizeof(GMS));
+ GMS.is_enabled = true;
GMS.dob = dob;
GMS.lastmatnr = -1;
GMS.lastretval = -1;
@@ -1824,11 +1827,17 @@ bool GPU_material_use_matcaps_get(void)
return GMS.use_matcaps;
}
+bool GPU_object_materials_check(void)
+{
+ return GMS.is_enabled;
+}
void GPU_end_object_materials(void)
{
GPU_disable_material();
+ GMS.is_enabled = false;
+
if (GMS.matbuf && GMS.matbuf != GMS.matbuf_fixed) {
MEM_freeN(GMS.matbuf);
MEM_freeN(GMS.gmatbuf);