Merge branch 'future' of https://github.com/Shyotl/SingularityViewer
This commit is contained in:
@@ -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++)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user