00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034 #include "lldrawpoolterrain.h"
00035
00036 #include "llfasttimer.h"
00037
00038 #include "llagent.h"
00039 #include "llviewercontrol.h"
00040 #include "lldrawable.h"
00041 #include "llface.h"
00042 #include "llsky.h"
00043 #include "llsurface.h"
00044 #include "llsurfacepatch.h"
00045 #include "llviewerregion.h"
00046 #include "llvlcomposition.h"
00047 #include "llviewerparcelmgr.h"
00048 #include "llviewerparceloverlay.h"
00049 #include "llvosurfacepatch.h"
00050 #include "llviewercamera.h"
00051 #include "llviewerimagelist.h"
00052 #include "llworld.h"
00053 #include "pipeline.h"
00054 #include "llglslshader.h"
00055 #include "llglimmediate.h"
00056
00057 const F32 DETAIL_SCALE = 1.f/16.f;
00058 int DebugDetailMap = 0;
00059
00060 S32 LLDrawPoolTerrain::sDetailMode = 1;
00061 F32 LLDrawPoolTerrain::sDetailScale = DETAIL_SCALE;
00062 static LLGLSLShader* sShader = NULL;
00063
00064 LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerImage *texturep) :
00065 LLFacePool(POOL_TERRAIN),
00066 mTexturep(texturep)
00067 {
00068
00069 sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
00070 sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
00071 mAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient.tga",
00072 TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
00073 LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
00074 mAlphaRampImagep->bind(0);
00075 mAlphaRampImagep->setClamp(TRUE, TRUE);
00076
00077 m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c",
00078 TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
00079 LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
00080 m2DAlphaRampImagep->bind(0);
00081 m2DAlphaRampImagep->setClamp(TRUE, TRUE);
00082
00083 mTexturep->setBoostLevel(LLViewerImage::BOOST_TERRAIN);
00084
00085 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
00086 }
00087
00088 LLDrawPoolTerrain::~LLDrawPoolTerrain()
00089 {
00090 llassert( gPipeline.findPool( getType(), getTexture() ) == NULL );
00091 }
00092
00093
00094 LLDrawPool *LLDrawPoolTerrain::instancePool()
00095 {
00096 return new LLDrawPoolTerrain(mTexturep);
00097 }
00098
00099
00100 void LLDrawPoolTerrain::prerender()
00101 {
00102 mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_ENVIRONMENT);
00103 if (mVertexShaderLevel > 0)
00104 {
00105 sDetailMode = 1;
00106 }
00107 else
00108 {
00109 sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
00110 }
00111 }
00112
00113 void LLDrawPoolTerrain::beginRenderPass( S32 pass )
00114 {
00115 LLFastTimer t(LLFastTimer::FTM_RENDER_TERRAIN);
00116 LLFacePool::beginRenderPass(pass);
00117
00118 sShader = LLPipeline::sUnderWaterRender ?
00119 &gTerrainWaterProgram :
00120 &gTerrainProgram;
00121
00122 if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0)
00123 {
00124 sShader->bind();
00125 }
00126 }
00127
00128 void LLDrawPoolTerrain::endRenderPass( S32 pass )
00129 {
00130 LLFastTimer t(LLFastTimer::FTM_RENDER_TERRAIN);
00131 LLFacePool::endRenderPass(pass);
00132
00133 if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0) {
00134 sShader->unbind();
00135 }
00136 }
00137
00138
00139 S32 LLDrawPoolTerrain::getDetailMode()
00140 {
00141 return sDetailMode;
00142 }
00143
00144 void LLDrawPoolTerrain::render(S32 pass)
00145 {
00146 LLFastTimer t(LLFastTimer::FTM_RENDER_TERRAIN);
00147
00148 if (mDrawFace.empty())
00149 {
00150 return;
00151 }
00152
00153
00154 LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion();
00155 LLVLComposition *compp = regionp->getComposition();
00156 for (S32 i = 0; i < 4; i++)
00157 {
00158 compp->mDetailTextures[i]->setBoostLevel(LLViewerImage::BOOST_TERRAIN);
00159 compp->mDetailTextures[i]->addTextureStats(1024.f*1024.f);
00160 }
00161
00162 if (!gGLManager.mHasMultitexture)
00163 {
00164
00165 renderSimple();
00166 return;
00167 }
00168
00169 if (!gGLManager.mHasARBEnvCombine || (gGLManager.mNumTextureUnits < 2))
00170 {
00171 renderSimple();
00172 return;
00173 }
00174
00175 LLGLSPipeline gls;
00176 LLOverrideFaceColor override(this, 1.f, 1.f, 1.f, 1.f);
00177
00178 if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0)
00179 {
00180 gPipeline.enableLightsDynamic();
00181 renderFullShader();
00182 }
00183 else
00184 {
00185 gPipeline.enableLightsStatic();
00186
00187 if (sDetailMode == 0){
00188 renderSimple();
00189 } else if (gGLManager.mNumTextureUnits < 4){
00190 renderFull2TU();
00191 } else {
00192 renderFull4TU();
00193 }
00194 }
00195
00196
00197 if (gSavedSettings.getBOOL("ShowParcelOwners"))
00198 {
00199 if (mVertexShaderLevel > 1)
00200 {
00201 LLGLSLShader* old_shader = sShader;
00202 sShader->unbind();
00203 sShader = &gObjectFullbrightProgram;
00204 sShader->bind();
00205 renderOwnership();
00206 sShader = old_shader;
00207 sShader->bind();
00208 }
00209 else
00210 {
00211 gPipeline.disableLights();
00212 renderOwnership();
00213 }
00214 }
00215 }
00216
00217
00218 void LLDrawPoolTerrain::renderFullShader()
00219 {
00220
00221 LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion();
00222 LLVLComposition *compp = regionp->getComposition();
00223 LLViewerImage *detail_texture0p = compp->mDetailTextures[0];
00224 LLViewerImage *detail_texture1p = compp->mDetailTextures[1];
00225 LLViewerImage *detail_texture2p = compp->mDetailTextures[2];
00226 LLViewerImage *detail_texture3p = compp->mDetailTextures[3];
00227
00228 LLVector3d region_origin_global = gAgent.getRegion()->getOriginGlobal();
00229 F32 offset_x = (F32)fmod(region_origin_global.mdV[VX], 1.0/(F64)sDetailScale)*sDetailScale;
00230 F32 offset_y = (F32)fmod(region_origin_global.mdV[VY], 1.0/(F64)sDetailScale)*sDetailScale;
00231
00232 LLVector4 tp0, tp1;
00233
00234 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
00235 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
00236
00237
00238
00239
00240 S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0);
00241 LLViewerImage::bindTexture(detail_texture0p,detail0);
00242 glActiveTextureARB(GL_TEXTURE0_ARB);
00243
00244 glEnable(GL_TEXTURE_GEN_S);
00245 glEnable(GL_TEXTURE_GEN_T);
00246 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00247 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00248
00249 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00250 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00251 glMatrixMode(GL_TEXTURE);
00252 glLoadIdentity();
00253 glMatrixMode(GL_MODELVIEW);
00254
00255
00256
00257
00258 S32 detail1 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL1);
00259 LLViewerImage::bindTexture(detail_texture1p,detail1);
00260
00262 glActiveTextureARB(GL_TEXTURE1_ARB);
00263 glMatrixMode(GL_TEXTURE);
00264 glLoadIdentity();
00265 glMatrixMode(GL_MODELVIEW);
00266
00267
00268
00269 S32 detail2 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL2);
00270 LLViewerImage::bindTexture(detail_texture2p,detail2);
00271 glEnable(GL_TEXTURE_2D);
00272
00274 glActiveTextureARB(GL_TEXTURE2_ARB);
00275 glMatrixMode(GL_TEXTURE);
00276 glLoadIdentity();
00277 glTranslatef(-2.f, 0.f, 0.f);
00278 glMatrixMode(GL_MODELVIEW);
00279
00280
00281
00282
00283 S32 detail3 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL3);
00284 LLViewerImage::bindTexture(detail_texture3p,detail3);
00285
00287 glActiveTextureARB(GL_TEXTURE3_ARB);
00288 glMatrixMode(GL_TEXTURE);
00289 glLoadIdentity();
00290 glTranslatef(-1.f, 0.f, 0.f);
00291 glMatrixMode(GL_MODELVIEW);
00292
00293
00294
00295
00296 S32 alpha_ramp = sShader->enableTexture(LLShaderMgr::TERRAIN_ALPHARAMP);
00297 LLViewerImage::bindTexture(m2DAlphaRampImagep,alpha_ramp);
00298
00299
00300 drawLoop();
00301
00302
00303 sShader->disableTexture(LLShaderMgr::TERRAIN_ALPHARAMP);
00304 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL0);
00305 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL1);
00306 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL2);
00307 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3);
00308
00309 LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D);
00310 glActiveTextureARB(GL_TEXTURE4_ARB);
00311 glDisable(GL_TEXTURE_2D);
00312 glDisable(GL_TEXTURE_GEN_S);
00313 glDisable(GL_TEXTURE_GEN_T);
00314 glMatrixMode(GL_TEXTURE);
00315 glLoadIdentity();
00316 glMatrixMode(GL_MODELVIEW);
00317
00318 LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D);
00319 glActiveTextureARB(GL_TEXTURE3_ARB);
00320 glDisable(GL_TEXTURE_2D);
00321 glDisable(GL_TEXTURE_GEN_S);
00322 glDisable(GL_TEXTURE_GEN_T);
00323 glMatrixMode(GL_TEXTURE);
00324 glLoadIdentity();
00325 glMatrixMode(GL_MODELVIEW);
00326
00327 LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D);
00328 glActiveTextureARB(GL_TEXTURE2_ARB);
00329 glDisable(GL_TEXTURE_2D);
00330 glDisable(GL_TEXTURE_GEN_S);
00331 glDisable(GL_TEXTURE_GEN_T);
00332 glMatrixMode(GL_TEXTURE);
00333 glLoadIdentity();
00334 glMatrixMode(GL_MODELVIEW);
00335
00336 LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D);
00337 glActiveTextureARB(GL_TEXTURE1_ARB);
00338 glDisable(GL_TEXTURE_2D);
00339 glDisable(GL_TEXTURE_GEN_S);
00340 glDisable(GL_TEXTURE_GEN_T);
00341 glMatrixMode(GL_TEXTURE);
00342 glLoadIdentity();
00343 glMatrixMode(GL_MODELVIEW);
00344
00345
00346
00347
00348 LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D);
00349 glActiveTextureARB(GL_TEXTURE0_ARB);
00350 glEnable(GL_TEXTURE_2D);
00351 glDisable(GL_TEXTURE_GEN_S);
00352 glDisable(GL_TEXTURE_GEN_T);
00353 glMatrixMode(GL_TEXTURE);
00354 glLoadIdentity();
00355 glMatrixMode(GL_MODELVIEW);
00356 }
00357
00358 void LLDrawPoolTerrain::renderFull4TU()
00359 {
00360 glEnableClientState(GL_VERTEX_ARRAY);
00361 glEnableClientState(GL_NORMAL_ARRAY);
00362
00363
00364 LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion();
00365 LLVLComposition *compp = regionp->getComposition();
00366 LLViewerImage *detail_texture0p = compp->mDetailTextures[0];
00367 LLViewerImage *detail_texture1p = compp->mDetailTextures[1];
00368 LLViewerImage *detail_texture2p = compp->mDetailTextures[2];
00369 LLViewerImage *detail_texture3p = compp->mDetailTextures[3];
00370
00371 LLVector3d region_origin_global = gAgent.getRegion()->getOriginGlobal();
00372 F32 offset_x = (F32)fmod(region_origin_global.mdV[VX], 1.0/(F64)sDetailScale)*sDetailScale;
00373 F32 offset_y = (F32)fmod(region_origin_global.mdV[VY], 1.0/(F64)sDetailScale)*sDetailScale;
00374
00375 LLVector4 tp0, tp1;
00376
00377 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
00378 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
00379
00380 gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
00381
00382
00383
00384
00385
00386
00387
00388 glActiveTextureARB(GL_TEXTURE0_ARB);
00389 LLViewerImage::bindTexture(detail_texture0p,0);
00390 glClientActiveTextureARB(GL_TEXTURE0_ARB);
00391
00392 glEnable(GL_TEXTURE_GEN_S);
00393 glEnable(GL_TEXTURE_GEN_T);
00394 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00395 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00396
00397 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00398 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00399
00400 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00401 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
00402
00403 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
00404 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00405
00406
00407
00408
00409 LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
00410 glActiveTextureARB(GL_TEXTURE1_ARB);
00411 glEnable(GL_TEXTURE_2D);
00412 glClientActiveTextureARB(GL_TEXTURE1_ARB);
00413 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
00414
00415
00416 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00417 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
00418 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00419
00420 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
00421 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00422 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
00423 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00424
00425
00426
00427
00428 LLViewerImage::bindTexture(detail_texture1p,2);
00429 glActiveTextureARB(GL_TEXTURE2_ARB);
00430 glEnable(GL_TEXTURE_2D);
00431 glClientActiveTextureARB(GL_TEXTURE2_ARB);
00432
00433 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
00434 glEnable(GL_TEXTURE_GEN_S);
00435 glEnable(GL_TEXTURE_GEN_T);
00436 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00437 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00438 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00439 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00440
00441 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00442 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
00443
00444 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
00445 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00446 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
00447 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00448 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB);
00449 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA);
00450
00451
00452
00453
00454 LLViewerImage::bindTexture(detail_texture1p,3);
00455 glActiveTextureARB(GL_TEXTURE3_ARB);
00456 glEnable(GL_TEXTURE_2D);
00457 glClientActiveTextureARB(GL_TEXTURE3_ARB);
00458
00459
00460 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00461 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
00462
00463 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
00464 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00465 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
00466 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00467
00468 glActiveTextureARB(GL_TEXTURE0_ARB);
00469 glClientActiveTextureARB(GL_TEXTURE0_ARB);
00470
00471
00472 drawLoop();
00473
00474
00475
00476
00477
00478
00479 glActiveTextureARB(GL_TEXTURE0_ARB);
00480 LLViewerImage::bindTexture(detail_texture3p,0);
00481 glClientActiveTextureARB(GL_TEXTURE0_ARB);
00482
00483 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
00484 glEnable(GL_TEXTURE_GEN_S);
00485 glEnable(GL_TEXTURE_GEN_T);
00486 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00487 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00488 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00489 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00490
00491 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00492 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
00493
00494 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
00495 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00496
00497
00498
00499
00500
00501 LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
00502 glActiveTextureARB(GL_TEXTURE1_ARB);
00503 glEnable(GL_TEXTURE_2D);
00504 glClientActiveTextureARB(GL_TEXTURE1_ARB);
00505
00506 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
00507
00508
00509 glMatrixMode(GL_TEXTURE);
00510 glLoadIdentity();
00511 glTranslatef(-2.f, 0.f, 0.f);
00512
00513
00514 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00515 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
00516 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00517
00518 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
00519 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00520 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
00521 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00522
00523
00524
00525
00526
00527 LLViewerImage::bindTexture(detail_texture2p,2);
00528 glActiveTextureARB(GL_TEXTURE2_ARB);
00529 glEnable(GL_TEXTURE_2D);
00530 glClientActiveTextureARB(GL_TEXTURE2_ARB);
00531
00532 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
00533 glEnable(GL_TEXTURE_GEN_S);
00534 glEnable(GL_TEXTURE_GEN_T);
00535 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00536 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00537 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00538 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00539
00540 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00541 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
00542
00543 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
00544 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00545 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
00546 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00547 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB);
00548 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
00549
00550
00551
00552
00553
00554 LLViewerImage::bindTexture(m2DAlphaRampImagep,3);
00555 glActiveTextureARB(GL_TEXTURE3_ARB);
00556
00557 glEnable(GL_TEXTURE_2D);
00558 glClientActiveTextureARB(GL_TEXTURE3_ARB);
00559
00560 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
00561
00562
00563 glMatrixMode(GL_TEXTURE);
00564 glLoadIdentity();
00565 glTranslatef(-1.f, 0.f, 0.f);
00566
00567
00568 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00569 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
00570 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00571
00572 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
00573 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00574 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
00575 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00576 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
00577 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00578
00579 glActiveTextureARB(GL_TEXTURE0_ARB);
00580 glClientActiveTextureARB(GL_TEXTURE0_ARB);
00581 {
00582 LLGLEnable blend(GL_BLEND);
00583 drawLoop();
00584 }
00585
00586 LLVertexBuffer::unbind();
00587
00588 LLImageGL::unbindTexture(3, GL_TEXTURE_2D);
00589 glActiveTextureARB(GL_TEXTURE3_ARB);
00590 glClientActiveTextureARB(GL_TEXTURE3_ARB);
00591 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
00592 glDisable(GL_TEXTURE_2D);
00593 glMatrixMode(GL_TEXTURE);
00594 glLoadIdentity();
00595 glMatrixMode(GL_MODELVIEW);
00596
00597 LLImageGL::unbindTexture(2, GL_TEXTURE_2D);
00598 glActiveTextureARB(GL_TEXTURE2_ARB);
00599 glClientActiveTextureARB(GL_TEXTURE2_ARB);
00600 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
00601 glDisable(GL_TEXTURE_2D);
00602 glDisable(GL_TEXTURE_GEN_S);
00603 glDisable(GL_TEXTURE_GEN_T);
00604 glMatrixMode(GL_TEXTURE);
00605 glLoadIdentity();
00606 glMatrixMode(GL_MODELVIEW);
00607
00608 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
00609 glActiveTextureARB(GL_TEXTURE1_ARB);
00610 glClientActiveTextureARB(GL_TEXTURE1_ARB);
00611 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
00612 glDisable(GL_TEXTURE_2D);
00613 glMatrixMode(GL_TEXTURE);
00614 glLoadIdentity();
00615 glMatrixMode(GL_MODELVIEW);
00616
00617
00618 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00619
00620
00621
00622
00623 glActiveTextureARB(GL_TEXTURE0_ARB);
00624 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
00625 glClientActiveTextureARB(GL_TEXTURE0_ARB);
00626 glActiveTextureARB(GL_TEXTURE0_ARB);
00627 glDisable(GL_TEXTURE_GEN_S);
00628 glDisable(GL_TEXTURE_GEN_T);
00629 glMatrixMode(GL_TEXTURE);
00630 glLoadIdentity();
00631 glMatrixMode(GL_MODELVIEW);
00632
00633
00634 glDisableClientState(GL_NORMAL_ARRAY);
00635 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
00636 }
00637
00638 void LLDrawPoolTerrain::renderFull2TU()
00639 {
00640
00641 LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion();
00642 LLVLComposition *compp = regionp->getComposition();
00643 LLViewerImage *detail_texture0p = compp->mDetailTextures[0];
00644 LLViewerImage *detail_texture1p = compp->mDetailTextures[1];
00645 LLViewerImage *detail_texture2p = compp->mDetailTextures[2];
00646 LLViewerImage *detail_texture3p = compp->mDetailTextures[3];
00647
00648 LLVector3d region_origin_global = gAgent.getRegion()->getOriginGlobal();
00649 F32 offset_x = (F32)fmod(region_origin_global.mdV[VX], 1.0/(F64)sDetailScale)*sDetailScale;
00650 F32 offset_y = (F32)fmod(region_origin_global.mdV[VY], 1.0/(F64)sDetailScale)*sDetailScale;
00651
00652 LLVector4 tp0, tp1;
00653
00654 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
00655 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
00656
00657 gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
00658
00659
00660
00661
00662
00663
00664
00665 LLViewerImage::bindTexture(detail_texture0p,0);
00666 glEnable(GL_TEXTURE_GEN_S);
00667 glEnable(GL_TEXTURE_GEN_T);
00668 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00669 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00670
00671 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00672 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00673
00674 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00675 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
00676
00677 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
00678 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00679 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
00680 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00681
00682 drawLoop();
00683
00684
00685
00686
00687
00688
00689
00690 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
00691
00692 glDisable(GL_TEXTURE_GEN_S);
00693 glDisable(GL_TEXTURE_GEN_T);
00694
00695
00696 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00697 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
00698 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00699
00700 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
00701 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00702 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
00703 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00704
00705
00706
00707
00708
00709 LLViewerImage::bindTexture(detail_texture1p,1);
00710 glActiveTextureARB(GL_TEXTURE1_ARB);
00711 glEnable(GL_TEXTURE_2D);
00712 glEnable(GL_TEXTURE_GEN_S);
00713 glEnable(GL_TEXTURE_GEN_T);
00714 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00715 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00716 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00717 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00718
00719 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00720 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
00721 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00722
00723 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
00724 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00725 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
00726 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00727 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
00728 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00729
00730 glActiveTextureARB(GL_TEXTURE0_ARB);
00731 {
00732 LLGLEnable blend(GL_BLEND);
00733 drawLoop();
00734 }
00735
00736
00737
00738
00739
00740
00741 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
00742
00743 glMatrixMode(GL_TEXTURE);
00744 glLoadIdentity();
00745 glTranslatef(-1.f, 0.f, 0.f);
00746
00747
00748 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00749 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
00750 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00751
00752 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
00753 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00754 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
00755 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00756
00757
00758
00759
00760
00761 LLViewerImage::bindTexture(detail_texture2p,1);
00762 glEnable(GL_TEXTURE_2D);
00763
00764 glEnable(GL_TEXTURE_GEN_S);
00765 glEnable(GL_TEXTURE_GEN_T);
00766 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00767 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00768 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00769 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00770
00771 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00772 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
00773 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00774
00775 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
00776 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00777 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
00778 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00779 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
00780 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00781
00782 {
00783 LLGLEnable blend(GL_BLEND);
00784 drawLoop();
00785 }
00786
00787
00788
00789
00790
00791
00792
00793 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
00794
00795 glMatrixMode(GL_TEXTURE);
00796 glLoadIdentity();
00797 glTranslatef(-2.f, 0.f, 0.f);
00798
00799
00800 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00801 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
00802 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00803
00804 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
00805 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00806 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
00807 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00808
00809
00810
00811 LLViewerImage::bindTexture(detail_texture3p,1);
00812 glActiveTextureARB(GL_TEXTURE1_ARB);
00813 glEnable(GL_TEXTURE_2D);
00814 glEnable(GL_TEXTURE_GEN_S);
00815 glEnable(GL_TEXTURE_GEN_T);
00816 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00817 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00818 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00819 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00820
00821 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00822 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
00823 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
00824
00825 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
00826 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00827 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
00828 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00829 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
00830 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
00831
00832 glActiveTextureARB(GL_TEXTURE0_ARB);
00833 {
00834 LLGLEnable blend(GL_BLEND);
00835 drawLoop();
00836 }
00837
00838
00839 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00840
00841
00842 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
00843 glActiveTextureARB(GL_TEXTURE1_ARB);
00844 glDisable(GL_TEXTURE_2D);
00845 glDisable(GL_TEXTURE_GEN_S);
00846 glDisable(GL_TEXTURE_GEN_T);
00847 glMatrixMode(GL_TEXTURE);
00848 glLoadIdentity();
00849 glMatrixMode(GL_MODELVIEW);
00850
00851
00852
00853
00854 glActiveTextureARB(GL_TEXTURE0_ARB);
00855 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
00856
00857 glActiveTextureARB(GL_TEXTURE0_ARB);
00858 glDisable(GL_TEXTURE_GEN_S);
00859 glDisable(GL_TEXTURE_GEN_T);
00860 glMatrixMode(GL_TEXTURE);
00861 glLoadIdentity();
00862 glMatrixMode(GL_MODELVIEW);
00863
00864
00865 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
00866 }
00867
00868
00869 void LLDrawPoolTerrain::renderSimple()
00870 {
00871 LLVector4 tp0, tp1;
00872
00873
00874
00875
00876
00877 mTexturep->addTextureStats(1024.f*1024.f);
00878 mTexturep->bind(0);
00879
00880 glActiveTextureARB(GL_TEXTURE0_ARB);
00881 glEnable(GL_TEXTURE_2D);
00882
00883 LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent();
00884 F32 tscale = 1.f/256.f;
00885 tp0.setVec(tscale, 0.f, 0.0f, -1.f*(origin_agent.mV[0]/256.f));
00886 tp1.setVec(0.f, tscale, 0.0f, -1.f*(origin_agent.mV[1]/256.f));
00887
00888 glEnable(GL_TEXTURE_GEN_S);
00889 glEnable(GL_TEXTURE_GEN_T);
00890 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00891 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
00892 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
00893 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
00894
00895 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
00896 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
00897
00898 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
00899 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
00900 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
00901 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
00902
00903 drawLoop();
00904
00905
00906
00907
00908 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
00909 glActiveTextureARB(GL_TEXTURE0_ARB);
00910 glDisable(GL_TEXTURE_GEN_S);
00911 glDisable(GL_TEXTURE_GEN_T);
00912 glMatrixMode(GL_TEXTURE);
00913 glLoadIdentity();
00914 glMatrixMode(GL_MODELVIEW);
00915
00916
00917 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
00918 }
00919
00920
00921
00922 void LLDrawPoolTerrain::renderOwnership()
00923 {
00924 LLGLSPipelineAlpha gls_pipeline_alpha;
00925
00926 llassert(!mDrawFace.empty());
00927
00928
00929
00930
00931 LLFace *facep = mDrawFace[0];
00932 LLDrawable *drawablep = facep->getDrawable();
00933 const LLViewerObject *objectp = drawablep->getVObj();
00934 const LLVOSurfacePatch *vo_surface_patchp = (LLVOSurfacePatch *)objectp;
00935 LLSurfacePatch *surface_patchp = vo_surface_patchp->getPatch();
00936 LLSurface *surfacep = surface_patchp->getSurface();
00937 LLViewerRegion *regionp = surfacep->getRegion();
00938 LLViewerParcelOverlay *overlayp = regionp->getParcelOverlay();
00939 LLImageGL *texturep = overlayp->getTexture();
00940
00941 LLViewerImage::bindTexture(texturep);
00942
00943
00944
00945
00946
00947 glMatrixMode(GL_TEXTURE);
00948 glPushMatrix();
00949
00950 const F32 TEXTURE_FUDGE = 257.f / 256.f;
00951 glScalef( TEXTURE_FUDGE, TEXTURE_FUDGE, 1.f );
00952 for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
00953 iter != mDrawFace.end(); iter++)
00954 {
00955 LLFace *facep = *iter;
00956 facep->renderIndexed(LLVertexBuffer::MAP_VERTEX |
00957 LLVertexBuffer::MAP_TEXCOORD);
00958 }
00959
00960 glMatrixMode(GL_TEXTURE);
00961 glPopMatrix();
00962 glMatrixMode(GL_MODELVIEW);
00963 }
00964
00965
00966 void LLDrawPoolTerrain::renderForSelect()
00967 {
00968 if (mDrawFace.empty())
00969 {
00970 return;
00971 }
00972
00973
00974 LLImageGL::unbindTexture(0);
00975
00976 for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
00977 iter != mDrawFace.end(); iter++)
00978 {
00979 LLFace *facep = *iter;
00980 if (!facep->getDrawable()->isDead() && (facep->getDrawable()->getVObj()->mGLName))
00981 {
00982 facep->renderForSelect(LLVertexBuffer::MAP_VERTEX);
00983 }
00984 }
00985 }
00986
00987 void LLDrawPoolTerrain::dirtyTextures(const std::set<LLViewerImage*>& textures)
00988 {
00989 if (textures.find(mTexturep) != textures.end())
00990 {
00991 for (std::vector<LLFace*>::iterator iter = mReferences.begin();
00992 iter != mReferences.end(); iter++)
00993 {
00994 LLFace *facep = *iter;
00995 gPipeline.markTextured(facep->getDrawable());
00996 }
00997 }
00998 }
00999
01000 LLViewerImage *LLDrawPoolTerrain::getTexture()
01001 {
01002 return mTexturep;
01003 }
01004
01005 LLViewerImage *LLDrawPoolTerrain::getDebugTexture()
01006 {
01007 return mTexturep;
01008 }
01009
01010
01011 LLColor3 LLDrawPoolTerrain::getDebugColor() const
01012 {
01013 return LLColor3(0.f, 0.f, 1.f);
01014 }