diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index f4743dd84..f835e8d1c 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -675,32 +675,41 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade { LL_WARNS("ShaderLoading") << "GL ERROR in glCreateShaderObjectARB: " << error << LL_ENDL; glDeleteObjectARB(ret); //no longer need handle + ret=0; } } //load source - glShaderSourceARB(ret, count, (const GLcharARB**) text, NULL); - - if (gDebugGL) + if(ret) { - error = glGetError(); - if (error != GL_NO_ERROR) + glShaderSourceARB(ret, count, (const GLcharARB**) text, NULL); + + if (gDebugGL) { - LL_WARNS("ShaderLoading") << "GL ERROR in glShaderSourceARB: " << error << LL_ENDL; - glDeleteObjectARB(ret); //no longer need handle + error = glGetError(); + if (error != GL_NO_ERROR) + { + LL_WARNS("ShaderLoading") << "GL ERROR in glShaderSourceARB: " << error << LL_ENDL; + glDeleteObjectARB(ret); //no longer need handle + ret=0; + } } } //compile source - glCompileShaderARB(ret); - - if (gDebugGL) + if(ret) { - error = glGetError(); - if (error != GL_NO_ERROR) + glCompileShaderARB(ret); + + if (gDebugGL) { - LL_WARNS("ShaderLoading") << "GL ERROR in glCompileShaderARB: " << error << LL_ENDL; - glDeleteObjectARB(ret); //no longer need handle + error = glGetError(); + if (error != GL_NO_ERROR) + { + LL_WARNS("ShaderLoading") << "GL ERROR in glCompileShaderARB: " << error << LL_ENDL; + glDeleteObjectARB(ret); //no longer need handle + ret=0; + } } } @@ -733,13 +742,12 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade ret = 0; } } + if(ret) + dumpObjectLog(ret,false); } - else - { - ret = 0; - } + static const LLCachedControl dump_raw_shaders("ShyotlDumpRawShaders",false); - if(dump_raw_shaders || ret) + if(dump_raw_shaders || !ret) { std::stringstream ostr; for (GLuint i = 0; i < count; i++) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 59325ab3c..931871501 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2155,6 +2155,8 @@ void LLAgentCamera::changeCameraToMouselook(BOOL animate) if (mCameraMode != CAMERA_MODE_MOUSELOOK) { + mMouselookTimer.reset(); + gFocusMgr.setKeyboardFocus( NULL ); if (gSavedSettings.getBOOL("AONoStandsInMouselook")) LLFloaterAO::stopMotion(LLFloaterAO::getCurrentStandId(), FALSE,TRUE); @@ -2802,7 +2804,16 @@ BOOL LLAgentCamera::setLookAt(ELookAtType target_type, LLViewerObject *object, L return mLookAt->setLookAt(target_type, object, position); } -void LLAgentCamera::lookAtObject(LLUUID object_id, ECameraPosition camera_pos) +//----------------------------------------------------------------------------- +// lookAtLastChat() +//----------------------------------------------------------------------------- +void LLAgentCamera::lookAtLastChat() +{ + lookAtObject(gAgent.getLastChatter()); +} + +//Pulled implementation out of lookAtLastChat and adapted to work for for general objects +void LLAgentCamera::lookAtObject(const LLUUID &object_id, bool self) { // Block if camera is animating or not in normal third person camera mode if (mCameraAnimating || !cameraThirdPerson()) @@ -2811,125 +2822,13 @@ void LLAgentCamera::lookAtObject(LLUUID object_id, ECameraPosition camera_pos) } LLViewerObject *chatter = gObjectList.findObject(object_id); - if (chatter) - { - LLVector3 delta_pos; - if (chatter->isAvatar()) - { - LLVOAvatar *chatter_av = (LLVOAvatar*)chatter; - if (!gAgentAvatarp && chatter_av->mHeadp) - { - delta_pos = chatter_av->mHeadp->getWorldPosition() - gAgentAvatarp->mHeadp->getWorldPosition(); - } - else - { - delta_pos = chatter->getPositionAgent() - gAgent.getPositionAgent(); - } - delta_pos.normVec(); - - gAgent.setControlFlags(AGENT_CONTROL_STOP); - - changeCameraToThirdPerson(); - - LLVector3 new_camera_pos = gAgentAvatarp->mHeadp->getWorldPosition(); - LLVector3 left = delta_pos % LLVector3::z_axis; - left.normVec(); - LLVector3 up = left % delta_pos; - up.normVec(); - new_camera_pos -= delta_pos * 0.4f; - new_camera_pos += left * 0.3f; - new_camera_pos += up * 0.2f; - - F32 radius = chatter_av->getVObjRadius(); - LLVector3d view_dist(radius, radius, 0.0f); - - if (chatter_av->mHeadp) - { - setFocusGlobal(gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), object_id); - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()); - - switch(camera_pos) - { - case CAMERA_POSITION_SELF: - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()); - break; - case CAMERA_POSITION_OBJECT: - mCameraFocusOffsetTarget = view_dist; - break; - } - } - else - { - setFocusGlobal(chatter->getPositionGlobal(), object_id); - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); - - switch(camera_pos) - { - case CAMERA_POSITION_SELF: - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); - break; - case CAMERA_POSITION_OBJECT: - mCameraFocusOffsetTarget = view_dist; - break; - } - } - setFocusOnAvatar(FALSE, TRUE); - } - else - { - delta_pos = chatter->getRenderPosition() - gAgent.getPositionAgent(); - delta_pos.normVec(); - - gAgent.setControlFlags(AGENT_CONTROL_STOP); - - changeCameraToThirdPerson(); - - LLVector3 new_camera_pos = gAgentAvatarp->mHeadp->getWorldPosition(); - LLVector3 left = delta_pos % LLVector3::z_axis; - left.normVec(); - LLVector3 up = left % delta_pos; - up.normVec(); - new_camera_pos -= delta_pos * 0.4f; - new_camera_pos += left * 0.3f; - new_camera_pos += up * 0.2f; - - setFocusGlobal(chatter->getPositionGlobal(), object_id); - - switch(camera_pos) - { - case CAMERA_POSITION_SELF: - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); - break; - case CAMERA_POSITION_OBJECT: - F32 radius = chatter->getVObjRadius(); - LLVector3d view_dist(radius, radius, 0.0f); - mCameraFocusOffsetTarget = view_dist; - break; - } - - setFocusOnAvatar(FALSE, TRUE); - } - } -} - -//----------------------------------------------------------------------------- -// lookAtLastChat() -//----------------------------------------------------------------------------- -void LLAgentCamera::lookAtLastChat() -{ - // Block if camera is animating or not in normal third person camera mode - if (mCameraAnimating || !cameraThirdPerson()) - { - return; - } - - LLViewerObject *chatter = gObjectList.findObject(gAgent.getLastChatter()); if (!chatter) { return; } LLVector3 delta_pos; + F32 radius = chatter->getVObjRadius(); if (chatter->isAvatar()) { LLVOAvatar *chatter_av = (LLVOAvatar*)chatter; @@ -2960,15 +2859,21 @@ void LLAgentCamera::lookAtLastChat() if (chatter_av->mHeadp) { - setFocusGlobal(gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), gAgent.getLastChatter()); - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()); + setFocusGlobal(gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), object_id); + if(self) + mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()); + else + mCameraFocusOffsetTarget.setVec(radius, radius, 0.f); } else { - setFocusGlobal(chatter->getPositionGlobal(), gAgent.getLastChatter()); - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); + setFocusGlobal(chatter->getPositionGlobal(), object_id); + if(self) + mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); + else + mCameraFocusOffsetTarget.setVec(radius, radius, 0.f); } - setFocusOnAvatar(FALSE, TRUE); + setFocusOnAvatar(FALSE, TRUE); } else { @@ -2991,12 +2896,17 @@ void LLAgentCamera::lookAtLastChat() //setFocusOnAvatar(FALSE, FALSE); - setFocusGlobal(chatter->getPositionGlobal(), gAgent.getLastChatter()); - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); + setFocusGlobal(chatter->getPositionGlobal(), object_id); + if(self) + mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); + else + mCameraFocusOffsetTarget.setVec(radius, radius, 0.f); + setFocusOnAvatar(FALSE, TRUE); } } + BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position) { // disallow pointing at attachments and avatars diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index c09ba546c..33938d30d 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -46,11 +46,6 @@ enum ECameraMode CAMERA_MODE_CUSTOMIZE_AVATAR, CAMERA_MODE_FOLLOW }; -typedef enum e_camera_position -{ - CAMERA_POSITION_SELF, /** Camera positioned at our position */ - CAMERA_POSITION_OBJECT /** Camera positioned at observed object's position */ -} ECameraPosition; //------------------------------------------------------------------------ // LLAgentCamera @@ -207,9 +202,9 @@ private: public: void updateLookAt(const S32 mouse_x, const S32 mouse_y); BOOL setLookAt(ELookAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero); - void lookAtObject(LLUUID object_id, ECameraPosition camera_pos); ELookAtType getLookAtType(); void lookAtLastChat(); + void lookAtObject(const LLUUID &object_id, bool self=true); void slamLookAt(const LLVector3 &look_at); // Set the physics data BOOL setPointAt(EPointAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero); EPointAtType getPointAtType(); @@ -370,6 +365,11 @@ private: ** ** *******************************************************************************/ +//Custom +public: + F32 getMouseLookDuration() const { return mMouselookTimer.getElapsedTimeF32(); } +private: + LLTimer mMouselookTimer; }; extern LLAgentCamera gAgentCamera; diff --git a/indra/newview/llfloateravatarlist.cpp b/indra/newview/llfloateravatarlist.cpp index b02ca306d..6f640b4c9 100644 --- a/indra/newview/llfloateravatarlist.cpp +++ b/indra/newview/llfloateravatarlist.cpp @@ -1044,7 +1044,7 @@ void LLFloaterAvatarList::focusOnCurrent() { removeFocusFromAll(); entry->setFocus(TRUE); - gAgentCamera.lookAtObject(mFocusedAvatar, CAMERA_POSITION_OBJECT); + gAgentCamera.lookAtObject(mFocusedAvatar, false); return; } } @@ -1084,7 +1084,7 @@ void LLFloaterAvatarList::focusOnPrev(BOOL marked_only) removeFocusFromAll(); prev->setFocus(TRUE); mFocusedAvatar = prev->getID(); - gAgentCamera.lookAtObject(mFocusedAvatar, CAMERA_POSITION_OBJECT); + gAgentCamera.lookAtObject(mFocusedAvatar, false); } } @@ -1129,7 +1129,7 @@ void LLFloaterAvatarList::focusOnNext(BOOL marked_only) removeFocusFromAll(); next->setFocus(TRUE); mFocusedAvatar = next->getID(); - gAgentCamera.lookAtObject(mFocusedAvatar, CAMERA_POSITION_OBJECT); + gAgentCamera.lookAtObject(mFocusedAvatar, false); } } diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 088cdb7a8..47e2f4bf7 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -370,9 +370,21 @@ void LLViewerShaderMgr::setShaders() } //setup preprocessor definitions + LLShaderMgr::instance()->mDefinitions.clear(); LLShaderMgr::instance()->mDefinitions["samples"] = llformat("%d", gSavedSettings.getU32("RenderFSAASamples")/*gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples"))*/); LLShaderMgr::instance()->mDefinitions["NUM_TEX_UNITS"] = llformat("%d", gGLManager.mNumTextureImageUnits); - + if(gGLManager.mGLVersion >= 3.f) + { + LLShaderMgr::instance()->mDefinitions["texture2D"] = "texture"; + LLShaderMgr::instance()->mDefinitions["textureCube"] = "texture"; + LLShaderMgr::instance()->mDefinitions["texture2DLod"] = "textureLod"; + LLShaderMgr::instance()->mDefinitions["texture2DRect"] = "texture"; + LLShaderMgr::instance()->mDefinitions["shadow2D"] = "texture"; + LLShaderMgr::instance()->mDefinitions["shadow2DRect"] = "texture"; + LLShaderMgr::instance()->mDefinitions["shadow2DProj"] = "textureProj"; + LLShaderMgr::instance()->mDefinitions["ftransform()"] = "gl_ModelViewProjectionMatrix * gl_Vertex"; + } + initAttribsAndUniforms(); gPipeline.releaseGLBuffers(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 954834d60..fd16b8f65 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4501,6 +4501,20 @@ void LLViewerWindow::destroyWindow() void LLViewerWindow::drawMouselookInstructions() { + static const F32 INSTRUCTIONS_OPAQUE_TIME = 10.f; + static const F32 INSTRUCTIONS_FADE_TIME = 5.f; + + F32 mouselook_duration = gAgentCamera.getMouseLookDuration(); + if( mouselook_duration >= (INSTRUCTIONS_OPAQUE_TIME+INSTRUCTIONS_OPAQUE_TIME) ) + return; + + F32 alpha = 1.f; + + if( mouselook_duration > INSTRUCTIONS_OPAQUE_TIME) //instructions are fading + { + alpha = (F32) sqrt(1.f-pow(((mouselook_duration-INSTRUCTIONS_OPAQUE_TIME)/INSTRUCTIONS_FADE_TIME),2.f)); + } + // Draw instructions for mouselook ("Press ESC to leave Mouselook" in a box at the top of the screen.) const std::string instructions = "Press ESC to leave Mouselook."; const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF ); @@ -4515,7 +4529,7 @@ void LLViewerWindow::drawMouselookInstructions() { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - gGL.color4f( 0.9f, 0.9f, 0.9f, 1.0f ); + gGL.color4f( 0.9f, 0.9f, 0.9f, alpha ); gl_rect_2d( instructions_rect ); } @@ -4523,7 +4537,7 @@ void LLViewerWindow::drawMouselookInstructions() instructions, 0, instructions_rect.mLeft + INSTRUCTIONS_PAD, instructions_rect.mTop - INSTRUCTIONS_PAD, - LLColor4( 0.0f, 0.0f, 0.0f, 1.f ), + LLColor4( 0.0f, 0.0f, 0.0f, alpha ), LLFontGL::LEFT, LLFontGL::TOP); }