diff options
Diffstat (limited to 'linden/indra/newview/lldrawpoolavatar.cpp')
-rw-r--r-- | linden/indra/newview/lldrawpoolavatar.cpp | 59 |
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 | ||
51 | static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK; | 51 | static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK; |
@@ -53,8 +53,6 @@ static U32 sBufferUsage = GL_STREAM_DRAW_ARB; | |||
53 | static U32 sShaderLevel = 0; | 53 | static U32 sShaderLevel = 0; |
54 | static LLGLSLShader* sVertexProgram = NULL; | 54 | static LLGLSLShader* sVertexProgram = NULL; |
55 | 55 | ||
56 | extern BOOL gUseGLPick; | ||
57 | |||
58 | F32 CLOTHING_GRAVITY_EFFECT = 0.7f; | 56 | F32 CLOTHING_GRAVITY_EFFECT = 0.7f; |
59 | F32 CLOTHING_ACCEL_FORCE_FACTOR = 0.2f; | 57 | F32 CLOTHING_ACCEL_FORCE_FACTOR = 0.2f; |
60 | const S32 NUM_TEST_AVATARS = 30; | 58 | const S32 NUM_TEST_AVATARS = 30; |
@@ -106,13 +104,12 @@ BOOL gRenderAvatar = TRUE; | |||
106 | 104 | ||
107 | S32 LLDrawPoolAvatar::getVertexShaderLevel() const | 105 | S32 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 | ||
113 | void LLDrawPoolAvatar::prerender() | 110 | void 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 | //----------------------------------------------------------------------------- |
567 | void LLDrawPoolAvatar::renderForSelect() | 564 | void 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 | ||
671 | LLVertexBufferAvatar::LLVertexBufferAvatar() | 664 | LLVertexBufferAvatar::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 |