master
Ansariel 2022-08-10 16:19:57 +02:00
commit cea42d25d1
23 changed files with 253 additions and 198 deletions

View File

@ -61,8 +61,10 @@ public:
// get a UUID based on a hash of this LLGLTFMaterial
LLUUID getHash() const
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
LLMD5 md5;
md5.update((unsigned char*) this, sizeof(this));
md5.finalize();
LLUUID id;
md5.raw_digest(id.mData);
return id;

View File

@ -1715,6 +1715,8 @@ BOOL LLNetworkData::isValid(U16 param_type, U32 size)
return (size == 4);
case PARAMS_RENDER_MATERIAL:
return (size > 1);
case PARAMS_REFLECTION_PROBE:
return (size == 9);
}
return FALSE;

View File

@ -102,7 +102,7 @@ void main()
vec3 lv =(light [ light_idx ].xyz - pos);
calcHalfVectors(lv, n, v, h, l, nh, nl, nv, vh, lightDist);
if (nl > 0.0 || nv > 0.0)
if (nl > 0.0)
{
float dist = lightDist / lightSize;
float dist_atten = 1.0 - (dist + falloff)/(1.0 + falloff);

View File

@ -38,6 +38,21 @@
#define DEBUG_SPOT_SPEC_POS 0
#define DEBUG_SPOT_REFLECTION 0
#define DEBUG_PBR_LIGHT_H 0 // Half vector
#define DEBUG_PBR_LIHGT_L 0 // Light vector
#define DEBUG_PBR_LIGHT_NH 0 // dot(n,h)
#define DEBUG_PBR_LIGHT_NL 0 // doh(n,l)
#define DEBUG_PBR_LIGHT_NV 0 // doh(n,v)
#define DEBUG_PBR_LIGHT_VH 0 // doh(v,h)
#define DEBUG_PBR_LIGHT_DIFFUSE_COLOR 0 // non PBR spotlight
#define DEBUG_PBR_LIGHT_SPECULAR_COLOR 0 // non PBR spotlight
#define DEBUG_PBR_LIGHT_INTENSITY 0 // Light intensity
#define DEBUG_PBR_LIGHT_INTENSITY_NL 0 // Light intensity * dot(n,l)
#define DEBUG_PBR_LIGHT_BRDF_DIFFUSE 0
#define DEBUG_PBR_LIGHT_BRDF_SPECULAR 0
#define DEBUG_PBR_LIGHT_BRDF_FINAL 0 // BRDF Diffuse + BRDF Specular
#define DEBUG_PBR_SHADOW 0 // Show inverted shadow
#ifdef DEFINE_GL_FRAGCOLOR
out vec4 frag_color;
#else
@ -96,6 +111,13 @@ void initMaterial( vec3 diffuse, vec3 packedORM, out float alphaRough, out vec3
vec3 srgb_to_linear(vec3 cs);
vec4 texture2DLodSpecular(vec2 tc, float lod);
vec3 colorized_dot(float x)
{
if (x > 0.0) return vec3( 0, x, 0 );
if (x < 0.0) return vec3( x, 0, 0 );
return vec3( 0, 0, 1 );
}
vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
@ -174,12 +196,8 @@ void main()
dlit = getProjectedLightDiffuseColor( l_dist, proj_tc.xy );
slit = getProjectedLightSpecularColor( pos, n );
// vec3 intensity = getLightIntensitySpot( color, size, lightDist, v );
colorDiffuse = shadow * dlit * nl * dist_atten;
colorSpec = shadow * slit * nl * dist_atten;
// colorDiffuse *= BRDFLambertian ( reflect0, reflect90, c_diff , specWeight, vh );
// colorSpec *= BRDFSpecularGGX( reflect0, reflect90, alphaRough, specWeight, vh, nl, nv, nh );
colorDiffuse = shadow * dist_atten * nl * (dlit*0.5 + BRDFLambertian ( reflect0, reflect90, c_diff , specWeight, vh ));
colorSpec = shadow * dist_atten * nl * (slit + BRDFSpecularGGX( reflect0, reflect90, alphaRough, specWeight, vh, nl, nv, nh ));
#if DEBUG_PBR_SPOT_DIFFUSE
colorDiffuse = dlit.rgb; colorSpec = vec3(0);
@ -212,6 +230,65 @@ void main()
colorDiffuse = vec3(0.5); colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIGHT_H
colorDiffuse = h*0.5 + 0.5; colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIHGT_L
colorDiffuse = l*0.5 + 0.5; colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIGHT_NH
colorDiffuse = colorized_dot(nh); colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIGHT_NL
colorDiffuse = colorized_dot(nl); colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIGHT_NV
colorDiffuse = colorized_dot(nv); colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIGHT_VH
colorDiffuse = colorized_dot(vh); colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIGHT_DIFFUSE_COLOR
colorDiffuse = dlit;
#endif
#if DEBUG_PBR_LIGHT_SPECULAR_COLOR
colorDiffuse = slit;
#endif
#if DEBUG_PBR_LIGHT_INTENSITY
colorDiffuse = getLightIntensitySpot( color, size, lightDist, v ); colorSpec = vec3(0);
// colorDiffuse = nl * dist_atten;
#endif
#if DEBUG_PBR_LIGHT_INTENSITY_NL
colorDiffuse = getLightIntensitySpot( color, size, lightDist, v ) * nl; colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIGHT_BRDF_DIFFUSE
vec3 c_diff, reflect0, reflect90;
float alphaRough, specWeight;
initMaterial( diffuse, packedORM, alphaRough, c_diff, reflect0, reflect90, specWeight );
colorDiffuse = BRDFLambertian ( reflect0, reflect90, c_diff , specWeight, vh );
colorSpec = vec3(0);
#endif
#if DEBUG_PBR_LIGHT_BRDF_SPECULAR
vec3 c_diff, reflect0, reflect90;
float alphaRough, specWeight;
initMaterial( diffuse, packedORM, alphaRough, c_diff, reflect0, reflect90, specWeight );
colorDiffuse = vec3(0);
colorSpec = BRDFSpecularGGX( reflect0, reflect90, alphaRough, specWeight, vh, nl, nv, nh );
#endif
#if DEBUG_PBR_LIGHT_BRDF_FINAL
vec3 c_diff, reflect0, reflect90;
float alphaRough, specWeight;
initMaterial( diffuse, packedORM, alphaRough, c_diff, reflect0, reflect90, specWeight );
colorDiffuse = nl * BRDFLambertian ( reflect0, reflect90, c_diff , specWeight, vh );
colorSpec = nl * BRDFSpecularGGX( reflect0, reflect90, alphaRough, specWeight, vh, nl, nv, nh );
#endif
#if DEBUG_PBR_SHADOW
colorDiffuse = 1.0 - vec3(shadow);
colorSpec = vec3(0);
#endif
final_color = colorDiffuse + colorSpec;
}
else

View File

@ -102,7 +102,7 @@ void main()
float alphaRough, specWeight;
initMaterial( diffuse, packedORM, alphaRough, c_diff, reflect0, reflect90, specWeight );
if (nl > 0.0 || nv > 0.0)
if (nl > 0.0)
{
vec3 intensity = dist_atten * getLightIntensityPoint(color, size, lightDist);
colorDiffuse += intensity * nl * BRDFLambertian (reflect0, reflect90, c_diff , specWeight, vh);

View File

@ -167,15 +167,8 @@ void main()
dlit = getProjectedLightDiffuseColor( l_dist, proj_tc.xy );
slit = getProjectedLightSpecularColor( pos, n );
// vec3 intensity = getLightIntensitySpot( color, size, lightDist, v );
// colorDiffuse = shadow * dlit * nl;
// colorSpec = shadow * slit * nl;
// colorDiffuse *= BRDFLambertian ( reflect0, reflect90, c_diff , specWeight, vh );
// colorSpec *= BRDFSpecularGGX( reflect0, reflect90, alphaRough, specWeight, vh, nl, nv, nh );
colorDiffuse = shadow * dlit * nl * dist_atten;
colorSpec = shadow * slit * nl * dist_atten;
colorDiffuse = shadow * dist_atten * nl * (dlit*0.5 + BRDFLambertian ( reflect0, reflect90, c_diff , specWeight, vh ));
colorSpec = shadow * dist_atten * nl * (slit + BRDFSpecularGGX( reflect0, reflect90, alphaRough, specWeight, vh, nl, nv, nh ));
#if DEBUG_PBR_SPOT_DIFFUSE
colorDiffuse = dlit.rgb; colorSpec = vec3(0);

View File

@ -43,6 +43,7 @@ RenderGamma 1 0
RenderGlowResolutionPow 1 9
RenderGround 1 1
RenderMaxPartCount 1 8192
RenderObjectBump 1 1
RenderLocalLights 1 1
RenderReflectionDetail 1 4
RenderTerrainDetail 1 1

View File

@ -645,8 +645,8 @@ static void settings_to_globals()
static void settings_modify()
{
LLPipeline::sRenderTransparentWater = gSavedSettings.getBOOL("RenderTransparentWater");
LLPipeline::sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
LLPipeline::sRenderDeferred = LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred");
LLPipeline::sRenderBump = TRUE; // FALSE is deprecated -- gSavedSettings.getBOOL("RenderObjectBump");
LLPipeline::sRenderDeferred = TRUE; // FALSE is deprecated -- LLPipeline::sRenderBump&& gSavedSettings.getBOOL("RenderDeferred");
// LLRenderTarget::sUseFBO = LLPipeline::sRenderDeferred;
// [RLVa:KB] - @setsphere
LLRenderTarget::sUseFBO = LLPipeline::sRenderDeferred || (gSavedSettings.getBOOL("WindLightUseAtmosShaders") && LLPipeline::sUseDepthTexture);

View File

@ -695,6 +695,7 @@ void LLDrawPoolBump::endBump(U32 pass)
S32 LLDrawPoolBump::getNumDeferredPasses()
{
#if 0 //DEPRECATED -- RenderObjectBump should always be TRUE
// <FS:PP> Attempt to speed up things a little
// if (gSavedSettings.getBOOL("RenderObjectBump"))
static LLCachedControl<bool> RenderObjectBump(gSavedSettings, "RenderObjectBump");
@ -707,6 +708,9 @@ S32 LLDrawPoolBump::getNumDeferredPasses()
{
return 0;
}
#else
return 1;
#endif
}
void LLDrawPoolBump::renderDeferred(S32 pass)

View File

@ -2086,8 +2086,7 @@ void LLFloaterPreference::onUpdatePopupFilter()
void LLFloaterPreference::refreshEnabledState()
{
// <FS:Ansariel> Improved graphics preferences
LLCheckBoxCtrl* ctrl_pbr = getChild<LLCheckBoxCtrl>("UsePBRShaders");
LLCheckBoxCtrl* ctrl_pbr = getChild<LLCheckBoxCtrl>("UsePBRShaders");
F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple");
@ -2150,8 +2149,7 @@ void LLFloaterPreference::refreshEnabledState()
sky->setEnabled(TRUE);
//PBR
BOOL deferred = gSavedSettings.getBOOL("RenderDeferred");
ctrl_pbr->setEnabled(deferred && LLFeatureManager::getInstance()->isFeatureAvailable("RenderPBR"));
ctrl_pbr->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("RenderPBR"));
LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO");
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
@ -2260,58 +2258,10 @@ void LLAvatarComplexityControls::setIndirectMaxArc()
void LLFloaterPreference::disableUnavailableSettings()
{
LLComboBox* ctrl_reflections = getChild<LLComboBox>("Reflections");
// <FS:Ansariel> Doesn't exist anymore
//LLCheckBoxCtrl* ctrl_avatar_cloth = getChild<LLCheckBoxCtrl>("AvatarCloth");
//LLCheckBoxCtrl* ctrl_wind_light = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders");
//LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");
LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail");
LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO");
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail");
// disabled windlight
if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
{
// <FS:Ansariel> Doesn't exist anymore
//ctrl_wind_light->setEnabled(FALSE);
//ctrl_wind_light->setValue(FALSE);
sky->setEnabled(FALSE);
//deferred needs windlight, disable deferred
ctrl_shadows->setEnabled(FALSE);
ctrl_shadows->setValue(0);
ctrl_ssao->setEnabled(FALSE);
ctrl_ssao->setValue(FALSE);
ctrl_dof->setEnabled(FALSE);
ctrl_dof->setValue(FALSE);
// <FS:Ansariel> Doesn't exist anymore
//ctrl_deferred->setEnabled(FALSE);
//ctrl_deferred->setValue(FALSE);
}
// disabled deferred
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") ||
!gGLManager.mHasFramebufferObject)
{
ctrl_shadows->setEnabled(FALSE);
ctrl_shadows->setValue(0);
ctrl_ssao->setEnabled(FALSE);
ctrl_ssao->setValue(FALSE);
ctrl_dof->setEnabled(FALSE);
ctrl_dof->setValue(FALSE);
// <FS:Ansariel> Doesn't exist anymore
//ctrl_deferred->setEnabled(FALSE);
//ctrl_deferred->setValue(FALSE);
}
// disabled deferred SSAO
// disabled deferred SSAO
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO"))
{
ctrl_ssao->setEnabled(FALSE);

View File

@ -99,13 +99,13 @@ static void set_from_model(LLGLTFMaterial* mat, tinygltf::Model& model)
}
mat->setAlphaMode(material_in.alphaMode);
mat->mAlphaCutoff = material_in.alphaCutoff;
mat->mAlphaCutoff = llclamp((F32)material_in.alphaCutoff, 0.f, 1.f);
mat->mAlbedoColor = get_color(material_in.pbrMetallicRoughness.baseColorFactor);
mat->mEmissiveColor = get_color(material_in.emissiveFactor);
mat->mMetallicFactor = material_in.pbrMetallicRoughness.metallicFactor;
mat->mRoughnessFactor = material_in.pbrMetallicRoughness.roughnessFactor;
mat->mMetallicFactor = llclamp((F32)material_in.pbrMetallicRoughness.metallicFactor, 0.f, 1.f);
mat->mRoughnessFactor = llclamp((F32)material_in.pbrMetallicRoughness.roughnessFactor, 0.f, 1.f);
mat->mDoubleSided = material_in.doubleSided;
}

View File

@ -62,6 +62,7 @@ const std::string MATERIAL_NORMAL_DEFAULT_NAME = "Normal";
const std::string MATERIAL_METALLIC_DEFAULT_NAME = "Metallic Roughness";
const std::string MATERIAL_EMISSIVE_DEFAULT_NAME = "Emissive";
class LLMaterialEditorCopiedCallback : public LLInventoryCallback
{
public:
@ -164,6 +165,15 @@ void LLMaterialEditor::onClickCloseBtn(bool app_quitting)
}
}
void LLMaterialEditor::onClose(bool app_quitting)
{
// todo: will only revert whatever was recently selected,
// Later should work based of tools floater
LLSelectMgr::getInstance()->selectionRevertGLTFMaterials();
LLPreview::onClose(app_quitting);
}
LLUUID LLMaterialEditor::getAlbedoId()
{
return mAlbedoTextureCtrl->getValue().asUUID();
@ -1341,34 +1351,39 @@ void LLMaterialEditor::importMaterial()
(new LLMaterialFilePicker(this))->getFile();
}
class LLRemderMaterialFunctor : public LLSelectedTEFunctor
{
public:
LLRemderMaterialFunctor(LLGLTFMaterial *mat, const LLUUID &id)
: mMat(mat), mMatId(id)
{
}
virtual bool apply(LLViewerObject* objectp, S32 te)
{
if (objectp && objectp->permModify() && objectp->getVolume())
{
LLVOVolume* vobjp = (LLVOVolume*)objectp;
vobjp->setRenderMaterialID(te, mMatId);
vobjp->getTE(te)->setGLTFMaterial(mMat);
vobjp->updateTEMaterialTextures(te);
}
return true;
}
private:
LLPointer<LLGLTFMaterial> mMat;
LLUUID mMatId;
};
void LLMaterialEditor::applyToSelection()
{
// Todo: fix this, this is a hack, not a proper live preview
LLViewerObject* objectp = LLSelectMgr::instance().getSelection()->getFirstObject();
if (objectp && objectp->getVolume() && objectp->permModify())
{
LLGLTFMaterial* mat = new LLGLTFMaterial();
getGLTFMaterial(mat);
LLVOVolume* vobjp = (LLVOVolume*)objectp;
for (int i = 0; i < vobjp->getNumTEs(); ++i)
{
// this is here just to prevent material from immediately resetting
if (mAssetID.notNull())
{
vobjp->setRenderMaterialID(i, mAssetID);
}
else
{
const LLUUID placeholder("984e183e-7811-4b05-a502-d79c6f978a98");
vobjp->setRenderMaterialID(i, placeholder);
}
vobjp->getTE(i)->setGLTFMaterial(mat);
vobjp->updateTEMaterialTextures(i);
}
vobjp->markForUpdate(TRUE);
}
LLPointer<LLGLTFMaterial> mat = new LLGLTFMaterial();
getGLTFMaterial(mat);
const LLUUID placeholder("984e183e-7811-4b05-a502-d79c6f978a98");
LLUUID asset_id = mAssetID.notNull() ? mAssetID : placeholder;
LLRemderMaterialFunctor mat_func(mat, asset_id);
LLObjectSelectionHandle selected_objects = LLSelectMgr::getInstance()->getSelection();
selected_objects->applyToTEs(&mat_func);
}
void LLMaterialEditor::getGLTFMaterial(LLGLTFMaterial* mat)

View File

@ -103,6 +103,8 @@ public:
BOOL postBuild() override;
void onClickCloseBtn(bool app_quitting = false) override;
void onClose(bool app_quitting) override;
LLUUID getAlbedoId();
void setAlbedoId(const LLUUID& id);
void setAlbedoUploadId(const LLUUID& id);

View File

@ -2022,6 +2022,32 @@ BOOL LLSelectMgr::selectionRevertTextures()
return revert_successful;
}
void LLSelectMgr::selectionRevertGLTFMaterials()
{
struct f : public LLSelectedTEFunctor
{
LLObjectSelectionHandle mSelectedObjects;
f(LLObjectSelectionHandle sel) : mSelectedObjects(sel) {}
bool apply(LLViewerObject* object, S32 te)
{
if (object->permModify())
{
LLSelectNode* nodep = mSelectedObjects->findNode(object);
if (nodep && te < (S32)nodep->mSavedGLTFMaterials.size())
{
LLUUID id = nodep->mSavedGLTFMaterials[te];
object->setRenderMaterialID(te, id);
}
}
return true;
}
} setfunc(mSelectedObjects);
getSelection()->applyToTEs(&setfunc);
LLSelectMgrSendFunctor sendfunc;
getSelection()->applyToObjects(&sendfunc);
}
void LLSelectMgr::selectionSetBumpmap(U8 bumpmap, const LLUUID &image_id)
{
struct f : public LLSelectedTEFunctor
@ -5720,6 +5746,17 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
// this should be the only place that saved textures is called
node->saveTextures(texture_ids);
}
if (can_copy && can_transfer && node->getObject()->getVolume())
{
uuid_vec_t material_ids;
LLVOVolume* vobjp = (LLVOVolume*)node->getObject();
for (int i = 0; i < vobjp->getNumTEs(); ++i)
{
material_ids.push_back(vobjp->getRenderMaterialID(i));
}
node->savedGLTFMaterials(material_ids);
}
}
node->mValid = TRUE;
@ -6483,6 +6520,7 @@ LLSelectNode::LLSelectNode(const LLSelectNode& nodep)
}
saveTextures(nodep.mSavedTextures);
savedGLTFMaterials(nodep.mSavedGLTFMaterials);
}
LLSelectNode::~LLSelectNode()
@ -6598,6 +6636,20 @@ void LLSelectNode::saveTextures(const uuid_vec_t& textures)
}
}
void LLSelectNode::savedGLTFMaterials(const uuid_vec_t& materials)
{
if (mObject.notNull())
{
mSavedGLTFMaterials.clear();
for (uuid_vec_t::const_iterator materials_it = materials.begin();
materials_it != materials.end(); ++materials_it)
{
mSavedGLTFMaterials.push_back(*materials_it);
}
}
}
void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
{
mTextureScaleRatios.clear();

View File

@ -205,6 +205,7 @@ public:
void saveColors();
void saveShinyColors();
void saveTextures(const uuid_vec_t& textures);
void savedGLTFMaterials(const uuid_vec_t& materials);
void saveTextureScaleRatios(LLRender::eTexIndex index_to_query);
BOOL allowOperationOnNode(PermissionBit op, U64 group_proxy_power) const;
@ -242,6 +243,7 @@ public:
std::vector<LLColor4> mSavedColors;
std::vector<LLColor4> mSavedShinyColors;
uuid_vec_t mSavedTextures;
uuid_vec_t mSavedGLTFMaterials;
std::vector<LLVector3> mTextureScaleRatios;
std::vector<LLVector3> mSilhouetteVertices; // array of vertices to render silhouette of object
std::vector<LLVector3> mSilhouetteNormals; // array of normals to render silhouette of object
@ -682,6 +684,7 @@ public:
void selectionRevertColors();
void selectionRevertShinyColors();
BOOL selectionRevertTextures();
void selectionRevertGLTFMaterials();
void selectionSetBumpmap( U8 bumpmap, const LLUUID &image_id );
void selectionSetTexGen( U8 texgen );
void selectionSetShiny( U8 shiny, const LLUUID &image_id );

View File

@ -547,6 +547,21 @@ static bool handleRenderLocalLightsChanged(const LLSD& newvalue)
return true;
}
static bool handleRenderPBRChanged(const LLSD& newvalue)
{
if (gPipeline.isInit())
{
LLPipeline::refreshCachedSettings();
gPipeline.updateRenderDeferred();
gPipeline.releaseGLBuffers();
gPipeline.createGLBuffers();
gPipeline.resetVertexBuffers();
LLViewerShaderMgr::instance()->setShaders();
}
return true;
}
#if 0 // DEPRECATED
// NOTE: may be triggered by RenderDeferred OR RenderPBR changing, don't trust "newvalue"
static bool handleRenderDeferredChanged(const LLSD& newvalue)
{
@ -584,6 +599,7 @@ static bool handleRenderBumpChanged(const LLSD& newval)
}
return true;
}
#endif
static bool handleRenderDebugPipelineChanged(const LLSD& newvalue)
{
@ -1166,7 +1182,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
gSavedSettings.getControl("RenderGlowResolutionPow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
// DEPRECATED -- gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));
gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));
@ -1182,7 +1198,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
gSavedSettings.getControl("RenderAutoMaskAlphaDeferred")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
gSavedSettings.getControl("RenderAutoMaskAlphaNonDeferred")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleRenderBumpChanged, _2));
// DEPRECATED - gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleRenderBumpChanged, _2));
gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
gSavedSettings.getControl("RenderVSyncEnable")->getSignal()->connect(boost::bind(&handleVSyncChanged, _2));
gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
@ -1191,8 +1207,8 @@ void settings_setup_listeners()
// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
gSavedSettings.getControl("RenderResolutionMultiplier")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
// [/SL:KB]
gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleRenderDeferredChanged, _2));
gSavedSettings.getControl("RenderPBR")->getSignal()->connect(boost::bind(&handleRenderDeferredChanged, _2));
// DEPRECATED - gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleRenderDeferredChanged, _2));
gSavedSettings.getControl("RenderPBR")->getSignal()->connect(boost::bind(&handleRenderPBRChanged, _2));
gSavedSettings.getControl("RenderShadowDetail")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
gSavedSettings.getControl("RenderDeferredSSAO")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
gSavedSettings.getControl("RenderPerformanceTest")->getSignal()->connect(boost::bind(&handleRenderPerfTestChanged, _2));

