diff options
author | Steven Bennetts <steve@lindenlab.com> | 2008-06-06 22:43:38 +0000 |
---|---|---|
committer | Steven Bennetts <steve@lindenlab.com> | 2008-06-06 22:43:38 +0000 |
commit | ad332810078a0bbb8fa08fcbfdf3d756de6914f6 (patch) | |
tree | 1608b2db5d620d323673607ea7ddadfba9d58bda /indra/newview/pipeline.cpp | |
parent | a7d9a543e587ffe84b355db7a2e8193bfe6c68b6 (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.cpp | 145 |
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); } |