From 848f0ad183180ef5860038b1b709a3fdaa31aa3e Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Sat, 13 Feb 2010 13:55:41 +0000
Subject: [PATCH] a better fix for the blend-factor init problem.  I think.

---
 indra/llrender/llrender.cpp | 10 +++++++---
 indra/llrender/llrender.h   |  8 +++++---
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 0a1053abc28..e701b96a1ed 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -93,7 +93,9 @@ static GLenum sGLBlendFactor[] =
 	GL_DST_ALPHA,
 	GL_SRC_ALPHA,
 	GL_ONE_MINUS_DST_ALPHA,
-	GL_ONE_MINUS_SRC_ALPHA
+	GL_ONE_MINUS_SRC_ALPHA,
+
+	GL_ZERO // 'BF_UNDEF'
 };
 
 LLTexUnit::LLTexUnit(S32 index)
@@ -765,8 +767,8 @@ LLRender::LLRender()
 	mCurrAlphaFuncVal = 0.01f;
 	mCurrSceneBlendType = BT_ALPHA;
 
-	mCurrBlendSFactor = BF_ONE;
-	mCurrBlendDFactor = BF_ZERO;
+	mCurrBlendSFactor = BF_UNDEF;
+	mCurrBlendDFactor = BF_UNDEF;
 }
 
 LLRender::~LLRender()
@@ -979,6 +981,8 @@ void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
 
 void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor)
 {
+	llassert(sfactor < BF_UNDEF);
+	llassert(dfactor < BF_UNDEF);
 	if (mCurrBlendSFactor != sfactor || mCurrBlendDFactor != dfactor)
 	{
 		mCurrBlendSFactor = sfactor;
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index ef18b556e6e..e9ffba9efe2 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -270,7 +270,9 @@ class LLRender
 		BF_DEST_ALPHA,
 		BF_SOURCE_ALPHA,
 		BF_ONE_MINUS_DEST_ALPHA,
-		BF_ONE_MINUS_SOURCE_ALPHA
+		BF_ONE_MINUS_SOURCE_ALPHA,
+
+		BF_UNDEF
 	} eBlendFactor;
 
 	LLRender();
@@ -364,8 +366,8 @@ class LLRender
 
 	F32				mMaxAnisotropy;
 
-	U32 mCurrBlendSFactor;
-	U32 mCurrBlendDFactor;
+	eBlendFactor mCurrBlendSFactor;
+	eBlendFactor mCurrBlendDFactor;
 
 	std::list<LLVector3> mUIOffset;
 	std::list<LLVector3> mUIScale;
-- 
GitLab