Skip to content

Commit 04a8c34

Browse files
committed
fix conversion to pbr
1 parent e97a535 commit 04a8c34

File tree

1 file changed

+63
-11
lines changed

1 file changed

+63
-11
lines changed

indra/newview/llpanelface.cpp

Lines changed: 63 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,17 @@ struct LLPanelFaceSetAlignedTEFunctor : public LLSelectedTEFunctor
895895
// Also handle PBR materials if selected
896896
if (mUsePBR)
897897
{
898+
LLVector2 pbr_scale, pbr_offset;
899+
F32 pbr_rotation;
900+
901+
LLGLTFMaterial::convertTextureTransformToPBR(
902+
uv_scale.mV[VX], uv_scale.mV[VY],
903+
uv_offset.mV[VX], uv_offset.mV[VY],
904+
uv_rot,
905+
pbr_scale,
906+
pbr_offset,
907+
pbr_rotation);
908+
898909
LLGLTFMaterial new_override;
899910
const LLTextureEntry* tep = object->getTE(te);
900911
if (tep && tep->getGLTFMaterialOverride())
@@ -908,21 +919,17 @@ struct LLPanelFaceSetAlignedTEFunctor : public LLSelectedTEFunctor
908919
// Align all 4 PBR texture channels
909920
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
910921
{
911-
new_override.mTextureTransform[i].mScale.mV[VX] = uv_scale.mV[VX];
912-
new_override.mTextureTransform[i].mScale.mV[VY] = uv_scale.mV[VY];
913-
new_override.mTextureTransform[i].mRotation = uv_rot;
914-
new_override.mTextureTransform[i].mOffset.mV[VX] = uv_offset.mV[VX];
915-
new_override.mTextureTransform[i].mOffset.mV[VY] = uv_offset.mV[VY];
922+
new_override.mTextureTransform[i].mScale = pbr_scale;
923+
new_override.mTextureTransform[i].mRotation = pbr_rotation;
924+
new_override.mTextureTransform[i].mOffset = pbr_offset;
916925
}
917926
}
918927
else
919928
{
920929
// Align only the selected channel
921-
new_override.mTextureTransform[mPBRChannel].mScale.mV[VX] = uv_scale.mV[VX];
922-
new_override.mTextureTransform[mPBRChannel].mScale.mV[VY] = uv_scale.mV[VY];
923-
new_override.mTextureTransform[mPBRChannel].mRotation = uv_rot;
924-
new_override.mTextureTransform[mPBRChannel].mOffset.mV[VX] = uv_offset.mV[VX];
925-
new_override.mTextureTransform[mPBRChannel].mOffset.mV[VY] = uv_offset.mV[VY];
930+
new_override.mTextureTransform[mPBRChannel].mScale = pbr_scale;
931+
new_override.mTextureTransform[mPBRChannel].mRotation = pbr_rotation;
932+
new_override.mTextureTransform[mPBRChannel].mOffset = pbr_offset;
926933
}
927934

928935
LLGLTFMaterialList::queueModify(object, te, &new_override);
@@ -973,7 +980,10 @@ struct LLPanelFaceSetAlignedConcreteTEFunctor : public LLSelectedTEFunctor
973980
{
974981
LLVector2 uv_offset, uv_scale;
975982
F32 uv_rot;
976-
if (facep->calcAlignedPlanarTE(mChefFace, &uv_offset, &uv_scale, &uv_rot, mMap))
983+
984+
LLRender::eTexIndex calc_map = (mMap == LLRender::NUM_TEXTURE_CHANNELS) ? LLRender::DIFFUSE_MAP : mMap;
985+
986+
if (facep->calcAlignedPlanarTE(mChefFace, &uv_offset, &uv_scale, &uv_rot, calc_map))
977987
{
978988
switch (mMap)
979989
{
@@ -996,6 +1006,43 @@ struct LLPanelFaceSetAlignedConcreteTEFunctor : public LLSelectedTEFunctor
9961006
LLPanelFace::LLSelectedTEMaterial::setSpecularRepeatX(mPanel, uv_scale.mV[VX], te, object->getID());
9971007
LLPanelFace::LLSelectedTEMaterial::setSpecularRepeatY(mPanel, uv_scale.mV[VY], te, object->getID());
9981008
break;
1009+
// convert Blinn-Phong coords to PBR coords
1010+
case LLRender::NUM_TEXTURE_CHANNELS:
1011+
{
1012+
LLVector2 pbr_scale, pbr_offset;
1013+
F32 pbr_rotation;
1014+
1015+
LLGLTFMaterial::convertTextureTransformToPBR(
1016+
uv_scale.mV[VX], uv_scale.mV[VY],
1017+
uv_offset.mV[VX], uv_offset.mV[VY],
1018+
uv_rot,
1019+
pbr_scale,
1020+
pbr_offset,
1021+
pbr_rotation);
1022+
1023+
const LLTextureEntry* tep = object->getTE(te);
1024+
if (!tep)
1025+
{
1026+
break;
1027+
}
1028+
1029+
LLGLTFMaterial new_override;
1030+
const LLGLTFMaterial* existing_override = tep->getGLTFMaterialOverride();
1031+
if (existing_override)
1032+
{
1033+
new_override = *existing_override;
1034+
}
1035+
1036+
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
1037+
{
1038+
new_override.mTextureTransform[i].mOffset = pbr_offset;
1039+
new_override.mTextureTransform[i].mScale = pbr_scale;
1040+
new_override.mTextureTransform[i].mRotation = pbr_rotation;
1041+
}
1042+
1043+
LLGLTFMaterialList::queueModify(object, te, &new_override);
1044+
}
1045+
break;
9991046
default: /*make compiler happy*/
10001047
break;
10011048
}
@@ -1124,6 +1171,11 @@ void LLPanelFace::alignTextureLayer()
11241171
LLGLTFMaterial::TextureInfo texture_info = getPBRTextureInfo();
11251172
LLPanelFaceSetAlignedTEFunctor setfunc(this, last_face, true, texture_info);
11261173
LLSelectMgr::getInstance()->getSelection()->applyToTEs(&setfunc);
1174+
1175+
LLGLTFMaterialList::flushUpdates();
1176+
1177+
LLPanelFaceSendFunctor sendfunc;
1178+
LLSelectMgr::getInstance()->getSelection()->applyToObjects(&sendfunc);
11271179
}
11281180
else
11291181
{

0 commit comments

Comments
 (0)