# Conflicts:
#	doc/contributions.txt
#	indra/newview/app_settings/settings.xml
#	indra/newview/lldrawpoolalpha.cpp
#	indra/newview/llfilepicker.cpp
#	indra/newview/llpanelface.cpp
#	indra/newview/skins/default/xui/en/notifications.xml
master
Ansariel 2023-07-18 11:17:02 +02:00
commit e85546fc3d
21 changed files with 140 additions and 35 deletions

View File

@ -1419,8 +1419,8 @@ Sovereign Engineer
SL-18497
SL-18525
SL-18534
SL-19336
SL-19690
SL-19336
SpacedOut Frye
VWR-34
VWR-45

View File

@ -1306,8 +1306,9 @@ void LLShaderMgr::initAttribsAndUniforms()
mReservedUniforms.push_back("warmthAmount");
mReservedUniforms.push_back("glowStrength");
mReservedUniforms.push_back("glowDelta");
mReservedUniforms.push_back("glowNoiseMap");
llassert(mReservedUniforms.size() == LLShaderMgr::GLOW_DELTA+1);
llassert(mReservedUniforms.size() == LLShaderMgr::GLOW_NOISE_MAP+1);
mReservedUniforms.push_back("minimum_alpha");

View File

@ -131,6 +131,7 @@ public:
GLOW_WARMTH_AMOUNT, // "warmthAmount"
GLOW_STRENGTH, // "glowStrength"
GLOW_DELTA, // "glowDelta"
GLOW_NOISE_MAP, // "glowNoiseMap"
MINIMUM_ALPHA, // "minimum_alpha"
EMISSIVE_BRIGHTNESS, // "emissive_brightness"

View File

@ -12318,6 +12318,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<key>RenderPostProcessingHDR</key>
<map>
<key>Comment</key>
<string>Enable HDR for post processing buffer</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>RenderMaxOpenGLVersion</key>
<map>
<key>Comment</key>
@ -13234,6 +13245,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>9</integer>
</map>
<key>RenderGlowHDR</key>
<map>
<key>Comment</key>
<string>Enable HDR for glow map</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>RenderGlowStrength</key>
<map>
<key>Comment</key>
@ -13282,6 +13304,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<real>1.3</real>
</map>
<key>RenderGlowNoise</key>
<map>
<key>Comment</key>
<string>Enables glow noise (dithering). Reduces banding from glow in certain cases.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<real>1</real>
</map>
<key>DisableAllRenderTypes</key>
<map>
<key>Comment</key>

View File

@ -28,6 +28,10 @@
out vec4 frag_color;
uniform sampler2D diffuseMap;
#if HAS_NOISE
uniform sampler2D glowNoiseMap;
uniform vec2 screen_res;
#endif
uniform float minLuminance;
uniform float maxExtractAlpha;
uniform vec3 lumWeights;
@ -44,7 +48,16 @@ void main()
float lum = smoothstep(minLuminance, minLuminance+1.0, dot(col.rgb, lumWeights ) );
float warmth = smoothstep(minLuminance, minLuminance+1.0, max(col.r * warmthWeights.r, max(col.g * warmthWeights.g, col.b * warmthWeights.b)) );
frag_color.rgb = col.rgb;
#if HAS_NOISE
float TRUE_NOISE_RES = 128; // See mTrueNoiseMap
// *NOTE: Usually this is vary_fragcoord not vary_texcoord0, but glow extraction is in screen space
vec3 glow_noise = texture(glowNoiseMap, vary_texcoord0.xy * (screen_res / TRUE_NOISE_RES)).xyz;
// Dithering. Reduces banding effects in the reduced precision glow buffer.
float NOISE_DEPTH = 64.0;
col.rgb += glow_noise / NOISE_DEPTH;
col.rgb = max(col.rgb, vec3(0));
#endif
frag_color.rgb = col.rgb;
frag_color.a = max(col.a, mix(lum, warmth, warmthAmount) * maxExtractAlpha);
}

View File

