diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index ef947f0493..77be50854f 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -1402,8 +1402,7 @@ void LLShaderMgr::initAttribsAndUniforms()
mReservedUniforms.push_back("translationPalette");
// Import Vignette from Exodus
- mReservedUniforms.push_back("exo_vignette");
- mReservedUniforms.push_back("exo_screen");
+ mReservedUniforms.push_back("vignette");
// Import Vignette from Exodus
mReservedUniforms.push_back("screenTex");
diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h
index 45c0a57a7f..ca62c84f36 100644
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -217,8 +217,7 @@ public:
AVATAR_TRANSLATION, // "translationPalette"
// Import Vignette from Exodus
- EXO_RENDER_VIGNETTE, // "exo_vignette"
- EXO_RENDER_SCREEN, // "exo_screen"
+ RENDER_VIGNETTE, // "vignette"
// Import Vignette from Exodus
WATER_SCREENTEX, // "screenTex"
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 9c65de63af..fca2261ac7 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -97,7 +97,7 @@ set(viewer_SOURCE_FILES
exoflickr.cpp
exoflickrauth.cpp
exogroupmutelist.cpp
- exopostprocess.cpp
+ # exopostprocess.cpp
floatermedialists.cpp
fsareasearch.cpp
fsareasearchmenu.cpp
@@ -885,7 +885,7 @@ set(viewer_HEADER_FILES
exoflickr.h
exoflickrauth.h
exogroupmutelist.h
- exopostprocess.h
+ # exopostprocess.h
floatermedialists.h
fsareasearch.h
fsareasearchmenu.h
diff --git a/indra/newview/app_settings/shaders/class1/post/exoVignetteF.glsl b/indra/newview/app_settings/shaders/class1/post/exoVignetteF.glsl
index 9ec255e158..cdd17d1dd9 100644
--- a/indra/newview/app_settings/shaders/class1/post/exoVignetteF.glsl
+++ b/indra/newview/app_settings/shaders/class1/post/exoVignetteF.glsl
@@ -9,17 +9,18 @@
out vec4 frag_color;
-uniform sampler2D exo_screen;
+uniform sampler2D diffuseRect;
uniform vec2 screen_res;
-uniform vec3 exo_vignette;
+uniform vec3 vignette;
in vec2 vary_fragcoord;
void main ()
{
- vec4 diff = texture(exo_screen, vary_fragcoord.xy);
- vec2 tc = vary_fragcoord / screen_res - 0.5f;
- float vignette = 1 - dot(tc, tc);
- diff.rgb *= clamp(pow(mix(1, vignette * vignette * vignette * vignette * exo_vignette.z, exo_vignette.x), exo_vignette.y), 0, 1);
- frag_color = diff;
+ // vec4 diff = texture(screen, vary_fragcoord.xy);
+ // vec2 tc = vary_fragcoord / screen_res - 0.5f;
+ // float vignette_val = 1 - dot(tc, tc);
+ // diff.rgb *= clamp(pow(mix(1, vignette_val * vignette_val * vignette_val * vignette_val * vignette.z, vignette.x), vignette.y), 0, 1);
+ // frag_color = diff;
+ frag_color = vec4(0.0, 1.0, 0.0, 0.5);
}
\ No newline at end of file
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index ce1ce5849a..f28ce3bf58 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -888,7 +888,7 @@ BOOL LLViewerShaderMgr::loadShadersEffects()
// Import Vignette from Exodus
if (success)
{
- gPostVignetteProgram.mName = "Exodus Vignette Post";
+ gPostVignetteProgram.mName = "Vignette Post";
gPostVignetteProgram.mShaderFiles.clear();
gPostVignetteProgram.mShaderFiles.push_back(make_pair("post/exoPostBaseV.glsl", GL_VERTEX_SHADER));
gPostVignetteProgram.mShaderFiles.push_back(make_pair("post/exoVignetteF.glsl", GL_FRAGMENT_SHADER));
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 23b6e734be..8d14beb4bb 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -242,7 +242,6 @@
#endif
#include "utilitybar.h" // Support for the classic V1 style buttons in some skins
-#include "exopostprocess.h" // Exodus Vignette
#include "llnetmap.h"
#include "lggcontactsets.h"
#include "fspanellogin.h"
@@ -2070,7 +2069,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)
LL_INFOS("RenderInit") << "LLVertexBuffer initialization done." << LL_ENDL ;
gGL.init(true);
// Exodus vignette
- exoPostProcess::getInstance(); // Make sure we've created one of these
if (LLFeatureManager::getInstance()->isSafe()
|| (gSavedSettings.getS32("LastFeatureVersion") != LLFeatureManager::getInstance()->getVersion())
@@ -2688,11 +2686,6 @@ void LLViewerWindow::shutdownGL()
gGL.shutdown();
- // Exodus vignette
- // This must die before LLVertexBuffer does
- exoPostProcess::deleteSingleton();
- // Exodus vignette
-
SUBSYSTEM_CLEANUP(LLVertexBuffer);
LL_INFOS() << "LLVertexBuffer cleaned." << LL_ENDL ;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 75ab7ab2f2..3991500cb1 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -117,7 +117,6 @@
#include "rlvactions.h"
#include "rlvlocks.h"
// [/RLVa:KB]
-#include "exopostprocess.h" // Import Vignette from Exodus
#include "llenvironment.h"
@@ -204,6 +203,7 @@ F32 LLPipeline::RenderShadowFOVCutoff;
bool LLPipeline::CameraOffset;
F32 LLPipeline::CameraMaxCoF;
F32 LLPipeline::CameraDoFResScale;
+LLVector3 LLPipeline::RenderVignette;
F32 LLPipeline::RenderAutoHideSurfaceAreaLimit;
bool LLPipeline::RenderScreenSpaceReflections;
S32 LLPipeline::RenderScreenSpaceReflectionIterations;
@@ -1132,7 +1132,7 @@ void LLPipeline::refreshCachedSettings()
CameraOffset = gSavedSettings.getBOOL("CameraOffset");
CameraMaxCoF = gSavedSettings.getF32("CameraMaxCoF");
CameraDoFResScale = gSavedSettings.getF32("CameraDoFResScale");
- exoPostProcess::instance().ExodusRenderPostSettingsUpdate(); // Import Vignette from Exodus
+ RenderVignette = gSavedSettings.getVector3("FSRenderVignette"); // redo the vignette
RenderAutoHideSurfaceAreaLimit = gSavedSettings.getF32("RenderAutoHideSurfaceAreaLimit");
RenderScreenSpaceReflections = gSavedSettings.getBOOL("RenderScreenSpaceReflections");
@@ -1146,8 +1146,6 @@ void LLPipeline::refreshCachedSettings()
sReflectionProbesEnabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionsEnabled") && gSavedSettings.getBOOL("RenderReflectionsEnabled");
RenderSpotLight = nullptr;
- exoPostProcess::instance().ExodusRenderPostUpdate(); // Import Vignette from Exodus
-
if (gNonInteractive)
{
LLVOAvatar::sMaxNonImpostors = 1;
@@ -1253,7 +1251,6 @@ void LLPipeline::createGLBuffers()
stop_glerror();
assertInitialized();
- exoPostProcess::instance().ExodusRenderPostUpdate(); // Import Vignette from Exodus
// Use FBO for bake tex
// Allow higher resolution rendering in mesh render preview
//mBake.allocate(512, 512, GL_RGBA, true); // SL-12781 Build > Upload > Model; 3D Preview
@@ -7233,6 +7230,51 @@ void LLPipeline::combineGlow(LLRenderTarget* src, LLRenderTarget* dst)
dst->flush();
}
+// updated Vignette code (based on original Exo Vignette)
+void LLPipeline::renderVignette(LLRenderTarget* src, LLRenderTarget* dst)
+{
+ if (RenderVignette.mV[0] > 0.f)
+ {
+ LL_PROFILE_GPU_ZONE("Vignette");
+ dst->bindTarget();
+ LLGLSLShader *shader = &gPostVignetteProgram;
+
+ // bind the progam and output to screentriangle VBO
+ shader->bind();
+
+ S32 channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
+ if (channel > -1)
+ {
+ src->bindTexture(0, channel, LLTexUnit::TFO_POINT);
+ }
+ else
+ {
+ LL_ERRS("vignette") << "Failed to bind diffuse texture" << LL_ENDL;
+ }
+
+ shader->uniform2f(
+ LLShaderMgr::DEFERRED_SCREEN_RES,
+ dst->getWidth(),
+ dst->getHeight() );
+ shader->uniform3fv(
+ LLShaderMgr::RENDER_VIGNETTE,
+ 1,
+ RenderVignette.mV);
+
+ mScreenTriangleVB->setBuffer();
+ mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3);
+ stop_glerror();
+
+ shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
+ shader->unbind();
+ dst->flush();
+ }
+ else
+ {
+ copyRenderTarget(src, dst);
+ }
+}
+//
void LLPipeline::renderDoF(LLRenderTarget* src, LLRenderTarget* dst)
{
{
@@ -7472,7 +7514,7 @@ void LLPipeline::renderFinalize()
gGL.setColorMask(true, true);
glClearColor(0, 0, 0, 0);
-
+
copyScreenSpaceReflections(&mRT->screen, &mSceneMap);
generateLuminance(&mRT->screen, &mLuminanceMap);
@@ -7494,8 +7536,12 @@ void LLPipeline::renderFinalize()
glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
renderDoF(&mRT->screen, &mPostMap);
-
applyFXAA(&mPostMap, &mRT->screen);
+ // Restore shader post proc for Vignette
+ // LLRenderTarget* finalBuffer = &mRT->screen;
+ renderVignette(&mRT->screen, &mPostMap); // Restore shader post proc.
+ copyRenderTarget(&mPostMap, &mRT->screen);
+ //
LLRenderTarget* finalBuffer = &mRT->screen;
if (RenderBufferVisualization > -1)
{
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index d8d701edf0..8194c9b72f 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -328,6 +328,7 @@ public:
void renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera& camera, LLCullResult& result, bool depth_clamp);
void renderHighlights();
+ void renderVignette(LLRenderTarget* src, LLRenderTarget* dst);
void renderDebug();
void renderPhysicsDisplay();
@@ -1053,6 +1054,7 @@ public:
static bool CameraOffset;
static F32 CameraMaxCoF;
static F32 CameraDoFResScale;
+ static LLVector3 RenderVignette; // refresh of vignette support
static F32 RenderAutoHideSurfaceAreaLimit;
static bool RenderScreenSpaceReflections;
static S32 RenderScreenSpaceReflectionIterations;