Added vision spheres using a post-processing shader (PoC)
--HG-- branch : RLVameow-7.2.2
parent
d56b519bed
commit
fd38970f23
|
|
@ -1254,6 +1254,9 @@ void LLShaderMgr::initAttribsAndUniforms()
|
|||
mReservedUniforms.push_back("sunAngle2");
|
||||
|
||||
mReservedUniforms.push_back("camPosLocal");
|
||||
// [RLVa:KB] - @setsphere
|
||||
mReservedUniforms.push_back("avPosLocal");
|
||||
// [/RLV:KB]
|
||||
|
||||
mReservedUniforms.push_back("gWindDir");
|
||||
mReservedUniforms.push_back("gSinWaveParams");
|
||||
|
|
|
|||
|
|
@ -203,6 +203,9 @@ public:
|
|||
WATER_SUN_ANGLE2,
|
||||
|
||||
WL_CAMPOSLOCAL,
|
||||
// [RLVa:KB] - @setsphere
|
||||
RLV_AVPOSLOCAL,
|
||||
// [/RLVa:KB]
|
||||
|
||||
AVATAR_WIND,
|
||||
AVATAR_SINWAVE,
|
||||
|
|
|
|||
|
|
@ -235,6 +235,9 @@ LLGLSLShader gDeferredFullbrightShinyProgram;
|
|||
LLGLSLShader gDeferredSkinnedFullbrightShinyProgram;
|
||||
LLGLSLShader gDeferredSkinnedFullbrightProgram;
|
||||
LLGLSLShader gNormalMapGenProgram;
|
||||
// [RLVa:KB] - @setsphere
|
||||
LLGLSLShader gDeferredRlvProgram;
|
||||
// [/RLVa:KB]
|
||||
|
||||
// Deferred materials shaders
|
||||
LLGLSLShader gDeferredMaterialProgram[LLMaterial::SHADER_COUNT*2];
|
||||
|
|
@ -340,6 +343,9 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
|
|||
mShaderList.push_back(&gDeferredAvatarAlphaProgram);
|
||||
mShaderList.push_back(&gDeferredWLSkyProgram);
|
||||
mShaderList.push_back(&gDeferredWLCloudProgram);
|
||||
// [RLVa:KB] - @setsphere
|
||||
mShaderList.push_back(&gDeferredRlvProgram);
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
|
||||
LLViewerShaderMgr::~LLViewerShaderMgr()
|
||||
|
|
@ -1166,6 +1172,9 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredFullbrightShinyProgram.unload();
|
||||
gDeferredSkinnedFullbrightShinyProgram.unload();
|
||||
gDeferredSkinnedFullbrightProgram.unload();
|
||||
// [RLVa:KB] - @setsphere
|
||||
gDeferredRlvProgram.unload();
|
||||
// [/RLVa:KB]
|
||||
|
||||
gNormalMapGenProgram.unload();
|
||||
for (U32 i = 0; i < LLMaterial::SHADER_COUNT*2; ++i)
|
||||
|
|
@ -1996,6 +2005,18 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
success = gNormalMapGenProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
// [RLVa:KB] - @setsphere
|
||||
if (success)
|
||||
{
|
||||
gDeferredRlvProgram.mName = "Deferred (RLVa) Post Processing Shader";
|
||||
gDeferredRlvProgram.mShaderFiles.clear();
|
||||
gDeferredRlvProgram.mShaderFiles.push_back(make_pair("deferred/rlvV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gDeferredRlvProgram.mShaderFiles.push_back(make_pair("deferred/rlvF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gDeferredRlvProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
|
||||
success = gDeferredRlvProgram.createShader(NULL, NULL);
|
||||
}
|
||||
// [/RLV:KB]
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -336,6 +336,9 @@ extern LLGLSLShader gDeferredFullbrightShinyProgram;
|
|||
extern LLGLSLShader gDeferredSkinnedFullbrightShinyProgram;
|
||||
extern LLGLSLShader gDeferredSkinnedFullbrightProgram;
|
||||
extern LLGLSLShader gNormalMapGenProgram;
|
||||
// [RLVa:KB] - @setsphere
|
||||
extern LLGLSLShader gDeferredRlvProgram;
|
||||
// [/RLVa:KB]
|
||||
|
||||
// Deferred materials shaders
|
||||
extern LLGLSLShader gDeferredMaterialProgram[LLMaterial::SHADER_COUNT*2];
|
||||
|
|
|
|||
|
|
@ -259,6 +259,9 @@ LLTrace::BlockTimerStatHandle FTM_STATESORT("Sort Draw State");
|
|||
LLTrace::BlockTimerStatHandle FTM_PIPELINE("Pipeline");
|
||||
LLTrace::BlockTimerStatHandle FTM_CLIENT_COPY("Client Copy");
|
||||
LLTrace::BlockTimerStatHandle FTM_RENDER_DEFERRED("Deferred Shading");
|
||||
// [RLVa:KB] - @setsphere
|
||||
LLTrace::BlockTimerStatHandle FTM_POST_DEFERRED_RLV("Post-process (Deferred RLVa)");
|
||||
// [/RLVa:KB]
|
||||
|
||||
|
||||
static LLTrace::BlockTimerStatHandle FTM_STATESORT_DRAWABLE("Sort Drawables");
|
||||
|
|
@ -9045,6 +9048,89 @@ void LLPipeline::renderDeferredLighting()
|
|||
|
||||
mScreen.flush();
|
||||
|
||||
// [RLVa:KB] - @setsphere
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_POST_DEFERRED_RLV);
|
||||
|
||||
LLGLDepthTest depth(GL_FALSE, GL_FALSE);
|
||||
|
||||
mScreen.bindTarget();
|
||||
gDeferredRlvProgram.bind();
|
||||
|
||||
S32 nDiffuseChannel = gDeferredRlvProgram.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mScreen.getUsage());
|
||||
if (nDiffuseChannel > -1)
|
||||
{
|
||||
mScreen.bindTexture(0, nDiffuseChannel);
|
||||
gGL.getTexUnit(nDiffuseChannel)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
|
||||
}
|
||||
|
||||
S32 nDepthChannel = gDeferredRlvProgram.enableTexture(LLShaderMgr::DEFERRED_DEPTH, mDeferredDepth.getUsage());
|
||||
if (nDepthChannel > -1)
|
||||
{
|
||||
gGL.getTexUnit(nDepthChannel)->bind(&mDeferredDepth, TRUE);
|
||||
}
|
||||
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
LLVector4 avPos(gAgentAvatarp->getRenderPosition(), 1.0f);
|
||||
glh::vec4f avPosGl(avPos.mV);
|
||||
|
||||
const glh::matrix4f& mvMatrix = gGL.getModelviewMatrix();
|
||||
mvMatrix.mult_matrix_vec(avPosGl);
|
||||
|
||||
gDeferredRlvProgram.uniform4fv(LLShaderMgr::RLV_AVPOSLOCAL, 1, avPosGl.v);
|
||||
}
|
||||
gDeferredRlvProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, mScreen.getWidth(), mScreen.getHeight());
|
||||
gDeferredRlvProgram.uniformMatrix4fv(LLShaderMgr::INVERSE_PROJECTION_MATRIX, 1, FALSE, glh_get_current_projection().inverse().m);
|
||||
|
||||
gGL.matrixMode(LLRender::MM_PROJECTION);
|
||||
gGL.pushMatrix();
|
||||
gGL.loadIdentity();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
gGL.pushMatrix();
|
||||
gGL.loadMatrix(gGLModelView);
|
||||
|
||||
int nRenderMethod = 0;
|
||||
switch (nRenderMethod)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
LLVector2 tc1(0, 0);
|
||||
LLVector2 tc2((F32)mScreen.getWidth() * 2, (F32)mScreen.getHeight() * 2);
|
||||
|
||||
gGL.begin(LLRender::TRIANGLE_STRIP);
|
||||
gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
|
||||
gGL.vertex2f(-1, -1);
|
||||
|
||||
gGL.texCoord2f(tc1.mV[0], tc2.mV[1]);
|
||||
gGL.vertex2f(-1, 3);
|
||||
|
||||
gGL.texCoord2f(tc2.mV[0], tc1.mV[1]);
|
||||
gGL.vertex2f(3, -1);
|
||||
|
||||
gGL.end();
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
|
||||
mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
|
||||
break;
|
||||
}
|
||||
|
||||
gGL.matrixMode(LLRender::MM_PROJECTION);
|
||||
gGL.popMatrix();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
gGL.popMatrix();
|
||||
|
||||
gDeferredRlvProgram.disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mScreen.getUsage());
|
||||
gDeferredRlvProgram.disableTexture(LLShaderMgr::DEFERRED_DEPTH, mScreen.getUsage());
|
||||
gDeferredRlvProgram.unbind();
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(0)->activate();
|
||||
|
||||
mScreen.flush();
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
|
||||
void LLPipeline::renderDeferredLightingToRT(LLRenderTarget* target)
|
||||
|
|
|
|||
Loading…
Reference in New Issue