Merge branch 'DRTVWR-559' of https://github.com/secondlife/viewer
commit
a63afaa978
|
|
@ -696,6 +696,18 @@ void teardown_texture_matrix(LLDrawInfo& params)
|
|||
}
|
||||
}
|
||||
|
||||
void LLRenderPass::pushGLTFBatches(U32 type, bool textured)
|
||||
{
|
||||
if (textured)
|
||||
{
|
||||
pushGLTFBatches(type);
|
||||
}
|
||||
else
|
||||
{
|
||||
pushRiggedGLTFBatches(type);
|
||||
}
|
||||
}
|
||||
|
||||
void LLRenderPass::pushGLTFBatches(U32 type)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL;
|
||||
|
|
@ -711,6 +723,21 @@ void LLRenderPass::pushGLTFBatches(U32 type)
|
|||
}
|
||||
}
|
||||
|
||||
void LLRenderPass::pushUntexturedGLTFBatches(U32 type)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL;
|
||||
auto* begin = gPipeline.beginRenderMap(type);
|
||||
auto* end = gPipeline.endRenderMap(type);
|
||||
for (LLCullResult::drawinfo_iterator i = begin; i != end; )
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_DRAWPOOL("pushGLTFBatch");
|
||||
LLDrawInfo& params = **i;
|
||||
LLCullResult::increment_iterator(i, end);
|
||||
|
||||
pushUntexturedGLTFBatch(params);
|
||||
}
|
||||
}
|
||||
|
||||
void LLRenderPass::pushGLTFBatch(LLDrawInfo& params)
|
||||
{
|
||||
auto& mat = params.mGLTFMaterial;
|
||||
|
|
@ -729,6 +756,30 @@ void LLRenderPass::pushGLTFBatch(LLDrawInfo& params)
|
|||
teardown_texture_matrix(params);
|
||||
}
|
||||
|
||||
void LLRenderPass::pushUntexturedGLTFBatch(LLDrawInfo& params)
|
||||
{
|
||||
auto& mat = params.mGLTFMaterial;
|
||||
|
||||
LLGLDisable cull_face(mat->mDoubleSided ? GL_CULL_FACE : 0);
|
||||
|
||||
applyModelMatrix(params);
|
||||
|
||||
params.mVertexBuffer->setBuffer();
|
||||
params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
|
||||
}
|
||||
|
||||
void LLRenderPass::pushRiggedGLTFBatches(U32 type, bool textured)
|
||||
{
|
||||
if (textured)
|
||||
{
|
||||
pushRiggedGLTFBatches(type);
|
||||
}
|
||||
else
|
||||
{
|
||||
pushUntexturedRiggedGLTFBatches(type);
|
||||
}
|
||||
}
|
||||
|
||||
void LLRenderPass::pushRiggedGLTFBatches(U32 type)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL;
|
||||
|
|
@ -747,6 +798,25 @@ void LLRenderPass::pushRiggedGLTFBatches(U32 type)
|
|||
}
|
||||
}
|
||||
|
||||
void LLRenderPass::pushUntexturedRiggedGLTFBatches(U32 type)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL;
|
||||
LLVOAvatar* lastAvatar = nullptr;
|
||||
U64 lastMeshId = 0;
|
||||
|
||||
auto* begin = gPipeline.beginRenderMap(type);
|
||||
auto* end = gPipeline.endRenderMap(type);
|
||||
for (LLCullResult::drawinfo_iterator i = begin; i != end; )
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_DRAWPOOL("pushRiggedGLTFBatch");
|
||||
LLDrawInfo& params = **i;
|
||||
LLCullResult::increment_iterator(i, end);
|
||||
|
||||
pushUntexturedRiggedGLTFBatch(params, lastAvatar, lastMeshId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLRenderPass::pushRiggedGLTFBatch(LLDrawInfo& params, LLVOAvatar*& lastAvatar, U64& lastMeshId)
|
||||
{
|
||||
if (params.mAvatar.notNull() && (lastAvatar != params.mAvatar || lastMeshId != params.mSkinInfo->mHash))
|
||||
|
|
@ -759,3 +829,15 @@ void LLRenderPass::pushRiggedGLTFBatch(LLDrawInfo& params, LLVOAvatar*& lastAvat
|
|||
pushGLTFBatch(params);
|
||||
}
|
||||
|
||||
void LLRenderPass::pushUntexturedRiggedGLTFBatch(LLDrawInfo& params, LLVOAvatar*& lastAvatar, U64& lastMeshId)
|
||||
{
|
||||
if (params.mAvatar.notNull() && (lastAvatar != params.mAvatar || lastMeshId != params.mSkinInfo->mHash))
|
||||
{
|
||||
uploadMatrixPalette(params);
|
||||
lastAvatar = params.mAvatar;
|
||||
lastMeshId = params.mSkinInfo->mHash;
|
||||
}
|
||||
|
||||
pushUntexturedGLTFBatch(params);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -356,10 +356,29 @@ public:
|
|||
|
||||
void pushRiggedBatches(U32 type, bool texture = true, bool batch_textures = false);
|
||||
void pushUntexturedRiggedBatches(U32 type);
|
||||
|
||||
// push full GLTF batches
|
||||
// assumes draw infos of given type have valid GLTF materials
|
||||
void pushGLTFBatches(U32 type);
|
||||
void pushGLTFBatch(LLDrawInfo& params);
|
||||
|
||||
// like pushGLTFBatches, but will not bind textures or set up texture transforms
|
||||
void pushUntexturedGLTFBatches(U32 type);
|
||||
|
||||
// helper function for dispatching to textured or untextured pass based on bool
|
||||
void pushGLTFBatches(U32 type, bool textured);
|
||||
|
||||
|
||||
// rigged variants of above
|
||||
void pushRiggedGLTFBatches(U32 type);
|
||||
void pushRiggedGLTFBatches(U32 type, bool textured);
|
||||
void pushUntexturedRiggedGLTFBatches(U32 type);
|
||||
|
||||
// push a single GLTF draw call
|
||||
void pushGLTFBatch(LLDrawInfo& params);
|
||||
void pushRiggedGLTFBatch(LLDrawInfo& params, LLVOAvatar*& lastAvatar, U64& lastMeshId);
|
||||
void pushUntexturedGLTFBatch(LLDrawInfo& params);
|
||||
void pushUntexturedRiggedGLTFBatch(LLDrawInfo& params, LLVOAvatar*& lastAvatar, U64& lastMeshId);
|
||||
|
||||
void pushMaskBatches(U32 type, bool texture = true, bool batch_textures = false);
|
||||
void pushRiggedMaskBatches(U32 type, bool texture = true, bool batch_textures = false);
|
||||
void pushBatch(LLDrawInfo& params, bool texture, bool batch_textures = false);
|
||||
|
|
|
|||
|
|
@ -533,6 +533,7 @@ void LLDrawPoolAlpha::renderPbrEmissives(std::vector<LLDrawInfo*>& emissives)
|
|||
for (LLDrawInfo* draw : emissives)
|
||||
{
|
||||
llassert(draw->mGLTFMaterial);
|
||||
LLGLDisable cull_face(draw->mGLTFMaterial->mDoubleSided ? GL_CULL_FACE : 0);
|
||||
draw->mGLTFMaterial->bind(draw->mTexture);
|
||||
draw->mVertexBuffer->setBuffer();
|
||||
draw->mVertexBuffer->drawRange(LLRender::TRIANGLES, draw->mStart, draw->mEnd, draw->mCount, draw->mOffset);
|
||||
|
|
@ -588,6 +589,7 @@ void LLDrawPoolAlpha::renderRiggedPbrEmissives(std::vector<LLDrawInfo*>& emissiv
|
|||
lastMeshId = draw->mSkinInfo->mHash;
|
||||
}
|
||||
|
||||
LLGLDisable cull_face(draw->mGLTFMaterial->mDoubleSided ? GL_CULL_FACE : 0);
|
||||
draw->mGLTFMaterial->bind(draw->mTexture);
|
||||
draw->mVertexBuffer->setBuffer();
|
||||
draw->mVertexBuffer->drawRange(LLRender::TRIANGLES, draw->mStart, draw->mEnd, draw->mCount, draw->mOffset);
|
||||
|
|
|
|||
|
|
@ -823,7 +823,7 @@ const F64Seconds LLEnvironment::TRANSITION_ALTITUDE(5.0f);
|
|||
|
||||
const LLUUID LLEnvironment::KNOWN_SKY_SUNRISE("01e41537-ff51-2f1f-8ef7-17e4df760bfb");
|
||||
const LLUUID LLEnvironment::KNOWN_SKY_MIDDAY("651510b8-5f4d-8991-1592-e7eeab2a5a06");
|
||||
const LLUUID LLEnvironment::KNOWN_SKY_LEGACY_MIDDAY("6c83e853-e7f8-cad7-8ee6-5f31c453721c");
|
||||
const LLUUID LLEnvironment::KNOWN_SKY_LEGACY_MIDDAY("cef49723-0292-af49-9b14-9598a616b8a3");
|
||||
const LLUUID LLEnvironment::KNOWN_SKY_SUNSET("084e26cd-a900-28e8-08d0-64a9de5c15e2");
|
||||
const LLUUID LLEnvironment::KNOWN_SKY_MIDNIGHT("8a01b97a-cb20-c1ea-ac63-f7ea84ad0090");
|
||||
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ void LLReflectionMap::autoAdjustOrigin()
|
|||
{
|
||||
int face = -1;
|
||||
LLVector4a intersection;
|
||||
LLDrawable* drawable = mGroup->lineSegmentIntersect(bounds[0], corners[i], false, false, true, &face, &intersection);
|
||||
LLDrawable* drawable = mGroup->lineSegmentIntersect(bounds[0], corners[i], false, false, true, true, &face, &intersection);
|
||||
if (drawable != nullptr)
|
||||
{
|
||||
hit = true;
|
||||
|
|
|
|||
|
|
@ -3645,8 +3645,9 @@ public:
|
|||
BOOL mPickTransparent;
|
||||
BOOL mPickRigged;
|
||||
BOOL mPickUnselectable;
|
||||
BOOL mPickReflectionProbe;
|
||||
|
||||
LLOctreeIntersect(const LLVector4a& start, const LLVector4a& end, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_unselectable,
|
||||
LLOctreeIntersect(const LLVector4a& start, const LLVector4a& end, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_unselectable, BOOL pick_reflection_probe,
|
||||
S32* face_hit, LLVector4a* intersection, LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
|
||||
: mStart(start),
|
||||
mEnd(end),
|
||||
|
|
@ -3658,7 +3659,8 @@ public:
|
|||
mHit(NULL),
|
||||
mPickTransparent(pick_transparent),
|
||||
mPickRigged(pick_rigged),
|
||||
mPickUnselectable(pick_unselectable)
|
||||
mPickUnselectable(pick_unselectable),
|
||||
mPickReflectionProbe(pick_reflection_probe)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -3789,7 +3791,8 @@ public:
|
|||
{
|
||||
LLViewerObject* vobj = drawable->getVObj();
|
||||
|
||||
if (vobj)
|
||||
if (vobj &&
|
||||
(!vobj->isReflectionProbe() || mPickReflectionProbe))
|
||||
{
|
||||
LLVector4a intersection;
|
||||
bool skip_check = false;
|
||||
|
|
@ -3835,6 +3838,7 @@ LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector4a& start, co
|
|||
BOOL pick_transparent,
|
||||
BOOL pick_rigged,
|
||||
BOOL pick_unselectable,
|
||||
BOOL pick_reflection_probe,
|
||||
S32* face_hit, // return the face hit
|
||||
LLVector4a* intersection, // return the intersection point
|
||||
LLVector2* tex_coord, // return the texture coordinates of the intersection point
|
||||
|
|
@ -3843,7 +3847,7 @@ LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector4a& start, co
|
|||
)
|
||||
|
||||
{
|
||||
LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, face_hit, intersection, tex_coord, normal, tangent);
|
||||
LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, intersection, tex_coord, normal, tangent);
|
||||
LLDrawable* drawable = intersect.check(mOctree);
|
||||
|
||||
return drawable;
|
||||
|
|
@ -3853,6 +3857,7 @@ LLDrawable* LLSpatialGroup::lineSegmentIntersect(const LLVector4a& start, const
|
|||
BOOL pick_transparent,
|
||||
BOOL pick_rigged,
|
||||
BOOL pick_unselectable,
|
||||
BOOL pick_reflection_probe,
|
||||
S32* face_hit, // return the face hit
|
||||
LLVector4a* intersection, // return the intersection point
|
||||
LLVector2* tex_coord, // return the texture coordinates of the intersection point
|
||||
|
|
@ -3861,7 +3866,7 @@ LLDrawable* LLSpatialGroup::lineSegmentIntersect(const LLVector4a& start, const
|
|||
)
|
||||
|
||||
{
|
||||
LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, face_hit, intersection, tex_coord, normal, tangent);
|
||||
LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, intersection, tex_coord, normal, tangent);
|
||||
LLDrawable* drawable = intersect.check(getOctreeNode());
|
||||
|
||||
return drawable;
|
||||
|
|
|
|||
|
|
@ -326,6 +326,7 @@ public:
|
|||
BOOL pick_transparent,
|
||||
BOOL pick_rigged,
|
||||
BOOL pick_unselectable,
|
||||
BOOL pick_reflection_probe,
|
||||
S32* face_hit, // return the face hit
|
||||
LLVector4a* intersection = NULL, // return the intersection point
|
||||
LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
|
||||
|
|
@ -400,6 +401,7 @@ public:
|
|||
BOOL pick_transparent,
|
||||
BOOL pick_rigged,
|
||||
BOOL pick_unselectable,
|
||||
BOOL pick_reflection_probe,
|
||||
S32* face_hit, // return the face hit
|
||||
LLVector4a* intersection = NULL, // return the intersection point
|
||||
LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
mMouseDownY = y;
|
||||
LLTimer pick_timer;
|
||||
BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
|
||||
LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged);
|
||||
LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged, FALSE, TRUE, FALSE);
|
||||
LLPickInfo visible_pick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
|
||||
LLViewerObject *transp_object = transparent_pick.getObject();
|
||||
LLViewerObject *visible_object = visible_pick.getObject();
|
||||
|
|
|
|||
|
|
@ -3838,7 +3838,7 @@ void LLViewerWindow::updateUI()
|
|||
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_RAYCAST))
|
||||
{
|
||||
gDebugRaycastFaceHit = -1;
|
||||
gDebugRaycastObject = cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE,
|
||||
gDebugRaycastObject = cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, FALSE,
|
||||
&gDebugRaycastFaceHit,
|
||||
&gDebugRaycastIntersection,
|
||||
&gDebugRaycastTexCoord,
|
||||
|
|
@ -5348,7 +5348,7 @@ void LLViewerWindow::pickAsync( S32 x,
|
|||
pick_transparent = TRUE;
|
||||
}
|
||||
|
||||
LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, pick_rigged, FALSE, TRUE, pick_unselectable, callback);
|
||||
LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, pick_rigged, FALSE, TRUE, pick_unselectable, TRUE, callback);
|
||||
schedulePick(pick_info);
|
||||
}
|
||||
|
||||
|
|
@ -5404,7 +5404,7 @@ void LLViewerWindow::returnEmptyPicks()
|
|||
}
|
||||
|
||||
// Performs the GL object/land pick.
|
||||
LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_particle, BOOL pick_unselectable)
|
||||
LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_particle, BOOL pick_unselectable, BOOL pick_reflection_probe)
|
||||
{
|
||||
BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
|
||||
if ((in_build_mode && gSavedSettings.getBOOL("SelectInvisibleObjects")) || LLDrawPoolAlpha::sShowDebugAlpha)
|
||||
|
|
@ -5416,7 +5416,7 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transp
|
|||
|
||||
// shortcut queueing in mPicks and just update mLastPick in place
|
||||
MASK key_mask = gKeyboard->currentMask(TRUE);
|
||||
mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_rigged, pick_particle, TRUE, FALSE, NULL);
|
||||
mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_rigged, pick_particle, pick_reflection_probe, TRUE, FALSE, NULL);
|
||||
mLastPick.fetchResults();
|
||||
|
||||
return mLastPick;
|
||||
|
|
@ -5454,6 +5454,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
|
|||
BOOL pick_transparent,
|
||||
BOOL pick_rigged,
|
||||
BOOL pick_unselectable,
|
||||
BOOL pick_reflection_probe,
|
||||
S32* face_hit,
|
||||
LLVector4a *intersection,
|
||||
LLVector2 *uv,
|
||||
|
|
@ -5532,7 +5533,8 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
|
|||
}
|
||||
else // is a world object
|
||||
{
|
||||
if (this_object->lineSegmentIntersect(mw_start, mw_end, this_face, pick_transparent, pick_rigged, pick_unselectable,
|
||||
if ((pick_reflection_probe || !this_object->isReflectionProbe())
|
||||
&& this_object->lineSegmentIntersect(mw_start, mw_end, this_face, pick_transparent, pick_rigged, pick_unselectable,
|
||||
face_hit, intersection, uv, normal, tangent))
|
||||
{
|
||||
found = this_object;
|
||||
|
|
@ -5553,7 +5555,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
|
|||
// [/RLVa:KB]
|
||||
if (!found) // if not found in HUD, look in world:
|
||||
{
|
||||
found = gPipeline.lineSegmentIntersectInWorld(mw_start, mw_end, pick_transparent, pick_rigged, pick_unselectable,
|
||||
found = gPipeline.lineSegmentIntersectInWorld(mw_start, mw_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe,
|
||||
face_hit, intersection, uv, normal, tangent);
|
||||
if (found && !pick_transparent)
|
||||
{
|
||||
|
|
@ -7426,30 +7428,32 @@ LLPickInfo::LLPickInfo()
|
|||
{
|
||||
}
|
||||
|
||||
LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
|
||||
MASK keyboard_mask,
|
||||
BOOL pick_transparent,
|
||||
BOOL pick_rigged,
|
||||
BOOL pick_particle,
|
||||
BOOL pick_uv_coords,
|
||||
BOOL pick_unselectable,
|
||||
void (*pick_callback)(const LLPickInfo& pick_info))
|
||||
: mMousePt(mouse_pos),
|
||||
mKeyMask(keyboard_mask),
|
||||
mPickCallback(pick_callback),
|
||||
mPickType(PICK_INVALID),
|
||||
mWantSurfaceInfo(pick_uv_coords),
|
||||
mObjectFace(-1),
|
||||
mUVCoords(-1.f, -1.f),
|
||||
mSTCoords(-1.f, -1.f),
|
||||
mXYCoords(-1, -1),
|
||||
mNormal(),
|
||||
mTangent(),
|
||||
mBinormal(),
|
||||
mHUDIcon(NULL),
|
||||
mPickTransparent(pick_transparent),
|
||||
mPickRigged(pick_rigged),
|
||||
mPickParticle(pick_particle),
|
||||
LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
|
||||
MASK keyboard_mask,
|
||||
BOOL pick_transparent,
|
||||
BOOL pick_rigged,
|
||||
BOOL pick_particle,
|
||||
BOOL pick_reflection_probe,
|
||||
BOOL pick_uv_coords,
|
||||
BOOL pick_unselectable,
|
||||
void (*pick_callback)(const LLPickInfo& pick_info))
|
||||
: mMousePt(mouse_pos),
|
||||
mKeyMask(keyboard_mask),
|
||||
mPickCallback(pick_callback),
|
||||
mPickType(PICK_INVALID),
|
||||
mWantSurfaceInfo(pick_uv_coords),
|
||||
mObjectFace(-1),
|
||||
mUVCoords(-1.f, -1.f),
|
||||
mSTCoords(-1.f, -1.f),
|
||||
mXYCoords(-1, -1),
|
||||
mNormal(),
|
||||
mTangent(),
|
||||
mBinormal(),
|
||||
mHUDIcon(NULL),
|
||||
mPickTransparent(pick_transparent),
|
||||
mPickRigged(pick_rigged),
|
||||
mPickParticle(pick_particle),
|
||||
mPickReflectionProbe(pick_reflection_probe),
|
||||
mPickUnselectable(pick_unselectable)
|
||||
{
|
||||
}
|
||||
|
|
@ -7479,7 +7483,7 @@ void LLPickInfo::fetchResults()
|
|||
icon_dist = delta.getLength3().getF32();
|
||||
}
|
||||
LLViewerObject* hit_object = gViewerWindow->cursorIntersect(mMousePt.mX, mMousePt.mY, 512.f,
|
||||
NULL, -1, mPickTransparent, mPickRigged, mPickUnselectable, &face_hit,
|
||||
NULL, -1, mPickTransparent, mPickRigged, mPickUnselectable, mPickReflectionProbe, &face_hit,
|
||||
&intersection, &uv, &normal, &tangent, &start, &end);
|
||||
|
||||
mPickPt = mMousePt;
|
||||
|
|
@ -7640,7 +7644,7 @@ void LLPickInfo::getSurfaceInfo()
|
|||
if (objectp)
|
||||
{
|
||||
if (gViewerWindow->cursorIntersect(ll_round((F32)mMousePt.mX), ll_round((F32)mMousePt.mY), 1024.f,
|
||||
objectp, -1, mPickTransparent, mPickRigged, mPickUnselectable,
|
||||
objectp, -1, mPickTransparent, mPickRigged, mPickUnselectable, mPickReflectionProbe,
|
||||
&mObjectFace,
|
||||
&intersection,
|
||||
&mSTCoords,
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ public:
|
|||
BOOL pick_transparent,
|
||||
BOOL pick_rigged,
|
||||
BOOL pick_particle,
|
||||
BOOL pick_reflection_probe,
|
||||
BOOL pick_surface_info,
|
||||
BOOL pick_unselectable,
|
||||
void (*pick_callback)(const LLPickInfo& pick_info));
|
||||
|
|
@ -131,6 +132,7 @@ public:
|
|||
BOOL mPickRigged;
|
||||
BOOL mPickParticle;
|
||||
BOOL mPickUnselectable;
|
||||
BOOL mPickReflectionProbe = FALSE;
|
||||
void getSurfaceInfo();
|
||||
|
||||
private:
|
||||
|
|
@ -408,7 +410,7 @@ public:
|
|||
BOOL pick_transparent = FALSE,
|
||||
BOOL pick_rigged = FALSE,
|
||||
BOOL pick_unselectable = FALSE);
|
||||
LLPickInfo pickImmediate(S32 x, S32 y, BOOL pick_transparent, BOOL pick_rigged = FALSE, BOOL pick_particle = FALSE, BOOL pick_unselectable = TRUE);
|
||||
LLPickInfo pickImmediate(S32 x, S32 y, BOOL pick_transparent, BOOL pick_rigged = FALSE, BOOL pick_particle = FALSE, BOOL pick_unselectable = TRUE, BOOL pick_reflection_probe = TRUE);
|
||||
LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,
|
||||
LLVector4a* intersection);
|
||||
|
||||
|
|
@ -418,6 +420,7 @@ public:
|
|||
BOOL pick_transparent = FALSE,
|
||||
BOOL pick_rigged = FALSE,
|
||||
BOOL pick_unselectable = TRUE,
|
||||
BOOL pick_reflection_probe = TRUE,
|
||||
S32* face_hit = NULL,
|
||||
LLVector4a *intersection = NULL,
|
||||
LLVector2 *uv = NULL,
|
||||
|
|
|
|||
|
|
@ -6371,7 +6371,7 @@ LLVOPartGroup* LLPipeline::lineSegmentIntersectParticle(const LLVector4a& start,
|
|||
LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_PARTICLE);
|
||||
if (part && hasRenderType(part->mDrawableType))
|
||||
{
|
||||
LLDrawable* hit = part->lineSegmentIntersect(start, local_end, TRUE, FALSE, TRUE, face_hit, &position, NULL, NULL, NULL);
|
||||
LLDrawable* hit = part->lineSegmentIntersect(start, local_end, TRUE, FALSE, TRUE, FALSE, face_hit, &position, NULL, NULL, NULL);
|
||||
if (hit)
|
||||
{
|
||||
drawable = hit;
|
||||
|
|
@ -6400,6 +6400,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
|
|||
bool pick_transparent,
|
||||
bool pick_rigged,
|
||||
bool pick_unselectable,
|
||||
bool pick_reflection_probe,
|
||||
S32* face_hit,
|
||||
LLVector4a* intersection, // return the intersection point
|
||||
LLVector2* tex_coord, // return the texture coordinates of the intersection point
|
||||
|
|
@ -6433,7 +6434,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
|
|||
LLSpatialPartition* part = region->getSpatialPartition(j);
|
||||
if (part && hasRenderType(part->mDrawableType))
|
||||
{
|
||||
LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, face_hit, &position, tex_coord, normal, tangent);
|
||||
LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, &position, tex_coord, normal, tangent);
|
||||
if (hit)
|
||||
{
|
||||
drawable = hit;
|
||||
|
|
@ -6490,7 +6491,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
|
|||
LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_AVATAR);
|
||||
if (part && hasRenderType(part->mDrawableType))
|
||||
{
|
||||
LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, face_hit, &position, tex_coord, normal, tangent);
|
||||
LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, &position, tex_coord, normal, tangent);
|
||||
if (hit)
|
||||
{
|
||||
LLVector4a delta;
|
||||
|
|
@ -6578,7 +6579,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInHUD(const LLVector4a& start, c
|
|||
LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_HUD);
|
||||
if (part)
|
||||
{
|
||||
LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, FALSE, TRUE, face_hit, intersection, tex_coord, normal, tangent);
|
||||
LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, FALSE, TRUE, FALSE, face_hit, intersection, tex_coord, normal, tangent);
|
||||
if (hit)
|
||||
{
|
||||
drawable = hit;
|
||||
|
|
@ -6642,6 +6643,25 @@ void LLPipeline::renderObjects(U32 type, bool texture, bool batch_texture, bool
|
|||
gGLLastMatrix = NULL;
|
||||
}
|
||||
|
||||
void LLPipeline::renderGLTFObjects(U32 type, bool texture, bool rigged)
|
||||
{
|
||||
assertInitialized();
|
||||
gGL.loadMatrix(gGLModelView);
|
||||
gGLLastMatrix = NULL;
|
||||
|
||||
if (rigged)
|
||||
{
|
||||
mSimplePool->pushRiggedGLTFBatches(type + 1, texture);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSimplePool->pushGLTFBatches(type, texture);
|
||||
}
|
||||
|
||||
gGL.loadMatrix(gGLModelView);
|
||||
gGLLastMatrix = NULL;
|
||||
}
|
||||
|
||||
// Currently only used for shadows -Cosmic,2023-04-19
|
||||
void LLPipeline::renderAlphaObjects(bool rigged)
|
||||
{
|
||||
|
|
@ -7304,7 +7324,7 @@ void LLPipeline::renderDoF(LLRenderTarget* src, LLRenderTarget* dst)
|
|||
LLVector4a result;
|
||||
result.clear();
|
||||
|
||||
gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, NULL, &result);
|
||||
gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, TRUE, NULL, &result);
|
||||
|
||||
focus_point.set(result.getF32ptr());
|
||||
}
|
||||
|
|
@ -8762,8 +8782,7 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
|
|||
LLRenderPass::PASS_NORMMAP,
|
||||
LLRenderPass::PASS_NORMMAP_EMISSIVE,
|
||||
LLRenderPass::PASS_NORMSPEC,
|
||||
LLRenderPass::PASS_NORMSPEC_EMISSIVE,
|
||||
LLRenderPass::PASS_GLTF_PBR
|
||||
LLRenderPass::PASS_NORMSPEC_EMISSIVE
|
||||
};
|
||||
|
||||
LLGLEnable cull(GL_CULL_FACE);
|
||||
|
|
@ -8826,6 +8845,8 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
|
|||
renderObjects(type, false, false, rigged);
|
||||
}
|
||||
|
||||
renderGLTFObjects(LLRenderPass::PASS_GLTF_PBR, false, rigged);
|
||||
|
||||
gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ public:
|
|||
bool pick_transparent,
|
||||
bool pick_rigged,
|
||||
bool pick_unselectable,
|
||||
bool pick_reflection_probe,
|
||||
S32* face_hit, // return the face hit
|
||||
LLVector4a* intersection = NULL, // return the intersection point
|
||||
LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
|
||||
|
|
@ -284,7 +285,8 @@ public:
|
|||
void forAllVisibleDrawables(void (*func)(LLDrawable*));
|
||||
|
||||
void renderObjects(U32 type, bool texture = true, bool batch_texture = false, bool rigged = false);
|
||||
|
||||
void renderGLTFObjects(U32 type, bool texture = true, bool rigged = false);
|
||||
|
||||
void renderAlphaObjects(bool rigged = false);
|
||||
void renderMaskedObjects(U32 type, bool texture = true, bool batch_texture = false, bool rigged = false);
|
||||
void renderFullbrightMaskedObjects(U32 type, bool texture = true, bool batch_texture = false, bool rigged = false);
|
||||
|
|
|
|||
|
|
@ -14046,9 +14046,8 @@ If you want to see this object, remove it and re-attach it to an avatar attachme
|
|||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AutoAdjustHDRSky"
|
||||
persist="true"
|
||||
type="alertmodal">
|
||||
You are editing a non-HDR sky that has been automatically converted to HDR. To remove HDR and tone mapping, set Reflection Probe Ambiance to zero.
|
||||
You are editing a non-HDR sky that has been automatically converted to HDR. To remove HDR and tone mapping, set Reflection Probe Ambiance to zero.
|
||||
<usetemplate
|
||||
ignoretext="HDR Sky adjustment warning"
|
||||
name="okignore"
|
||||
|
|
|
|||
Loading…
Reference in New Issue