View File

@ -2659,21 +2659,6 @@ class LLAdvancedEnableRenderDeferred: public view_listener_t
}
};
/////////////////////////////////////
// Enable Advanced Lighting Model sub-options
/////////////////////////////////////
class LLAdvancedEnableRenderDeferredOptions: public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
bool new_value = gGLManager.mHasFramebufferObject && LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_WINDLIGHT) > 1 &&
LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0 && gSavedSettings.getBOOL("RenderDeferred");
return new_value;
}
};
//////////////////
// ADMIN STATUS //
//////////////////
@ -12080,9 +12065,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLAdvancedCheckWireframe(), "Advanced.CheckWireframe");
// Develop > Render
view_listener_t::addMenu(new LLAdvancedEnableObjectObjectOcclusion(), "Advanced.EnableObjectObjectOcclusion");
view_listener_t::addMenu(new LLAdvancedEnableRenderFBO(), "Advanced.EnableRenderFBO");
view_listener_t::addMenu(new LLAdvancedEnableRenderDeferred(), "Advanced.EnableRenderDeferred");
view_listener_t::addMenu(new LLAdvancedEnableRenderDeferredOptions(), "Advanced.EnableRenderDeferredOptions");
view_listener_t::addMenu(new LLAdvancedToggleRandomizeFramerate(), "Advanced.ToggleRandomizeFramerate");
view_listener_t::addMenu(new LLAdvancedCheckRandomizeFramerate(), "Advanced.CheckRandomizeFramerate");
view_listener_t::addMenu(new LLAdvancedTogglePeriodicSlowFrame(), "Advanced.TogglePeriodicSlowFrame");

