From 0a4814a6d01d6cd2e9bda871e30b261d0eff0ed4 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 5 Oct 2011 15:28:02 +0000 Subject: Fix #28766: object properties > display > transparency no longer worked in solid draw mode, after texface changes. --- source/blender/gpu/intern/gpu_draw.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'source') diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 120c203e7bd..c5d62559056 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -1136,6 +1136,9 @@ int GPU_enable_material(int nr, void *attribs) GMS.lastretval = !GMS.lastretval; if(GMS.lastretval) { + /* for alpha pass, use alpha blend */ + alphablend = (GMS.alphapass)? GPU_BLEND_ALPHA: GPU_BLEND_SOLID; + if(gattribs && GMS.gmatbuf[nr]) { /* bind glsl material and get attributes */ Material *mat = GMS.gmatbuf[nr]; @@ -1145,7 +1148,11 @@ int GPU_enable_material(int nr, void *attribs) GPU_material_bind(gpumat, GMS.gob->lay, GMS.glay, 1.0, !(GMS.gob->mode & OB_MODE_TEXTURE_PAINT)); GPU_material_bind_uniforms(gpumat, GMS.gob->obmat, GMS.gviewmat, GMS.gviewinv, GMS.gob->col); GMS.gboundmat= mat; - alphablend= mat->game.alpha_blend; + + /* for glsl use alpha blend mode, unless it's set to solid and + we are already drawing in an alpha pass */ + if(mat->game.alpha_blend != GPU_BLEND_SOLID) + alphablend= mat->game.alpha_blend; if(GMS.alphapass) glDepthMask(1); } @@ -1154,11 +1161,9 @@ int GPU_enable_material(int nr, void *attribs) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, GMS.matbuf[nr].diff); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, GMS.matbuf[nr].spec); glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, GMS.matbuf[nr].hard); - alphablend= GPU_BLEND_SOLID; } /* set (alpha) blending mode */ - if(!GMS.alphapass) alphablend= GPU_BLEND_SOLID; GPU_set_material_alpha_blend(alphablend); } -- cgit v1.2.3