diff options
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.h | 1 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 14 | 
3 files changed, 27 insertions, 14 deletions
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 073a1787d5..993e8742e0 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -158,6 +158,7 @@ LLGLSLShader            gDeferredMultiLightProgram[16];  LLGLSLShader            gDeferredSpotLightProgram;  LLGLSLShader            gDeferredMultiSpotLightProgram;  LLGLSLShader            gDeferredSunProgram; +LLGLSLShader            gDeferredSunProbeProgram;  LLGLSLShader            gHazeProgram;  LLGLSLShader            gHazeWaterProgram;  LLGLSLShader            gDeferredBlurLightProgram; @@ -400,6 +401,7 @@ void LLViewerShaderMgr::finalizeShaderList()      mShaderList.push_back(&gObjectAlphaMaskNoColorProgram);      mShaderList.push_back(&gUnderWaterProgram);      mShaderList.push_back(&gDeferredSunProgram); +    mShaderList.push_back(&gDeferredSunProbeProgram);      mShaderList.push_back(&gHazeProgram);      mShaderList.push_back(&gHazeWaterProgram);      mShaderList.push_back(&gDeferredSoftenProgram); @@ -1600,10 +1602,7 @@ bool LLViewerShaderMgr::loadShadersDeferred()      if (success)      {          std::string fragment; -        std::string vertex = "deferred/sunLightV.glsl"; -          bool use_ao = gSavedSettings.getBOOL("RenderDeferredSSAO"); -          if (use_ao)          {              fragment = "deferred/sunLightSSAOF.glsl"; @@ -1611,10 +1610,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()          else          {              fragment = "deferred/sunLightF.glsl"; -            if (mShaderLevel[SHADER_DEFERRED] == 1) -            { //no shadows, no SSAO, no frag coord -                vertex = "deferred/sunLightNoFragCoordV.glsl"; -            }          }          gDeferredSunProgram.mName = "Deferred Sun Shader"; @@ -1623,7 +1618,7 @@ bool LLViewerShaderMgr::loadShadersDeferred()          gDeferredSunProgram.mFeatures.hasAmbientOcclusion = use_ao;          gDeferredSunProgram.mShaderFiles.clear(); -        gDeferredSunProgram.mShaderFiles.push_back(make_pair(vertex, GL_VERTEX_SHADER)); +        gDeferredSunProgram.mShaderFiles.push_back(make_pair("deferred/sunLightV.glsl", GL_VERTEX_SHADER));          gDeferredSunProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER));          gDeferredSunProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED]; @@ -1633,6 +1628,21 @@ bool LLViewerShaderMgr::loadShadersDeferred()      if (success)      { +        gDeferredSunProbeProgram.mName = "Deferred Sun Probe Shader"; +        gDeferredSunProbeProgram.mFeatures.isDeferred = true; +        gDeferredSunProbeProgram.mFeatures.hasShadows = true; + +        gDeferredSunProbeProgram.mShaderFiles.clear(); +        gDeferredSunProbeProgram.mShaderFiles.push_back(make_pair("deferred/sunLightV.glsl", GL_VERTEX_SHADER)); +        gDeferredSunProbeProgram.mShaderFiles.push_back(make_pair("deferred/sunLightF.glsl", GL_FRAGMENT_SHADER)); +        gDeferredSunProbeProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED]; + +        success = gDeferredSunProbeProgram.createShader(); +        llassert(success); +    } + +    if (success) +    {          gDeferredBlurLightProgram.mName = "Deferred Blur Light Shader";          gDeferredBlurLightProgram.mFeatures.isDeferred = true; diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index af47014a43..59b613b7ea 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -230,6 +230,7 @@ extern LLGLSLShader         gDeferredMultiLightProgram[LL_DEFERRED_MULTI_LIGHT_C  extern LLGLSLShader         gDeferredSpotLightProgram;  extern LLGLSLShader         gDeferredMultiSpotLightProgram;  extern LLGLSLShader         gDeferredSunProgram; +extern LLGLSLShader         gDeferredSunProbeProgram;  extern LLGLSLShader         gHazeProgram;  extern LLGLSLShader         gHazeWaterProgram;  extern LLGLSLShader         gDeferredBlurLightProgram; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 5bc880ea44..57cabcd18f 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -7930,13 +7930,15 @@ void LLPipeline::renderDeferredLighting()          mat.mult_matrix_vec(tc_moon);          mTransformedMoonDir.set(tc_moon.v); -        if (RenderDeferredSSAO || RenderShadowDetail > 0) +        if ((RenderDeferredSSAO && !gCubeSnapshot) || RenderShadowDetail > 0)          {              LL_PROFILE_GPU_ZONE("sun program");              deferred_light_target->bindTarget();              {  // paint shadow/SSAO light map (direct lighting lightmap)                  LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("renderDeferredLighting - sun shadow"); -                bindDeferredShader(gDeferredSunProgram, deferred_light_target); + +                LLGLSLShader& sun_shader = gCubeSnapshot ? gDeferredSunProbeProgram : gDeferredSunProgram; +                bindDeferredShader(sun_shader, deferred_light_target);                  mScreenTriangleVB->setBuffer();                  glClearColor(1, 1, 1, 1);                  deferred_light_target->clear(GL_COLOR_BUFFER_BIT); @@ -7961,8 +7963,8 @@ void LLPipeline::renderDeferredLighting()                      }                  } -                gDeferredSunProgram.uniform3fv(sOffset, slice, offset); -                gDeferredSunProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, +                sun_shader.uniform3fv(sOffset, slice, offset); +                sun_shader.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES,                                                (GLfloat)deferred_light_target->getWidth(),                                                (GLfloat)deferred_light_target->getHeight()); @@ -7972,12 +7974,12 @@ void LLPipeline::renderDeferredLighting()                      mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3);                  } -                unbindDeferredShader(gDeferredSunProgram); +                unbindDeferredShader(sun_shader);              }              deferred_light_target->flush();          } -        if (RenderDeferredSSAO) +        if (RenderDeferredSSAO && !gCubeSnapshot)          {              // soften direct lighting lightmap              LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("renderDeferredLighting - soften shadow");  | 