View File

@ -5076,7 +5076,14 @@ void LLViewerObject::updateTEMaterialTextures(U8 te)
auto fetch_texture = [](const LLUUID& id)
{
return LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_ALM, LLViewerTexture::LOD_TEXTURE);
LLViewerFetchedTexture* img = nullptr;
if (id.notNull())
{
img = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_ALM, LLViewerTexture::LOD_TEXTURE);
img->addTextureStats(64.f * 64.f, TRUE);
}
return img;
};
LLGLTFMaterial* mat = getTE(te)->getGLTFMaterial();

View File

@ -500,12 +500,12 @@ void LLViewerShaderMgr::setShaders()
llassert((gGLManager.mGLSLVersionMajor > 1 || gGLManager.mGLSLVersionMinor >= 10));
bool canRenderDeferred = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred");
bool hasWindLightShaders = LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders");
//bool canRenderDeferred = true; // DEPRECATED -- LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred");
//bool hasWindLightShaders = true; // DEPRECATED -- LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders");
S32 shadow_detail = gSavedSettings.getS32("RenderShadowDetail");
bool pbr = gSavedSettings.getBOOL("RenderPBR");
bool doingWindLight = hasWindLightShaders && gSavedSettings.getBOOL("WindLightUseAtmosShaders");
bool useRenderDeferred = doingWindLight && canRenderDeferred && gSavedSettings.getBOOL("RenderDeferred");
bool doingWindLight = true; //DEPRECATED -- hasWindLightShaders&& gSavedSettings.getBOOL("WindLightUseAtmosShaders");
bool useRenderDeferred = true; //DEPRECATED -- doingWindLight&& canRenderDeferred&& gSavedSettings.getBOOL("RenderDeferred");
S32 light_class = 3;
S32 interface_class = 2;
@ -682,67 +682,24 @@ void LLViewerShaderMgr::setShaders()
if (loadShadersObject())
{ //hardware skinning is enabled and rigged attachment shaders loaded correctly
BOOL avatar_cloth = gSavedSettings.getBOOL("RenderAvatarCloth");
// cloth is a class3 shader
S32 avatar_class = avatar_cloth ? 3 : 1;
S32 avatar_class = 1;
// Set the actual level
mShaderLevel[SHADER_AVATAR] = avatar_class;
loaded = loadShadersAvatar();
llassert(loaded);
if (mShaderLevel[SHADER_AVATAR] != avatar_class)
{
if(llmax(mShaderLevel[SHADER_AVATAR]-1,0) >= 3)
{
avatar_cloth = true;
}
else
{
avatar_cloth = false;
}
gSavedSettings.setBOOL("RenderAvatarCloth", avatar_cloth);
}
}
else
{ //hardware skinning not possible, neither is deferred rendering
mShaderLevel[SHADER_AVATAR] = 0;
mShaderLevel[SHADER_DEFERRED] = 0;
gSavedSettings.setBOOL("RenderDeferred", FALSE);
gSavedSettings.setBOOL("RenderAvatarCloth", FALSE);
loadShadersAvatar(); // unloads
loaded = loadShadersObject();
llassert(loaded);
llassert(false); // SHOULD NOT BE POSSIBLE
}
}
if (!loaded)
{ //some shader absolutely could not load, try to fall back to a simpler setting
if (gSavedSettings.getBOOL("WindLightUseAtmosShaders"))
{ //disable windlight and try again
gSavedSettings.setBOOL("WindLightUseAtmosShaders", FALSE);
LL_WARNS() << "Falling back to no windlight shaders." << LL_ENDL;
reentrance = false;
setShaders();
return;
}
}
llassert(loaded);
if (loaded && !loadShadersDeferred())
{ //everything else succeeded but deferred failed, disable deferred and try again
gSavedSettings.setBOOL("RenderDeferred", FALSE);
LL_WARNS() << "Falling back to no deferred shaders." << LL_ENDL;
reentrance = false;
setShaders();
return;
}
loaded = loaded && loadShadersDeferred();
llassert(loaded);
if (gViewerWindow)
{

View File

@ -2015,8 +2015,8 @@ LLViewerWindow::LLViewerWindow(const Params& p)
gSavedSettings.getBOOL("RenderVSyncEnable"),
!gHeadlessClient,
p.ignore_pixel_depth,
//gSavedSettings.getBOOL("RenderDeferred") ? 0 : gSavedSettings.getU32("RenderFSAASamples")); //don't use window level anti-aliasing if FBOs are enabled
gSavedSettings.getBOOL("RenderDeferred") ? 0 : gSavedSettings.getU32("RenderFSAASamples"), //don't use window level anti-aliasing if FBOs are enabled
//0); //don't use window level anti-aliasing
0, //don't use window level anti-aliasing
useLegacyCursors); // <FS:LO> Legacy cursor setting from main program
if (NULL == mWindow)

