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;