void LLDrawPoolTerrain::render(S32 pass) { LLFastTimer t(FTM_RENDER_TERRAIN); if (mDrawFace.empty()) { return; } // Hack! Get the region that this draw pool is rendering from! LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion(); LLVLComposition *compp = regionp->getComposition(); for (S32 i = 0; i < 4; i++) { compp->mDetailTextures[i]->setBoostLevel(LLGLTexture::BOOST_TERRAIN); compp->mDetailTextures[i]->addTextureStats(1024.f*1024.f); // assume large pixel area } LLOverrideFaceColor override(this, 1.f, 1.f, 1.f, 1.f); if (!gGLManager.mHasMultitexture) { // No multitexture, render simple land. renderSimple(); // Render without multitexture return; } // Render simplified land if video card can't do sufficient multitexturing if (!gGLManager.mHasARBEnvCombine || (gGLManager.mNumTextureUnits < 2)) { renderSimple(); // Render without multitexture return; } LLGLSPipeline gls; if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0) { gPipeline.enableLightsDynamic(); renderFullShader(); } else { gPipeline.enableLightsStatic(); if (sDetailMode == 0) { renderSimple(); } else if (gGLManager.mNumTextureUnits < 4) { renderFull2TU(); gGL.setSceneBlendType(LLRender::BT_ALPHA); } else { renderFull4TU(); gGL.setSceneBlendType(LLRender::BT_ALPHA); } } // Special-case for land ownership feedback static const LLCachedControl<bool> show_parcel_owners("ShowParcelOwners",false); if (show_parcel_owners) { if (mVertexShaderLevel > 1) { //use fullbright shader for highlighting LLGLSLShader* old_shader = sShader; sShader->unbind(); sShader = &gHighlightProgram; sShader->bind(); gGL.diffuseColor4f(1,1,1,1); LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL); glPolygonOffset(-1.0f, -1.0f); renderOwnership(); sShader = old_shader; sShader->bind(); } else { gPipeline.disableLights(); renderOwnership(); } } }
void LLDrawPoolTerrain::render(S32 pass) { LLFastTimer t(FTM_RENDER_TERRAIN); if (mDrawFace.empty()) { return; } // Hack! Get the region that this draw pool is rendering from! LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion(); LLVLComposition *compp = regionp->getComposition(); for (S32 i = 0; i < 4; i++) { compp->mDetailTextures[i]->setBoostLevel(LLViewerTexture::BOOST_TERRAIN); compp->mDetailTextures[i]->addTextureStats(1024.f*1024.f); // assume large pixel area } if (!gGLManager.mHasMultitexture) { // No multitexture, render simple land. renderSimple(); // Render without multitexture return; } // Render simplified land if video card can't do sufficient multitexturing if (!gGLManager.mHasARBEnvCombine || (gGLManager.mNumTextureUnits < 2)) { renderSimple(); // Render without multitexture return; } LLGLSPipeline gls; LLOverrideFaceColor override(this, 1.f, 1.f, 1.f, 1.f); if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0) { gPipeline.enableLightsDynamic(); renderFullShader(); } else { gPipeline.enableLightsStatic(); if (sDetailMode == 0) { renderSimple(); } else if (gGLManager.mNumTextureUnits < 4) { renderFull2TU(); } else { renderFull4TU(); } } // Special-case for land ownership feedback if (gSavedSettings.getBOOL("ShowParcelOwners")) { if (mVertexShaderLevel > 1) { //use fullbright shader for highlighting LLGLSLShader* old_shader = sShader; sShader->unbind(); sShader = &gObjectFullbrightProgram; sShader->bind(); renderOwnership(); sShader = old_shader; sShader->bind(); } else { gPipeline.disableLights(); renderOwnership(); } } }
void LLDrawPoolTerrain::render(S32 pass) { LLFastTimer t(LLFastTimer::FTM_RENDER_TERRAIN); if (mDrawFace.empty()) { return; } // Hack! Get the region that this draw pool is rendering from! LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion(); LLVLComposition *compp = regionp->getComposition(); for (S32 i = 0; i < 4; i++) { compp->mDetailTextures[i]->setBoostLevel(LLViewerImage::BOOST_TERRAIN); compp->mDetailTextures[i]->addTextureStats(1024.f*1024.f); // assume large pixel area } if (!gGLManager.mHasMultitexture) { // No mulititexture, render simple land. renderSimple(); // Render without multitexture return; } // Render simplified land if video card can't do sufficient multitexturing if (!gGLManager.mHasARBEnvCombine || (gGLManager.mNumTextureUnits < 2)) { renderSimple(); // Render without multitexture return; } LLGLSPipeline gls; LLOverrideFaceColor override(this, 1.f, 1.f, 1.f, 1.f); if (mVertexShaderLevel > 0) { gPipeline.enableLightsDynamic(1.f); renderFull4TUShader(); } else { gPipeline.enableLightsStatic(1.f); switch (sDetailMode) { case 0: renderSimple(); break; default: if (gGLManager.mNumTextureUnits < 4) { renderFull2TU(); } else { renderFull4TU(); } break; } } // Special-case for land ownership feedback if (gSavedSettings.getBOOL("ShowParcelOwners")) { gPipeline.disableLights(); if ((mVertexShaderLevel > 0)) { gHighlightProgram.bind(); gHighlightProgram.vertexAttrib4f(LLShaderMgr::MATERIAL_COLOR,1,1,1,1); renderOwnership(); gTerrainProgram.bind(); } else { renderOwnership(); } } }