View File

@ -477,7 +477,7 @@ void LLPipeline::init()
gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity");
gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");
sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD");
sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
sRenderBump = TRUE; // DEPRECATED -- gSavedSettings.getBOOL("RenderObjectBump");
sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");
LLVertexBuffer::sUseStreamDraw = gSavedSettings.getBOOL("RenderUseStreamVBO");
// <FS:Ansariel> Vertex Array Objects are required in OpenGL core profile
@ -597,8 +597,8 @@ void LLPipeline::init()
connectRefreshCachedSettingsSafe("RenderAvatarMaxNonImpostors");
connectRefreshCachedSettingsSafe("RenderDelayVBUpdate");
connectRefreshCachedSettingsSafe("UseOcclusion");
connectRefreshCachedSettingsSafe("WindLightUseAtmosShaders");
connectRefreshCachedSettingsSafe("RenderDeferred");
// DEPRECATED -- connectRefreshCachedSettingsSafe("WindLightUseAtmosShaders");
// DEPRECATED -- connectRefreshCachedSettingsSafe("RenderDeferred");
connectRefreshCachedSettingsSafe("RenderPBR");
connectRefreshCachedSettingsSafe("RenderDeferredSunWash");
connectRefreshCachedSettingsSafe("RenderFSAASamples");
@ -1156,7 +1156,7 @@ void LLPipeline::updateRenderTransparentWater()
//static
void LLPipeline::updateRenderBump()
{
sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
sRenderBump = TRUE; // DEPRECATED -- gSavedSettings.getBOOL("RenderObjectBump");
}
// static
@ -1166,8 +1166,7 @@ void LLPipeline::updateRenderDeferred()
RenderDeferred &&
LLRenderTarget::sUseFBO &&
LLPipeline::sRenderBump &&
WindLightUseAtmosShaders &&
(bool) LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred");
WindLightUseAtmosShaders;
sRenderPBR = sRenderDeferred && gSavedSettings.getBOOL("RenderPBR");
exoPostProcess::instance().ExodusRenderPostUpdate(); // <FS:CR> Import Vignette from Exodus
@ -1203,8 +1202,8 @@ void LLPipeline::refreshCachedSettings()
&& gSavedSettings.getBOOL("UseOcclusion")
&& gGLManager.mHasOcclusionQuery) ? 2 : 0;
WindLightUseAtmosShaders = gSavedSettings.getBOOL("WindLightUseAtmosShaders");
RenderDeferred = gSavedSettings.getBOOL("RenderDeferred");
WindLightUseAtmosShaders = TRUE; // DEPRECATED -- gSavedSettings.getBOOL("WindLightUseAtmosShaders");
RenderDeferred = TRUE; // DEPRECATED -- gSavedSettings.getBOOL("RenderDeferred");
RenderDeferredSunWash = gSavedSettings.getF32("RenderDeferredSunWash");
RenderFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
RenderResolutionDivisor = gSavedSettings.getU32("RenderResolutionDivisor");
@ -3963,6 +3962,7 @@ void LLPipeline::touchTextures(LLDrawInfo* info)
touchTexture(info->mTexture, info->mVSize);
touchTexture(info->mSpecularMap, info->mVSize);
touchTexture(info->mNormalMap, info->mVSize);
touchTexture(info->mEmissiveMap, info->mVSize);
}
void LLPipeline::postSort(LLCamera& camera)

View File

@ -111,6 +111,7 @@
layout="topleft"
left_delta="0"
top_pad="5"
min_val="0"
max_val="1"
name="transparency"
width="64"
@ -169,6 +170,7 @@
layout="topleft"
left_delta="0"
top_pad="5"
min_val="0"
max_val="1"
name="alpha cutoff"
width="64"
@ -245,6 +247,7 @@
layout="topleft"
left_delta="0"
top_pad="5"
min_val="0"
max_val="1"
name="metalness factor"
width="64"
@ -270,7 +273,7 @@
layout="topleft"
left_delta="0"
top_pad="5"
min_val="0"
max_val="1"
name="roughness factor"
width="64"

View File

@ -4399,18 +4399,6 @@
</menu_item_check>
<menu_item_separator />
<menu_item_check
label="Advanced Lighting Model"
name="Advanced Lighting Model">
<menu_item_check.on_check
function="CheckControl"
parameter="RenderDeferred" />
<menu_item_check.on_click
function="ToggleControl"
parameter="RenderDeferred" />
<menu_item_check.on_enable
function="Advanced.EnableRenderDeferred" />
</menu_item_check>
<menu_item_check
label=" Shadows from Sun/Moon/Projectors"
name="Shadows from Sun/Moon/Projectors">