Work in progress for shader updates (not working)

master
Beq 2023-10-27 10:45:12 +01:00
parent d820dc2e6c
commit 95abeff523
8 changed files with 68 additions and 28 deletions

View File

@ -1402,8 +1402,7 @@ void LLShaderMgr::initAttribsAndUniforms()
mReservedUniforms.push_back("translationPalette");
// <FS:CR> Import Vignette from Exodus
mReservedUniforms.push_back("exo_vignette");
mReservedUniforms.push_back("exo_screen");
mReservedUniforms.push_back("vignette");
// </FS:CR> Import Vignette from Exodus
mReservedUniforms.push_back("screenTex");

View File

@ -217,8 +217,7 @@ public:
AVATAR_TRANSLATION, // "translationPalette"
// <FS:CR> Import Vignette from Exodus
EXO_RENDER_VIGNETTE, // "exo_vignette"
EXO_RENDER_SCREEN, // "exo_screen"
RENDER_VIGNETTE, // "vignette"
// </FS:CR> Import Vignette from Exodus
WATER_SCREENTEX, // "screenTex"

View File

@ -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

View File

@ -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);
}

View File

@ -888,7 +888,7 @@ BOOL LLViewerShaderMgr::loadShadersEffects()
// <FS:CR> 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));

View File

@ -242,7 +242,6 @@
#endif
#include "utilitybar.h" // <FS:Zi> Support for the classic V1 style buttons in some skins
#include "exopostprocess.h" // <FS:Ansariel> 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);
// <FS:Ansariel> 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();
// <FS:Ansariel> Exodus vignette
// This must die before LLVertexBuffer does
exoPostProcess::deleteSingleton();
// </FS:Ansariel> Exodus vignette
SUBSYSTEM_CLEANUP(LLVertexBuffer);
LL_INFOS() << "LLVertexBuffer cleaned." << LL_ENDL ;

View File

@ -117,7 +117,6 @@
#include "rlvactions.h"
#include "rlvlocks.h"
// [/RLVa:KB]
#include "exopostprocess.h" // <FS:CR> 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(); // <FS:CR> Import Vignette from Exodus
RenderVignette = gSavedSettings.getVector3("FSRenderVignette"); // <FS:Beq/> 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(); // <FS:CR> Import Vignette from Exodus
if (gNonInteractive)
{
LLVOAvatar::sMaxNonImpostors = 1;
@ -1253,7 +1251,6 @@ void LLPipeline::createGLBuffers()
stop_glerror();
assertInitialized();
exoPostProcess::instance().ExodusRenderPostUpdate(); // <FS:CR> Import Vignette from Exodus
// Use FBO for bake tex
// <FS:Ansariel> 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();
}
// <FS:Beq> 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);
}
}
// </FS:Beq>
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);
// <FS:Beq> Restore shader post proc for Vignette
// LLRenderTarget* finalBuffer = &mRT->screen;
renderVignette(&mRT->screen, &mPostMap); // <FS:Beq/> Restore shader post proc.
copyRenderTarget(&mPostMap, &mRT->screen);
// </FS:Beq>
LLRenderTarget* finalBuffer = &mRT->screen;
if (RenderBufferVisualization > -1)
{

View File

@ -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; // <FS:Beq/> refresh of vignette support
static F32 RenderAutoHideSurfaceAreaLimit;
static bool RenderScreenSpaceReflections;
static S32 RenderScreenSpaceReflectionIterations;