summaryrefslogtreecommitdiff
path: root/indra/newview/pipeline.cpp
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2008-06-06 22:43:38 +0000
committerSteven Bennetts <steve@lindenlab.com>2008-06-06 22:43:38 +0000
commitad332810078a0bbb8fa08fcbfdf3d756de6914f6 (patch)
tree1608b2db5d620d323673607ea7ddadfba9d58bda /indra/newview/pipeline.cpp
parenta7d9a543e587ffe84b355db7a2e8193bfe6c68b6 (diff)
QAR-650 - Viewer RC 9 merge -> release (post cmake)
merge release@88802 Branch_1-20-Viewer-2-merge-1@89178 -> release
Diffstat (limited to 'indra/newview/pipeline.cpp')
-rw-r--r--indra/newview/pipeline.cpp145
1 files changed, 65 insertions, 80 deletions
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 18b99d8b74..643c1ec055 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -50,7 +50,7 @@
#include "v3color.h"
#include "llui.h"
#include "llglheaders.h"
-#include "llglimmediate.h"
+#include "llrender.h"
// newview includes
#include "llagent.h"
@@ -108,8 +108,6 @@
//#define DEBUG_INDICES
#endif
-void render_ui_and_swap_if_needed();
-
const F32 BACKLIGHT_DAY_MAGNITUDE_AVATAR = 0.2f;
const F32 BACKLIGHT_NIGHT_MAGNITUDE_AVATAR = 0.1f;
const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;
@@ -506,11 +504,7 @@ void LLPipeline::createGLBuffers()
res = 128;
mCubeBuffer = new LLCubeMap();
mCubeBuffer->initGL();
- glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mCubeBuffer->getGLName());
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ mCubeBuffer->setReflection();
for (U32 i = 0; i < 6; i++)
{
@@ -1180,7 +1174,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
LLGLDisable test(GL_ALPHA_TEST);
LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+ gGL.setColorMask(false, false);
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -1238,7 +1232,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
sCull->pushDrawable(gSky.mVOGroundp->mDrawable);
}
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
glPopMatrix();
if (to_texture)
@@ -1315,11 +1309,11 @@ void LLPipeline::doOcclusion(LLCamera& camera)
LLVertexBuffer::unbind();
if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION))
{
- glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE);
+ gGL.setColorMask(true, false, false, false);
}
else
{
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+ gGL.setColorMask(false, false);
}
LLGLDisable blend(GL_BLEND);
LLGLDisable test(GL_ALPHA_TEST);
@@ -1336,7 +1330,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)
}
}
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
glFlush();
}
@@ -1550,10 +1544,8 @@ void LLPipeline::shiftObjects(const LLVector3 &offset)
assertInitialized();
- //do a swap to indicate an invalid previous frame camera
- render_ui_and_swap_if_needed();
glClear(GL_DEPTH_BUFFER_BIT);
- gDisplaySwapBuffers = FALSE;
+ gDepthDirty = FALSE;
for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin();
iter != mShiftList.end(); iter++)
@@ -1978,7 +1970,10 @@ void LLPipeline::postSort(LLCamera& camera)
}
}
- //build render map
+ //rebuild groups
+ sCull->assertDrawMapsEmpty();
+
+ LLSpatialGroup::sNoDelete = FALSE;
for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
{
LLSpatialGroup* group = *i;
@@ -1989,6 +1984,18 @@ void LLPipeline::postSort(LLCamera& camera)
}
group->rebuildGeom();
+ }
+ LLSpatialGroup::sNoDelete = TRUE;
+
+ //build render map
+ for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
+ {
+ LLSpatialGroup* group = *i;
+ if (sUseOcclusion &&
+ group->isState(LLSpatialGroup::OCCLUDED))
+ {
+ continue;
+ }
for (LLSpatialGroup::draw_map_t::iterator j = group->mDrawMap.begin(); j != group->mDrawMap.end(); ++j)
{
@@ -2117,6 +2124,8 @@ void LLPipeline::postSort(LLCamera& camera)
} func;
LLSelectMgr::getInstance()->getSelection()->applyToTEs(&func);
}
+
+ LLSpatialGroup::sNoDelete = FALSE;
}
@@ -2507,7 +2516,7 @@ void LLPipeline::renderDebug()
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
// Debug stuff.
for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -2578,7 +2587,7 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
{
assertInitialized();
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
gPipeline.resetDrawOrders();
for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter)
@@ -2629,25 +2638,15 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
LLGLEnable alpha_test(GL_ALPHA_TEST);
if (gPickTransparent)
{
- glAlphaFunc(GL_GEQUAL, 0.0f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
}
else
{
- glAlphaFunc(GL_GREATER, 0.2f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.2f);
}
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
U32 prim_mask = LLVertexBuffer::MAP_VERTEX |
LLVertexBuffer::MAP_TEXCOORD;
@@ -2748,11 +2747,11 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
}
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
LLVertexBuffer::unbind();
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
}
void LLPipeline::renderFaceForUVSelect(LLFace* facep)
@@ -4127,10 +4126,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
if (width != res)
{
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ cube_map->setReflection();
for (U32 i = 0; i < 6; i++)
{
@@ -4211,9 +4207,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
gPipeline.stateSort(cube_cam, result);
glClearColor(0,0,0,0);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
stop_glerror();
gPipeline.renderGeom(cube_cam);
}
@@ -4329,7 +4325,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
U32 res = (U32) gSavedSettings.getS32("RenderReflectionRes");
enableLightsFullbright(LLColor4::white);
LLGLDepthTest depth(GL_FALSE);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
@@ -4343,10 +4339,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
if (width != res)
{
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ cube_out->setReflection();
for (U32 i = 0; i < 6; i++)
{
@@ -4373,7 +4366,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
stop_glerror();
glViewport(0,0,res, res);
- gGL.blendFunc(GL_ONE, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD);
cube_in->enableTexture(0);
//3-axis blur
for (U32 j = 0; j < 3; j++)
@@ -4403,7 +4396,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
gl_cube_face[i],
j < 2 ? mBlurCubeTexture[j] : cube_out->getGLName(), 0);
validate_framebuffer_object();
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
apply_cube_face_rotation(i);
@@ -4423,7 +4416,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
@@ -4431,7 +4424,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
cube_in->disableTexture();
gViewerWindow->setupViewport();
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
LLGLState::checkStates();
LLGLState::checkTextureChannels();
@@ -4472,7 +4465,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
tc2 /= (F32) res_mod;
}
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM);
gGL.color4f(1,1,1,1);
@@ -4491,7 +4484,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
LLGLDisable test(GL_ALPHA_TEST);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
glClearColor(0,0,0,0);
if (for_snapshot)
@@ -4503,7 +4496,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
//glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
//LLGLDisable blend(GL_BLEND);
LLGLEnable blend(GL_BLEND);
- gGL.blendFunc(GL_ONE, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD);
tc2.setVec(1,1);
gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
gGL.color4f(1,1,1,1);
@@ -4521,7 +4514,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
gGL.end();
gGL.flush();
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
gGL.flush();
@@ -4553,8 +4546,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount);
LLGLEnable blend_on(GL_BLEND);
LLGLEnable test(GL_ALPHA_TEST);
- glAlphaFunc(GL_GREATER, 0.f);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
glDisable(GL_TEXTURE_2D);
@@ -4764,24 +4757,16 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
LLGLDisable blend(GL_BLEND);
//tex unit 0
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
mGlow[1].bindTexture();
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, uv0);
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glEnable(GL_TEXTURE_RECTANGLE_ARB);
//tex unit 1
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -4796,14 +4781,14 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
glDisable(GL_TEXTURE_RECTANGLE_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
@@ -4891,11 +4876,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
{ //generate planar reflection map
LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
glClearColor(0,0,0,0);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
mWaterRef.bindTarget();
mWaterRef.getViewport(gGLViewport);
mWaterRef.clear();
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
stop_glerror();
@@ -4997,11 +4982,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
LLColor4& col = LLDrawPoolWater::sWaterFogColor;
glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
mWaterDis.bindTarget();
mWaterDis.getViewport(gGLViewport);
mWaterDis.clear();
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate)
{
@@ -5176,7 +5161,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
glh_set_current_modelview(mat);
glClearColor(0.0f,0.0f,0.0f,0.0f);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
glStencilMask(0xFFFFFFFF);
glClearStencil(0);
@@ -5223,14 +5208,14 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
if (muted)
{
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
}
else
{
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
+ gGL.setColorMask(false, true);
}
- gGL.blendFunc(GL_ONE, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD);
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
LLGLDepthTest depth(GL_FALSE, GL_FALSE);
@@ -5246,7 +5231,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
gGL.flush();
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}