aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/lldrawpoolavatar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/newview/lldrawpoolavatar.cpp')
-rw-r--r--linden/indra/newview/lldrawpoolavatar.cpp59
1 files changed, 26 insertions, 33 deletions
diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp
index 4e1e390..946c439 100644
--- a/linden/indra/newview/lldrawpoolavatar.cpp
+++ b/linden/indra/newview/lldrawpoolavatar.cpp
@@ -45,7 +45,7 @@
45#include "llviewerregion.h" 45#include "llviewerregion.h"
46#include "noise.h" 46#include "noise.h"
47#include "pipeline.h" 47#include "pipeline.h"
48#include "llglslshader.h" 48#include "llviewershadermgr.h"
49#include "llappviewer.h" 49#include "llappviewer.h"
50 50
51static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK; 51static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK;
@@ -53,8 +53,6 @@ static U32 sBufferUsage = GL_STREAM_DRAW_ARB;
53static U32 sShaderLevel = 0; 53static U32 sShaderLevel = 0;
54static LLGLSLShader* sVertexProgram = NULL; 54static LLGLSLShader* sVertexProgram = NULL;
55 55
56extern BOOL gUseGLPick;
57
58F32 CLOTHING_GRAVITY_EFFECT = 0.7f; 56F32 CLOTHING_GRAVITY_EFFECT = 0.7f;
59F32 CLOTHING_ACCEL_FORCE_FACTOR = 0.2f; 57F32 CLOTHING_ACCEL_FORCE_FACTOR = 0.2f;
60const S32 NUM_TEST_AVATARS = 30; 58const S32 NUM_TEST_AVATARS = 30;
@@ -106,13 +104,12 @@ BOOL gRenderAvatar = TRUE;
106 104
107S32 LLDrawPoolAvatar::getVertexShaderLevel() const 105S32 LLDrawPoolAvatar::getVertexShaderLevel() const
108{ 106{
109 return sShaderLevel; 107 return (S32) LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR);
110 //return (S32) LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR);
111} 108}
112 109
113void LLDrawPoolAvatar::prerender() 110void LLDrawPoolAvatar::prerender()
114{ 111{
115 mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR); 112 mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR);
116 sShaderLevel = mVertexShaderLevel; 113 sShaderLevel = mVertexShaderLevel;
117 114
118 if (sShaderLevel > 0) 115 if (sShaderLevel > 0)
@@ -289,16 +286,16 @@ void LLDrawPoolAvatar::beginSkinned()
289 sVertexProgram->bind(); 286 sVertexProgram->bind();
290 if (sShaderLevel >= SHADER_LEVEL_CLOTH) 287 if (sShaderLevel >= SHADER_LEVEL_CLOTH)
291 { 288 {
292 enable_cloth_weights(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_CLOTHING]); 289 enable_cloth_weights(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_CLOTHING]);
293 } 290 }
294 enable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 291 enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
295 292
296 if (sShaderLevel >= SHADER_LEVEL_BUMP) 293 if (sShaderLevel >= SHADER_LEVEL_BUMP)
297 { 294 {
298 enable_binormals(sVertexProgram->mAttribute[LLShaderMgr::BINORMAL]); 295 enable_binormals(sVertexProgram->mAttribute[LLViewerShaderMgr::BINORMAL]);
299 } 296 }
300 297
301 sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP); 298 sVertexProgram->enableTexture(LLViewerShaderMgr::BUMP_MAP);
302 gGL.getTexUnit(0)->activate(); 299 gGL.getTexUnit(0)->activate();
303 } 300 }
304 else 301 else
@@ -318,16 +315,16 @@ void LLDrawPoolAvatar::endSkinned()
318 if (sShaderLevel > 0) 315 if (sShaderLevel > 0)
319 { 316 {
320 sRenderingSkinned = FALSE; 317 sRenderingSkinned = FALSE;
321 sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP); 318 sVertexProgram->disableTexture(LLViewerShaderMgr::BUMP_MAP);
322 gGL.getTexUnit(0)->activate(); 319 gGL.getTexUnit(0)->activate();
323 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 320 disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
324 if (sShaderLevel >= SHADER_LEVEL_BUMP) 321 if (sShaderLevel >= SHADER_LEVEL_BUMP)
325 { 322 {
326 disable_binormals(sVertexProgram->mAttribute[LLShaderMgr::BINORMAL]); 323 disable_binormals(sVertexProgram->mAttribute[LLViewerShaderMgr::BINORMAL]);
327 } 324 }
328 if ((sShaderLevel >= SHADER_LEVEL_CLOTH)) 325 if ((sShaderLevel >= SHADER_LEVEL_CLOTH))
329 { 326 {
330 disable_cloth_weights(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_CLOTHING]); 327 disable_cloth_weights(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_CLOTHING]);
331 } 328 }
332 329
333 sVertexProgram->unbind(); 330 sVertexProgram->unbind();
@@ -466,7 +463,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
466 463
467 if (sShaderLevel > 0) 464 if (sShaderLevel > 0)
468 { 465 {
469 gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX]; 466 gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX];
470 } 467 }
471 468
472 if ((sShaderLevel >= SHADER_LEVEL_CLOTH)) 469 if ((sShaderLevel >= SHADER_LEVEL_CLOTH))
@@ -482,16 +479,16 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
482 wind = wind * rot_mat; 479 wind = wind * rot_mat;
483 wind.mV[VW] = avatarp->mWindVec.mV[VW]; 480 wind.mV[VW] = avatarp->mWindVec.mV[VW];
484 481
485 sVertexProgram->vertexAttrib4fv(LLShaderMgr::AVATAR_WIND, wind.mV); 482 sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_WIND, wind.mV);
486 F32 phase = -1.f * (avatarp->mRipplePhase); 483 F32 phase = -1.f * (avatarp->mRipplePhase);
487 484
488 F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f); 485 F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f);
489 LLVector4 sin_params(freq, freq, freq, phase); 486 LLVector4 sin_params(freq, freq, freq, phase);
490 sVertexProgram->vertexAttrib4fv(LLShaderMgr::AVATAR_SINWAVE, sin_params.mV); 487 sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_SINWAVE, sin_params.mV);
491 488
492 LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f); 489 LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f);
493 gravity = gravity * rot_mat; 490 gravity = gravity * rot_mat;
494 sVertexProgram->vertexAttrib4fv(LLShaderMgr::AVATAR_GRAVITY, gravity.mV); 491 sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_GRAVITY, gravity.mV);
495 } 492 }
496 493
497 if( !single_avatar || (avatarp == single_avatar) ) 494 if( !single_avatar || (avatarp == single_avatar) )
@@ -566,11 +563,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
566//----------------------------------------------------------------------------- 563//-----------------------------------------------------------------------------
567void LLDrawPoolAvatar::renderForSelect() 564void LLDrawPoolAvatar::renderForSelect()
568{ 565{
569 if (gUseGLPick)
570 {
571 return;
572 }
573
574 if (!gRenderAvatar) 566 if (!gRenderAvatar)
575 { 567 {
576 return; 568 return;
@@ -593,6 +585,7 @@ void LLDrawPoolAvatar::renderForSelect()
593 return; 585 return;
594 } 586 }
595 587
588 S32 curr_shader_level = getVertexShaderLevel();
596 S32 name = avatarp->mDrawable->getVObj()->mGLName; 589 S32 name = avatarp->mDrawable->getVObj()->mGLName;
597 LLColor4U color((U8)(name >> 16), (U8)(name >> 8), (U8)name); 590 LLColor4U color((U8)(name >> 16), (U8)(name >> 8), (U8)name);
598 591
@@ -609,30 +602,30 @@ void LLDrawPoolAvatar::renderForSelect()
609 } 602 }
610 603
611 sVertexProgram = &gAvatarPickProgram; 604 sVertexProgram = &gAvatarPickProgram;
612 if (sShaderLevel > 0) 605 if (curr_shader_level > 0)
613 { 606 {
614 gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX]; 607 gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX];
615 } 608 }
616 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f); 609 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
617 gGL.setSceneBlendType(LLRender::BT_REPLACE); 610 gGL.setSceneBlendType(LLRender::BT_REPLACE);
618 611
619 glColor4ubv(color.mV); 612 glColor4ubv(color.mV);
620 613
621 if ((sShaderLevel > 0) && !gUseGLPick) // for hardware blending 614 if (curr_shader_level > 0) // for hardware blending
622 { 615 {
623 sRenderingSkinned = TRUE; 616 sRenderingSkinned = TRUE;
624 sVertexProgram->bind(); 617 sVertexProgram->bind();
625 enable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 618 enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
626 } 619 }
627 620
628 avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); 621 avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
629 622
630 // if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done 623 // if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done
631 if ((sShaderLevel > 0) && !gUseGLPick) 624 if (curr_shader_level > 0)
632 { 625 {
633 sRenderingSkinned = FALSE; 626 sRenderingSkinned = FALSE;
634 sVertexProgram->unbind(); 627 sVertexProgram->unbind();
635 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 628 disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
636 } 629 }
637 630
638 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); 631 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
@@ -670,7 +663,7 @@ LLColor3 LLDrawPoolAvatar::getDebugColor() const
670 663
671LLVertexBufferAvatar::LLVertexBufferAvatar() 664LLVertexBufferAvatar::LLVertexBufferAvatar()
672: LLVertexBuffer(sDataMask, 665: LLVertexBuffer(sDataMask,
673 LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) > 0 ? 666 LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0 ?
674 GL_STATIC_DRAW_ARB : 667 GL_STATIC_DRAW_ARB :
675 GL_STREAM_DRAW_ARB) 668 GL_STREAM_DRAW_ARB)
676{ 669{
@@ -692,16 +685,16 @@ void LLVertexBufferAvatar::setupVertexBuffer(U32 data_mask) const
692 glClientActiveTextureARB(GL_TEXTURE0_ARB); 685 glClientActiveTextureARB(GL_TEXTURE0_ARB);
693 glTexCoordPointer(2,GL_FLOAT, mStride, (void*)(base + mOffsets[TYPE_TEXCOORD])); 686 glTexCoordPointer(2,GL_FLOAT, mStride, (void*)(base + mOffsets[TYPE_TEXCOORD]));
694 687
695 set_vertex_weights(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT], mStride, (F32*)(base + mOffsets[TYPE_WEIGHT])); 688 set_vertex_weights(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT], mStride, (F32*)(base + mOffsets[TYPE_WEIGHT]));
696 689
697 if (sShaderLevel >= LLDrawPoolAvatar::SHADER_LEVEL_BUMP) 690 if (sShaderLevel >= LLDrawPoolAvatar::SHADER_LEVEL_BUMP)
698 { 691 {
699 set_binormals(sVertexProgram->mAttribute[LLShaderMgr::BINORMAL], mStride, (LLVector3*)(base + mOffsets[TYPE_BINORMAL])); 692 set_binormals(sVertexProgram->mAttribute[LLViewerShaderMgr::BINORMAL], mStride, (LLVector3*)(base + mOffsets[TYPE_BINORMAL]));
700 } 693 }
701 694
702 if (sShaderLevel >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH) 695 if (sShaderLevel >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH)
703 { 696 {
704 set_vertex_clothing_weights(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_CLOTHING], mStride, (LLVector4*)(base + mOffsets[TYPE_CLOTHWEIGHT])); 697 set_vertex_clothing_weights(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_CLOTHING], mStride, (LLVector4*)(base + mOffsets[TYPE_CLOTHWEIGHT]));
705 } 698 }
706 } 699 }
707 else 700 else