[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15172] trunk/blender/source: adding clip alpha (binary alpha) to the 3D view and game engine.

Campbell Barton ideasman42 at gmail.com
Mon Jun 9 17:45:46 CEST 2008


Revision: 15172
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15172
Author:   campbellbarton
Date:     2008-06-09 17:45:46 +0200 (Mon, 09 Jun 2008)

Log Message:
-----------
adding clip alpha (binary alpha) to the 3D view and game engine.

Modified Paths:
--------------
    trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
    trunk/blender/source/blender/src/buttons_editing.c
    trunk/blender/source/blender/src/drawmesh.c
    trunk/blender/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp

Modified: trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_meshdata_types.h	2008-06-09 14:04:19 UTC (rev 15171)
+++ trunk/blender/source/blender/makesdna/DNA_meshdata_types.h	2008-06-09 15:45:46 UTC (rev 15172)
@@ -229,14 +229,16 @@
 #define TF_SHADOW		8192
 #define TF_BMFONT		16384
 
-/* mtface->transp */
+/* mtface->transp, values 1-4 are used as flags in the GL, WARNING, TF_SUB cant work with this */
 #define TF_SOLID	0
 #define TF_ADD		1
 #define TF_ALPHA	2
+#define TF_CLIP		4 /* clipmap alpha/binary alpha all or nothing! */
 
 /* sub is not available in the user interface anymore */
 #define TF_SUB		3
 
+
 /* mtface->unwrap */
 #define TF_DEPRECATED1	1
 #define TF_DEPRECATED2	2

Modified: trunk/blender/source/blender/src/buttons_editing.c
===================================================================
--- trunk/blender/source/blender/src/buttons_editing.c	2008-06-09 14:04:19 UTC (rev 15171)
+++ trunk/blender/source/blender/src/buttons_editing.c	2008-06-09 15:45:46 UTC (rev 15172)
@@ -6235,6 +6235,7 @@
 		uiDefButC(block, ROW, REDRAWVIEW3D, "Opaque",	600,80,60,19, &tf->transp, 2.0, (float)TF_SOLID,0, 0, "Render color of textured face as color");
 		uiDefButC(block, ROW, REDRAWVIEW3D, "Add",		660,80,60,19, &tf->transp, 2.0, (float)TF_ADD,	0, 0, "Render face transparent and add color of face");
 		uiDefButC(block, ROW, REDRAWVIEW3D, "Alpha",	720,80,60,19, &tf->transp, 2.0, (float)TF_ALPHA,0, 0, "Render polygon transparent, depending on alpha channel of the texture");
+		uiDefButC(block, ROW, REDRAWVIEW3D, "Clip Alpha",	780,80,80,19, &tf->transp, 2.0, (float)TF_CLIP,0, 0, "Use the images alpha values clipped with no blending (binary alpha)");
 	}
 	else
 		uiDefBut(block,LABEL,B_NOP, "(No Active Face)", 10,200,150,19,0,0,0,0,0,"");

Modified: trunk/blender/source/blender/src/drawmesh.c
===================================================================
--- trunk/blender/source/blender/src/drawmesh.c	2008-06-09 14:04:19 UTC (rev 15171)
+++ trunk/blender/source/blender/src/drawmesh.c	2008-06-09 15:45:46 UTC (rev 15172)
@@ -228,13 +228,14 @@
 		alphamode= tface->transp;
 
 		if(alphamode) {
-			glEnable(GL_BLEND);
-			
 			if(alphamode==TF_ADD) {
+				glEnable(GL_BLEND);
 				glBlendFunc(GL_ONE, GL_ONE);
+				glDisable ( GL_ALPHA_TEST );
 			/* 	glBlendEquationEXT(GL_FUNC_ADD_EXT); */
 			}
 			else if(alphamode==TF_ALPHA) {
+				glEnable(GL_BLEND);
 				glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 				
 				/* added after 2.45 to clip alpha */
@@ -245,9 +246,12 @@
 					glEnable ( GL_ALPHA_TEST );
 					glAlphaFunc ( GL_GREATER, U.glalphaclip );
 				}
-				
+			} else if (alphamode==TF_CLIP){		
+				glDisable(GL_BLEND); 
+				glEnable ( GL_ALPHA_TEST );
+				glAlphaFunc(GL_GREATER, 0.5f);
+			}
 			/* 	glBlendEquationEXT(GL_FUNC_ADD_EXT); */
-			}
 			/* else { */
 			/* 	glBlendFunc(GL_ONE, GL_ONE); */
 			/* 	glBlendEquationEXT(GL_FUNC_REVERSE_SUBTRACT_EXT); */

Modified: trunk/blender/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp	2008-06-09 14:04:19 UTC (rev 15171)
+++ trunk/blender/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp	2008-06-09 15:45:46 UTC (rev 15172)
@@ -154,16 +154,23 @@
 		fAlphamode= tface->transp;
 
 		if(fAlphamode) {
-			glEnable(GL_BLEND);
-			
 			if(fAlphamode==TF_ADD) {
+				glEnable(GL_BLEND);
 				glBlendFunc(GL_ONE, GL_ONE);
+				glDisable ( GL_ALPHA_TEST );
 			/* 	glBlendEquationEXT(GL_FUNC_ADD_EXT); */
 			}
 			else if(fAlphamode==TF_ALPHA) {
+				glEnable(GL_BLEND);
 				glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+				glDisable ( GL_ALPHA_TEST );
 			/* 	glBlendEquationEXT(GL_FUNC_ADD_EXT); */
 			}
+			else if (alphamode==TF_CLIP){		
+				glDisable(GL_BLEND); 
+				glEnable ( GL_ALPHA_TEST );
+				glAlphaFunc(GL_GREATER, 0.5f);
+			}
 			/* else { */
 			/* 	glBlendFunc(GL_ONE, GL_ONE); */
 			/* 	glBlendEquationEXT(GL_FUNC_REVERSE_SUBTRACT_EXT); */

Modified: trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp	2008-06-09 14:04:19 UTC (rev 15171)
+++ trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp	2008-06-09 15:45:46 UTC (rev 15172)
@@ -478,16 +478,23 @@
 	if( mMaterial->transp &TF_ADD) {
 		glEnable(GL_BLEND);
 		glBlendFunc(GL_ONE, GL_ONE);
+		glDisable ( GL_ALPHA_TEST );
 		return true;
 	}
 	
 	if( mMaterial->transp & TF_ALPHA ) {
 		glEnable(GL_BLEND);
 		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+		glDisable ( GL_ALPHA_TEST );
 		return true;
 	}
 	
-	glDisable(GL_BLEND);
+	if( mMaterial->transp & TF_CLIP ) {
+		glDisable(GL_BLEND); 
+		glEnable ( GL_ALPHA_TEST );
+		glAlphaFunc(GL_GREATER, 0.5f);
+		return true;
+	}
 	return false;
 }
 





More information about the Bf-blender-cvs mailing list