This commit is contained in:
TighMacFanatic
2011-11-07 18:44:33 -05:00
6 changed files with 96 additions and 152 deletions

View File

@@ -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<bool> 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++)

View File

@@ -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

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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();

View File

@@ -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);
}