summaryrefslogtreecommitdiff
path: root/indra/newview/lldrawpool.cpp
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2011-05-29 00:40:57 -0500
committerDave Parks <davep@lindenlab.com>2011-05-29 00:40:57 -0500
commit1fd46831f0ea7309d83c1fa2eecc611b3bada719 (patch)
tree8e6708b1e25f12156c0a65cf6487c5f3df6c4873 /indra/newview/lldrawpool.cpp
parent35c4635dca83708a09ac8f15e30aec146210fba7 (diff)
SH-1682 Work in progress on using texture indexes to improve batch size (wow, super fast so far)
Diffstat (limited to 'indra/newview/lldrawpool.cpp')
-rw-r--r--indra/newview/lldrawpool.cpp42
1 files changed, 29 insertions, 13 deletions
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index 25e4bc847c..9645693493 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -430,14 +430,14 @@ void LLRenderPass::renderTexture(U32 type, U32 mask)
pushBatches(type, mask, TRUE);
}
-void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture)
+void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture, BOOL batch_textures)
{
for (LLCullResult::drawinfo_list_t::iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i)
{
LLDrawInfo* pparams = *i;
if (pparams)
{
- pushBatch(*pparams, mask, texture);
+ pushBatch(*pparams, mask, texture, batch_textures);
}
}
}
@@ -456,26 +456,42 @@ void LLRenderPass::applyModelMatrix(LLDrawInfo& params)
}
}
-void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
+void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures)
{
applyModelMatrix(params);
+ bool tex_setup = false;
+
if (texture)
{
- if (params.mTexture.notNull())
+ if (batch_textures && params.mTextureList.size() > 1)
{
- params.mTexture->addTextureStats(params.mVSize);
- gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ;
- if (params.mTextureMatrix)
+ for (U32 i = 0; i < params.mTextureList.size(); ++i)
{
- glMatrixMode(GL_TEXTURE);
- glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
- gPipeline.mTextureMatrixOps++;
+ if (params.mTextureList[i].notNull())
+ {
+ gGL.getTexUnit(i)->bind(params.mTextureList[i], TRUE);
+ }
}
}
else
- {
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ { //not batching textures or batch has only 1 texture -- might need a texture matrix
+ if (params.mTexture.notNull())
+ {
+ params.mTexture->addTextureStats(params.mVSize);
+ gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ;
+ if (params.mTextureMatrix)
+ {
+ tex_setup = true;
+ glMatrixMode(GL_TEXTURE);
+ glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
+ gPipeline.mTextureMatrixOps++;
+ }
+ }
+ else
+ {
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ }
}
}
@@ -490,7 +506,7 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
}
- if (params.mTextureMatrix && texture && params.mTexture.notNull())
+ if (tex_setup)
{
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);