@ -214,11 +214,11 @@ BOOL LLFilePicker::setupFilter(ELoadFilter filter)
mOFN.lpstrFilter = ANIM_FILTER \
L"\0";
break;
case FFLOAD_GLTF:
mOFN.lpstrFilter = GLTF_FILTER \
L"\0";
break;
case FFLOAD_COLLADA:
case FFLOAD_GLTF:
mOFN.lpstrFilter = GLTF_FILTER \
L"\0";
break;
case FFLOAD_COLLADA:
mOFN.lpstrFilter = COLLADA_FILTER \
L"\0";
break;
@ -849,7 +849,6 @@ void set_nav_save_data(LLFilePicker::ESaveFilter filter, std::string &extension,
creator = "\?\?\?\?";
extension = "xaf";
break;
case LLFilePicker::FFSAVE_GLTF:
type = "\?\?\?\?";
creator = "\?\?\?\?";

View File

@ -475,6 +475,8 @@ void LLFloaterEditExtDayCycle::refresh()
void LLFloaterEditExtDayCycle::setEditSettingsAndUpdate(const LLSettingsBase::ptr_t &settings)
{
setEditDayCycle(std::dynamic_pointer_cast<LLSettingsDay>(settings));
showHDRNotification(std::dynamic_pointer_cast<LLSettingsDay>(settings));
}
void LLFloaterEditExtDayCycle::setEditDayCycle(const LLSettingsDay::ptr_t &pday)
@ -1710,6 +1712,28 @@ void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID item_id, S32 track)
}
}
void LLFloaterEditExtDayCycle::showHDRNotification(const LLSettingsDay::ptr_t &pday)
{
for (U32 i = LLSettingsDay::TRACK_GROUND_LEVEL; i <= LLSettingsDay::TRACK_MAX; i++)
{
LLSettingsDay::CycleTrack_t &day_track = pday->getCycleTrack(i);
LLSettingsDay::CycleTrack_t::iterator iter = day_track.begin();
LLSettingsDay::CycleTrack_t::iterator end = day_track.end();
while (iter != end)
{
LLSettingsSky::ptr_t sky = std::static_pointer_cast<LLSettingsSky>(iter->second);
if (sky && sky->canAutoAdjust())
{
LLNotificationsUtil::add("AutoAdjustHDRSky");
return;
}
iter++;
}
}
}
void LLFloaterEditExtDayCycle::onAssetLoadedForInsertion(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 source_track, S32 dest_track, LLSettingsBase::TrackPosition frame)
{
std::function<void()> cb = [this, settings, frame, source_track, dest_track]()

View File

@ -188,6 +188,8 @@ private:
bool isRemovingFrameAllowed();
bool isAddingFrameAllowed();
void showHDRNotification(const LLSettingsDay::ptr_t &pday);
LLSettingsDay::ptr_t mEditDay; // edited copy
LLSettingsDay::Seconds mDayLength;
U32 mCurrentTrack;

View File

@ -1327,9 +1327,7 @@ void LLMaterialEditor::createInventoryItem(const std::string &buffer, const std:
[](LLUUID item_id, LLUUID new_asset_id, LLUUID new_item_id, LLSD response)
{
// done callback
LL_INFOS("Material") << "inventory item uploaded. item: " << item_id << " asset: " << new_asset_id << " new_item_id: " << new_item_id << " response: " << response << LL_ENDL;
LLSD params = llsd::map("ASSET_ID", new_asset_id);
LLNotificationsUtil::add("MaterialCreated", params);
LL_INFOS("Material") << "inventory item uploaded. item: " << item_id << " new_item_id: " << new_item_id << " response: " << response << LL_ENDL;
},
nullptr // failure callback, floater already closed
);

View File

@ -217,7 +217,7 @@ void LLPanelSettingsSkyAtmosTab::refresh()
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ICE_LEVEL)->setValue(ice_level);
getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->setValue(rp_ambiance);
updateGammaLabel();
updateGammaLabel(should_auto_adjust);
}
//-------------------------------------------------------------------------
@ -335,10 +335,10 @@ void LLPanelSettingsSkyAtmosTab::onReflectionProbeAmbianceChanged()
}
void LLPanelSettingsSkyAtmosTab::updateGammaLabel()
void LLPanelSettingsSkyAtmosTab::updateGammaLabel(bool auto_adjust)
{
if (!mSkySettings) return;
F32 ambiance = mSkySettings->getReflectionProbeAmbiance();
F32 ambiance = mSkySettings->getReflectionProbeAmbiance(auto_adjust);
if (ambiance != 0.f)
{
childSetValue("scene_gamma_label", getString("hdr_string"));

View File

@ -80,7 +80,7 @@ private:
void onDropletRadiusChanged();
void onIceLevelChanged();
void onReflectionProbeAmbianceChanged();
void updateGammaLabel();
void updateGammaLabel(bool auto_adjust = false);
};

View File

@ -1146,7 +1146,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
mComboMatMedia->setEnabled(editable);
//LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
//LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
if (mRadioMatType->getSelectedIndex() < MATTYPE_DIFFUSE)
{
mRadioMatType->selectNthItem(MATTYPE_DIFFUSE);
@ -1170,7 +1170,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
// *NOTE: The "identical" variable is currently only used to decide if
// the texgen control should be tentative - this is not used by GLTF
// materials. -Cosmic;2022-11-09
bool identical = true; // true because it is anded below
bool identical = true; // true because it is anded below
bool identical_diffuse = false;
bool identical_norm = false;
bool identical_spec = false;

View File

@ -1105,12 +1105,16 @@ void LLToolDragAndDrop::dropMaterialOneFace(LLViewerObject* hit_obj,
LL_WARNS() << "LLToolDragAndDrop::dropTextureOneFace no material item." << LL_ENDL;
return;
}
// SL-20013 must save asset_id before handleDropMaterialProtections since our item instance
// may be deleted if it is moved into task inventory
LLUUID asset_id = item->getAssetUUID();
BOOL success = handleDropMaterialProtections(hit_obj, item, source, src_id);
if (!success)
{
return;
}
LLUUID asset_id = item->getAssetUUID();
if (asset_id.isNull())
{
// use blank material
@ -1136,13 +1140,17 @@ void LLToolDragAndDrop::dropMaterialAllFaces(LLViewerObject* hit_obj,
LL_WARNS() << "LLToolDragAndDrop::dropTextureAllFaces no material item." << LL_ENDL;
return;
}
// SL-20013 must save asset_id before handleDropMaterialProtections since our item instance
// may be deleted if it is moved into task inventory
LLUUID asset_id = item->getAssetUUID();
BOOL success = handleDropMaterialProtections(hit_obj, item, source, src_id);
if (!success)
{
return;
}
LLUUID asset_id = item->getAssetUUID();
if (asset_id.isNull())
{
// use blank material

View File

@ -1148,6 +1148,7 @@ void settings_setup_listeners()
setting_setup_signal_listener(gSavedSettings, "RenderUIBuffer", handleWindowResized);
setting_setup_signal_listener(gSavedSettings, "RenderDepthOfField", handleReleaseGLBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderFSAASamples", handleReleaseGLBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderPostProcessingHDR", handleReleaseGLBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderSpecularResX", handleLUTBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderSpecularResY", handleLUTBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderSpecularExponent", handleLUTBufferChanged);
@ -1156,6 +1157,8 @@ void settings_setup_listeners()
setting_setup_signal_listener(gSavedSettings, "RenderGlow", handleReleaseGLBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderGlow", handleSetShaderChanged);
setting_setup_signal_listener(gSavedSettings, "RenderGlowResolutionPow", handleReleaseGLBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderGlowHDR", handleReleaseGLBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderGlowNoise", handleSetShaderChanged);
setting_setup_signal_listener(gSavedSettings, "RenderGammaFull", handleSetShaderChanged);
setting_setup_signal_listener(gSavedSettings, "RenderVolumeLODFactor", handleVolumeLODChanged);
setting_setup_signal_listener(gSavedSettings, "RenderAvatarLODFactor", handleAvatarLODChanged);

View File

@ -1695,7 +1695,7 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam
LLFloaterReg::showInstance("preview_sound", LLSD(obj_id), take_focus);
break;
case LLAssetType::AT_MATERIAL:
LLFloaterReg::showInstance("material editor", LLSD(obj_id), take_focus);
LLFloaterReg::showInstance("material_editor", LLSD(obj_id), take_focus);
break;
default:
LL_DEBUGS("Messaging") << "No preview method for previewable asset type : " << LLAssetType::lookupHumanReadable(asset_type) << LL_ENDL;

View File

@ -900,11 +900,20 @@ BOOL LLViewerShaderMgr::loadShadersEffects()
if (success)
{
gGlowExtractProgram.mName = "Glow Extract Shader (Post)";
const bool use_glow_noise = gSavedSettings.getBOOL("RenderGlowNoise");
const std::string glow_noise_label = use_glow_noise ? " (+Noise)" : "";
gGlowExtractProgram.mName = llformat("Glow Extract Shader (Post)%s", glow_noise_label.c_str());
gGlowExtractProgram.mShaderFiles.clear();
gGlowExtractProgram.mShaderFiles.push_back(make_pair("effects/glowExtractV.glsl", GL_VERTEX_SHADER));
gGlowExtractProgram.mShaderFiles.push_back(make_pair("effects/glowExtractF.glsl", GL_FRAGMENT_SHADER));
gGlowExtractProgram.mShaderLevel = mShaderLevel[SHADER_EFFECT];
if (use_glow_noise)
{
gGlowExtractProgram.addPermutation("HAS_NOISE", "1");
}
success = gGlowExtractProgram.createShader(NULL, NULL);
if (!success)
{

View File

@ -1213,6 +1213,8 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
readCacheHeader();
LL_INFOS() << "Viewer Object Cache Versions - expected: " << cache_version << " found: " << mMetaInfo.mVersion << LL_ENDL;
if( mMetaInfo.mVersion != cache_version
|| mMetaInfo.mAddressSize != expected_address)
{
@ -1223,7 +1225,8 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
clearCacheInMemory();
}
else //delete the current cache if the format does not match.
{
{
LL_INFOS() << "Viewer Object Cache Versions unmatched. clearing cache." << LL_ENDL;
removeCache();
}
}

View File

@ -168,6 +168,7 @@ S32 LLPipeline::RenderGlowResolutionPow;
S32 LLPipeline::RenderGlowIterations;
F32 LLPipeline::RenderGlowWidth;
F32 LLPipeline::RenderGlowStrength;
bool LLPipeline::RenderGlowNoise;
bool LLPipeline::RenderDepthOfField;
bool LLPipeline::RenderDepthOfFieldInEditMode;
// <FS:Beq> FIRE-16728 Add free aim mouse and focus lock
@ -556,6 +557,7 @@ void LLPipeline::init()
connectRefreshCachedSettingsSafe("RenderGlowIterations");
connectRefreshCachedSettingsSafe("RenderGlowWidth");
connectRefreshCachedSettingsSafe("RenderGlowStrength");
connectRefreshCachedSettingsSafe("RenderGlowNoise");
connectRefreshCachedSettingsSafe("RenderDepthOfField");
connectRefreshCachedSettingsSafe("RenderDepthOfFieldInEditMode");
connectRefreshCachedSettingsSafe("CameraFocusTransitionTime");
@ -925,7 +927,9 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
mSceneMap.allocate(resX, resY, GL_RGB, true);
}
mPostMap.allocate(resX, resY, GL_RGBA);
const bool post_hdr = gSavedSettings.getBOOL("RenderPostProcessingHDR");
const U32 post_color_fmt = post_hdr ? GL_RGBA16F : GL_RGBA;
mPostMap.allocate(resX, resY, post_color_fmt);
//HACK make screenbuffer allocations start failing after 30 seconds
if (gSavedSettings.getBOOL("SimulateFBOFailure"))
@ -1098,6 +1102,7 @@ void LLPipeline::refreshCachedSettings()
RenderGlowIterations = gSavedSettings.getS32("RenderGlowIterations");
RenderGlowWidth = gSavedSettings.getF32("RenderGlowWidth");
RenderGlowStrength = gSavedSettings.getF32("RenderGlowStrength");
RenderGlowNoise = gSavedSettings.getBOOL("RenderGlowNoise");
RenderDepthOfField = gSavedSettings.getBOOL("RenderDepthOfField");
RenderDepthOfFieldInEditMode = gSavedSettings.getBOOL("RenderDepthOfFieldInEditMode");
// <FS:Beq> FIRE-16728 Add free aim mouse and focus lock
@ -1268,9 +1273,11 @@ void LLPipeline::createGLBuffers()
// allocate screen space glow buffers
const U32 glow_res = llmax(1, llmin(512, 1 << gSavedSettings.getS32("RenderGlowResolutionPow")));
const bool glow_hdr = gSavedSettings.getBOOL("RenderGlowHDR");
const U32 glow_color_fmt = glow_hdr ? GL_RGBA16F : GL_RGBA;
for (U32 i = 0; i < 3; i++)
{
mGlow[i].allocate(512, glow_res, GL_RGBA);
mGlow[i].allocate(512, glow_res, glow_color_fmt);
}
allocateScreenBuffer(resX, resY);
@ -7030,6 +7037,19 @@ void LLPipeline::generateGlow(LLRenderTarget* src)
warmthWeights.mV[2]);
gGlowExtractProgram.uniform1f(LLShaderMgr::GLOW_WARMTH_AMOUNT, warmthAmount);
if (RenderGlowNoise)
{
S32 channel = gGlowExtractProgram.enableTexture(LLShaderMgr::GLOW_NOISE_MAP);
if (channel > -1)
{
gGL.getTexUnit(channel)->bindManual(LLTexUnit::TT_TEXTURE, mTrueNoiseMap);
gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
}
gGlowExtractProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES,
mGlow[2].getWidth(),
mGlow[2].getHeight());
}
{
LLGLEnable blend_on(GL_BLEND);

View File

@ -1022,6 +1022,7 @@ public:
static S32 RenderGlowIterations;
static F32 RenderGlowWidth;
static F32 RenderGlowStrength;
static bool RenderGlowNoise;
static bool RenderDepthOfField;
static bool RenderDepthOfFieldInEditMode;
// <FS:Beq> FIRE-16728

View File

@ -4945,9 +4945,6 @@ Falls Sie dieses Objekt sehen möchten, nehmen Sie es ab und hängen es an einem
<usetemplate ignoretext="Warnen, falls geriggtes Mesh an einem HUD-Punkt angehängt ist." name="okignore" yestext="OK"/>
</notification>
<notification name="MaterialCreated">
Material erfolggreich erstellt. Asset ID: [ASSET_ID]
</notification>
<notification name="ReflectionProbeApplied">
WARNUNG: Sie haben aus Ihrem Objekt einen Reflexionstest erzeugt. Dieser verändert implizit das Objekt, um dessen Einflusskörper nachzuahmen. Diese Änderungen sind nicht umkehrbar. Möchten Sie fortfahren?
<usetemplate ignoretext="Hinweis zum Reflexionstest" name="okcancelignore" yestext="OK" notext="Abbrechen"/>

View File

@ -14030,13 +14030,6 @@ If you want to see this object, remove it and re-attach it to an avatar attachme
yestext="OK"/>
</notification>
<notification
icon="notifytip.tga"
name="MaterialCreated"
type="notifytip">
Material successfully created. Asset ID: [ASSET_ID]
</notification>
<notification
icon="notifytip.tga"
name="ReflectionProbeApplied"