SH-2242 FXAA support instead of unreliable multisample textures (done here because it's a smaller change than integrating glVertexAttrib with FSAA pipe). Shader integration with LLDynamicTexture subclasses.
parent
364f8771ed
commit
2dd8ce53e4
|
|
@ -582,6 +582,8 @@ bool LLGLManager::initGL()
|
|||
glGetIntegerv(GL_MAX_SAMPLE_MASK_WORDS, &mMaxSampleMaskWords);
|
||||
}
|
||||
|
||||
//HACK always disable texture multisample, use FXAA instead
|
||||
mHasTextureMultisample = FALSE;
|
||||
#if LL_WINDOWS
|
||||
if (mIsATI)
|
||||
{ //using multisample textures on ATI results in black screen for some reason
|
||||
|
|
|
|||
|
|
@ -531,9 +531,9 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
|
|||
}
|
||||
|
||||
//we can't have any lines longer than 1024 characters
|
||||
//or any shaders longer than 1024 lines... deal - DaveP
|
||||
//or any shaders longer than 4096 lines... deal - DaveP
|
||||
GLcharARB buff[1024];
|
||||
GLcharARB* text[1024];
|
||||
GLcharARB* text[4096];
|
||||
GLuint count = 0;
|
||||
|
||||
if (gGLManager.mGLVersion < 2.1f)
|
||||
|
|
@ -649,7 +649,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
|
|||
}
|
||||
|
||||
//copy file into memory
|
||||
while( fgets((char *)buff, 1024, file) != NULL && count < LL_ARRAY_SIZE(buff) )
|
||||
while( fgets((char *)buff, 1024, file) != NULL && count < LL_ARRAY_SIZE(text) )
|
||||
{
|
||||
text[count++] = (GLcharARB *)strdup((char *)buff);
|
||||
}
|
||||
|
|
@ -709,6 +709,13 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
|
|||
for (GLuint i = 0; i < count; i++)
|
||||
{
|
||||
ostr << i << ": " << text[i];
|
||||
|
||||
if (i % 128 == 0)
|
||||
{ //dump every 128 lines
|
||||
LL_WARNS("ShaderLoading") << "\n" << ostr.str() << llendl;
|
||||
ostr = std::stringstream();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
LL_WARNS("ShaderLoading") << "\n" << ostr.str() << llendl;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -8,6 +8,10 @@
|
|||
attribute vec3 position;
|
||||
|
||||
varying vec2 vary_fragcoord;
|
||||
varying vec2 vary_tc;
|
||||
|
||||
uniform vec2 tc_scale;
|
||||
|
||||
uniform vec2 screen_res;
|
||||
|
||||
void main()
|
||||
|
|
@ -15,5 +19,6 @@ void main()
|
|||
//transform vertex
|
||||
vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);
|
||||
gl_Position = pos;
|
||||
vary_tc = (pos.xy*0.5+0.5)*tc_scale;
|
||||
vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
/**
|
||||
* @file glowcombineFXAAF.glsl
|
||||
*
|
||||
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#extension GL_ARB_texture_rectangle : enable
|
||||
|
||||
uniform sampler2D glowMap;
|
||||
uniform sampler2DRect screenMap;
|
||||
|
||||
uniform vec2 screen_res;
|
||||
varying vec2 vary_tc;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 col = texture2D(glowMap, vary_tc).rgb +
|
||||
texture2DRect(screenMap, vary_tc*screen_res).rgb;
|
||||
|
||||
|
||||
gl_FragColor = vec4(col.rgb, dot(col.rgb, vec3(0.299, 0.587, 0.144)));
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/**
|
||||
* @file glowcombineFXAAV.glsl
|
||||
*
|
||||
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
attribute vec3 position;
|
||||
|
||||
varying vec2 vary_tc;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 pos = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0);
|
||||
gl_Position = pos;
|
||||
|
||||
vary_tc = pos.xy*0.5+0.5;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/**
|
||||
* @file previewV.glsl
|
||||
*
|
||||
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
attribute vec3 position;
|
||||
attribute vec3 normal;
|
||||
attribute vec2 texcoord0;
|
||||
|
||||
vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
|
||||
void calcAtmospherics(vec3 inPositionEye);
|
||||
|
||||
void main()
|
||||
{
|
||||
//transform vertex
|
||||
vec4 pos = (gl_ModelViewMatrix * vec4(position.xyz, 1.0));
|
||||
gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);
|
||||
gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);
|
||||
|
||||
vec3 norm = normalize(gl_NormalMatrix * normal);
|
||||
|
||||
calcAtmospherics(pos.xyz);
|
||||
|
||||
vec4 color = calcLighting(pos.xyz, norm, vec4(1,1,1,1), vec4(0.));
|
||||
gl_FrontColor = color;
|
||||
|
||||
gl_FogFragCoord = pos.z;
|
||||
}
|
||||
|
|
@ -1072,6 +1072,11 @@ BOOL LLPreviewAnimation::render()
|
|||
gGL.pushMatrix();
|
||||
glLoadIdentity();
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gUIProgram.bind();
|
||||
}
|
||||
|
||||
LLGLSUIDefault def;
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.color4f(0.15f, 0.2f, 0.3f, 1.f);
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@
|
|||
#include "llvoavatar.h"
|
||||
#include "pipeline.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llviewershadermgr.h"
|
||||
#include "llviewertexturelist.h"
|
||||
#include "llstring.h"
|
||||
|
||||
|
|
@ -662,6 +663,11 @@ BOOL LLImagePreviewAvatar::render()
|
|||
LLGLSUIDefault def;
|
||||
gGL.color4f(0.15f, 0.2f, 0.3f, 1.f);
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gUIProgram.bind();
|
||||
}
|
||||
|
||||
gl_rect_2d_simple( mFullWidth, mFullHeight );
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
|
|
@ -690,8 +696,7 @@ BOOL LLImagePreviewAvatar::render()
|
|||
|
||||
LLVertexBuffer::unbind();
|
||||
avatarp->updateLOD();
|
||||
|
||||
|
||||
|
||||
if (avatarp->mDrawable.notNull())
|
||||
{
|
||||
LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE);
|
||||
|
|
@ -790,15 +795,17 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance)
|
|||
U32 num_indices = vf.mNumIndices;
|
||||
U32 num_vertices = vf.mNumVertices;
|
||||
|
||||
mVertexBuffer = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL, 0);
|
||||
mVertexBuffer = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0, 0);
|
||||
mVertexBuffer->allocateBuffer(num_vertices, num_indices, TRUE);
|
||||
|
||||
LLStrider<LLVector3> vertex_strider;
|
||||
LLStrider<LLVector3> normal_strider;
|
||||
LLStrider<LLVector2> tc_strider;
|
||||
LLStrider<U16> index_strider;
|
||||
|
||||
mVertexBuffer->getVertexStrider(vertex_strider);
|
||||
mVertexBuffer->getNormalStrider(normal_strider);
|
||||
mVertexBuffer->getTexCoord0Strider(tc_strider);
|
||||
mVertexBuffer->getIndexStrider(index_strider);
|
||||
|
||||
// build vertices and normals
|
||||
|
|
@ -806,7 +813,8 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance)
|
|||
pos = (LLVector3*) vf.mPositions; pos.setStride(16);
|
||||
LLStrider<LLVector3> norm;
|
||||
norm = (LLVector3*) vf.mNormals; norm.setStride(16);
|
||||
|
||||
LLStrider<LLVector2> tc;
|
||||
tc = (LLVector2*) vf.mTexCoords; tc.setStride(8);
|
||||
|
||||
for (U32 i = 0; i < num_vertices; i++)
|
||||
{
|
||||
|
|
@ -814,6 +822,7 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance)
|
|||
LLVector3 normal = *norm++;
|
||||
normal.normalize();
|
||||
*(normal_strider++) = normal;
|
||||
*(tc_strider++) = *tc++;
|
||||
}
|
||||
|
||||
// build indices
|
||||
|
|
@ -846,8 +855,13 @@ BOOL LLImagePreviewSculpted::render()
|
|||
|
||||
gGL.color4f(0.15f, 0.2f, 0.3f, 1.f);
|
||||
|
||||
gl_rect_2d_simple( mFullWidth, mFullHeight );
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gUIProgram.bind();
|
||||
}
|
||||
|
||||
gl_rect_2d_simple( mFullWidth, mFullHeight );
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
gGL.popMatrix();
|
||||
|
||||
|
|
@ -876,17 +890,28 @@ BOOL LLImagePreviewSculpted::render()
|
|||
const LLVolumeFace &vf = mVolume->getVolumeFace(0);
|
||||
U32 num_indices = vf.mNumIndices;
|
||||
|
||||
mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL);
|
||||
|
||||
gPipeline.enableLightsAvatar();
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gObjectPreviewProgram.bind();
|
||||
}
|
||||
gGL.pushMatrix();
|
||||
const F32 SCALE = 1.25f;
|
||||
gGL.scalef(SCALE, SCALE, SCALE);
|
||||
const F32 BRIGHTNESS = 0.9f;
|
||||
gGL.color3f(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
|
||||
|
||||
mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
|
||||
mVertexBuffer->draw(LLRender::TRIANGLES, num_indices, 0);
|
||||
|
||||
gGL.popMatrix();
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gObjectPreviewProgram.unbind();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2436,8 +2436,7 @@ void pushVerts(LLVolume* volume)
|
|||
for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i)
|
||||
{
|
||||
const LLVolumeFace& face = volume->getVolumeFace(i);
|
||||
glVertexPointer(3, GL_FLOAT, 16, face.mPositions);
|
||||
glDrawElements(GL_TRIANGLES, face.mNumIndices, GL_UNSIGNED_SHORT, face.mIndices);
|
||||
LLVertexBuffer::drawElements(LLRender::TRIANGLES, face.mPositions, NULL, face.mNumIndices, face.mIndices);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3178,13 +3177,13 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)
|
|||
LLVertexBuffer::unbind();
|
||||
|
||||
llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0);
|
||||
|
||||
glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints);
|
||||
glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices);
|
||||
|
||||
LLVertexBuffer::drawElements(LLRender::TRIANGLES, phys_volume->mHullPoints, NULL, phys_volume->mNumHullIndices, phys_volume->mHullIndices);
|
||||
|
||||
gGL.diffuseColor4fv(color.mV);
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices);
|
||||
LLVertexBuffer::drawElements(LLRender::TRIANGLES, phys_volume->mHullPoints, NULL, phys_volume->mNumHullIndices, phys_volume->mHullIndices);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -4115,6 +4114,11 @@ void LLSpatialPartition::renderDebug()
|
|||
return;
|
||||
}
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gUIProgram.bind();
|
||||
}
|
||||
|
||||
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY))
|
||||
{
|
||||
//sLastMaxTexPriority = lerp(sLastMaxTexPriority, sCurMaxTexPriority, gFrameIntervalSeconds);
|
||||
|
|
@ -4143,6 +4147,11 @@ void LLSpatialPartition::renderDebug()
|
|||
|
||||
LLOctreeRenderNonOccluded render_debug(camera);
|
||||
render_debug.traverse(mOctree);
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gUIProgram.unbind();
|
||||
}
|
||||
}
|
||||
|
||||
void LLSpatialGroup::drawObjectBox(LLColor4 col)
|
||||
|
|
|
|||
|
|
@ -178,6 +178,11 @@ BOOL LLVisualParamHint::render()
|
|||
gGL.pushMatrix();
|
||||
glLoadIdentity();
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gUIProgram.bind();
|
||||
}
|
||||
|
||||
LLGLSUIDefault gls_ui;
|
||||
//LLGLState::verify(TRUE);
|
||||
mBackgroundp->draw(0, 0, mFullWidth, mFullHeight);
|
||||
|
|
|
|||
|
|
@ -65,11 +65,13 @@ LLVector4 gShinyOrigin;
|
|||
LLGLSLShader gOcclusionProgram;
|
||||
LLGLSLShader gCustomAlphaProgram;
|
||||
LLGLSLShader gGlowCombineProgram;
|
||||
LLGLSLShader gGlowCombineFXAAProgram;
|
||||
LLGLSLShader gTwoTextureAddProgram;
|
||||
LLGLSLShader gOneTextureNoColorProgram;
|
||||
|
||||
//object shaders
|
||||
LLGLSLShader gObjectSimpleProgram;
|
||||
LLGLSLShader gObjectPreviewProgram;
|
||||
LLGLSLShader gObjectSimpleWaterProgram;
|
||||
LLGLSLShader gObjectSimpleAlphaMaskProgram;
|
||||
LLGLSLShader gObjectSimpleWaterAlphaMaskProgram;
|
||||
|
|
@ -200,6 +202,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
|
|||
mShaderList.push_back(&gWaterProgram);
|
||||
mShaderList.push_back(&gAvatarEyeballProgram);
|
||||
mShaderList.push_back(&gObjectSimpleProgram);
|
||||
mShaderList.push_back(&gObjectPreviewProgram);
|
||||
mShaderList.push_back(&gImpostorProgram);
|
||||
mShaderList.push_back(&gObjectFullbrightNoColorProgram);
|
||||
mShaderList.push_back(&gObjectFullbrightNoColorWaterProgram);
|
||||
|
|
@ -208,6 +211,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
|
|||
mShaderList.push_back(&gUIProgram);
|
||||
mShaderList.push_back(&gCustomAlphaProgram);
|
||||
mShaderList.push_back(&gGlowCombineProgram);
|
||||
mShaderList.push_back(&gGlowCombineFXAAProgram);
|
||||
mShaderList.push_back(&gTwoTextureAddProgram);
|
||||
mShaderList.push_back(&gOneTextureNoColorProgram);
|
||||
mShaderList.push_back(&gSolidColorProgram);
|
||||
|
|
@ -669,6 +673,7 @@ void LLViewerShaderMgr::unloadShaders()
|
|||
gUIProgram.unload();
|
||||
gCustomAlphaProgram.unload();
|
||||
gGlowCombineProgram.unload();
|
||||
gGlowCombineFXAAProgram.unload();
|
||||
gTwoTextureAddProgram.unload();
|
||||
gOneTextureNoColorProgram.unload();
|
||||
gSolidColorProgram.unload();
|
||||
|
|
@ -676,6 +681,7 @@ void LLViewerShaderMgr::unloadShaders()
|
|||
gObjectFullbrightNoColorProgram.unload();
|
||||
gObjectFullbrightNoColorWaterProgram.unload();
|
||||
gObjectSimpleProgram.unload();
|
||||
gObjectPreviewProgram.unload();
|
||||
gImpostorProgram.unload();
|
||||
gObjectSimpleAlphaMaskProgram.unload();
|
||||
gObjectBumpProgram.unload();
|
||||
|
|
@ -1767,6 +1773,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
|
|||
gObjectFullbrightNoColorProgram.unload();
|
||||
gObjectFullbrightNoColorWaterProgram.unload();
|
||||
gObjectSimpleProgram.unload();
|
||||
gObjectPreviewProgram.unload();
|
||||
gImpostorProgram.unload();
|
||||
gObjectSimpleAlphaMaskProgram.unload();
|
||||
gObjectBumpProgram.unload();
|
||||
|
|
@ -2117,6 +2124,23 @@ BOOL LLViewerShaderMgr::loadShadersObject()
|
|||
success = gImpostorProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gObjectPreviewProgram.mName = "Simple Shader";
|
||||
gObjectPreviewProgram.mFeatures.calculatesLighting = true;
|
||||
gObjectPreviewProgram.mFeatures.calculatesAtmospherics = true;
|
||||
gObjectPreviewProgram.mFeatures.hasGamma = true;
|
||||
gObjectPreviewProgram.mFeatures.hasAtmospherics = true;
|
||||
gObjectPreviewProgram.mFeatures.hasLighting = true;
|
||||
gObjectPreviewProgram.mFeatures.mIndexedTextureChannels = 0;
|
||||
gObjectPreviewProgram.mFeatures.disableTextureIndex = true;
|
||||
gObjectPreviewProgram.mShaderFiles.clear();
|
||||
gObjectPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gObjectPreviewProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gObjectPreviewProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
|
||||
success = gObjectPreviewProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gObjectSimpleProgram.mName = "Simple Shader";
|
||||
|
|
@ -2706,6 +2730,24 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
|
|||
}
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gGlowCombineFXAAProgram.mName = "Glow CombineFXAA Shader";
|
||||
gGlowCombineFXAAProgram.mShaderFiles.clear();
|
||||
gGlowCombineFXAAProgram.mShaderFiles.push_back(make_pair("interface/glowcombineFXAAV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gGlowCombineFXAAProgram.mShaderFiles.push_back(make_pair("interface/glowcombineFXAAF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gGlowCombineFXAAProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
|
||||
success = gGlowCombineFXAAProgram.createShader(NULL, NULL);
|
||||
if (success)
|
||||
{
|
||||
gGlowCombineFXAAProgram.bind();
|
||||
gGlowCombineFXAAProgram.uniform1i("glowMap", 0);
|
||||
gGlowCombineFXAAProgram.uniform1i("screenMap", 1);
|
||||
gGlowCombineFXAAProgram.unbind();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (success)
|
||||
{
|
||||
gTwoTextureAddProgram.mName = "Two Texture Add Shader";
|
||||
|
|
|
|||
|
|
@ -273,6 +273,7 @@ extern LLVector4 gShinyOrigin;
|
|||
extern LLGLSLShader gOcclusionProgram;
|
||||
extern LLGLSLShader gCustomAlphaProgram;
|
||||
extern LLGLSLShader gGlowCombineProgram;
|
||||
extern LLGLSLShader gGlowCombineFXAAProgram;
|
||||
|
||||
//output tex0[tc0] + tex1[tc1]
|
||||
extern LLGLSLShader gTwoTextureAddProgram;
|
||||
|
|
@ -281,6 +282,7 @@ extern LLGLSLShader gOneTextureNoColorProgram;
|
|||
|
||||
//object shaders
|
||||
extern LLGLSLShader gObjectSimpleProgram;
|
||||
extern LLGLSLShader gObjectPreviewProgram;
|
||||
extern LLGLSLShader gObjectSimpleAlphaMaskProgram;
|
||||
extern LLGLSLShader gObjectSimpleWaterProgram;
|
||||
extern LLGLSLShader gObjectSimpleWaterAlphaMaskProgram;
|
||||
|
|
|
|||
|
|
@ -673,6 +673,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
|
|||
if (!addDeferredAttachments(mDeferredScreen)) return false;
|
||||
|
||||
if (!mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
|
||||
if (!mFXAABuffer.allocate(nhpo2(resX), nhpo2(resY), GL_RGBA, FALSE, FALSE, LLTexUnit::TT_TEXTURE, FALSE, samples)) return false;
|
||||
|
||||
#if LL_DARWIN
|
||||
// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO
|
||||
|
|
@ -782,6 +783,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
|
|||
{
|
||||
mShadow[i].release();
|
||||
}
|
||||
mFXAABuffer.release();
|
||||
mScreen.release();
|
||||
mDeferredScreen.release(); //make sure to release any render targets that share a depth buffer with mDeferredScreen first
|
||||
mDeferredDepth.release();
|
||||
|
|
@ -867,6 +869,7 @@ void LLPipeline::releaseScreenBuffers()
|
|||
{
|
||||
mUIScreen.release();
|
||||
mScreen.release();
|
||||
mFXAABuffer.release();
|
||||
mPhysicsDisplay.release();
|
||||
mDeferredScreen.release();
|
||||
mDeferredDepth.release();
|
||||
|
|
@ -4231,6 +4234,11 @@ void LLPipeline::renderDebug()
|
|||
}
|
||||
}
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gUIProgram.bind();
|
||||
}
|
||||
|
||||
if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA))
|
||||
{
|
||||
LLVertexBuffer::unbind();
|
||||
|
|
@ -4455,6 +4463,10 @@ void LLPipeline::renderDebug()
|
|||
}
|
||||
|
||||
gGL.flush();
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
gUIProgram.unbind();
|
||||
}
|
||||
|
||||
gPipeline.renderPhysicsDisplay();
|
||||
}
|
||||
|
|
@ -6300,7 +6312,31 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
|
|||
if (LLPipeline::sRenderDeferred)
|
||||
{
|
||||
bool dof_enabled = !LLViewerCamera::getInstance()->cameraUnderWater();
|
||||
{
|
||||
//bake out texture2D with RGBL for FXAA shader
|
||||
mFXAABuffer.bindTarget();
|
||||
|
||||
S32 width = mScreen.getWidth();
|
||||
S32 height = mScreen.getHeight();
|
||||
glViewport(0, 0, width, height);
|
||||
|
||||
gGlowCombineFXAAProgram.bind();
|
||||
gGlowCombineFXAAProgram.uniform2f("screen_res", width, height);
|
||||
|
||||
gGL.getTexUnit(0)->bind(&mGlow[1]);
|
||||
gGL.getTexUnit(1)->bind(&mScreen);
|
||||
|
||||
gGL.begin(LLRender::TRIANGLE_STRIP);
|
||||
gGL.vertex2f(-1,-1);
|
||||
gGL.vertex2f(-1,3);
|
||||
gGL.vertex2f(3,-1);
|
||||
gGL.end();
|
||||
|
||||
gGlowCombineFXAAProgram.unbind();
|
||||
mFXAABuffer.flush();
|
||||
gViewerWindow->setup3DViewport();
|
||||
}
|
||||
|
||||
LLGLSLShader* shader = &gDeferredPostProgram;
|
||||
if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 2)
|
||||
{
|
||||
|
|
@ -6317,6 +6353,16 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
|
|||
LLGLDisable blend(GL_BLEND);
|
||||
bindDeferredShader(*shader);
|
||||
|
||||
S32 width = mScreen.getWidth();
|
||||
S32 height = mScreen.getHeight();
|
||||
|
||||
F32 scale_x = (F32) width/mFXAABuffer.getWidth();
|
||||
F32 scale_y = (F32) height/mFXAABuffer.getHeight();
|
||||
shader->uniform2f("tc_scale", scale_x, scale_y);
|
||||
shader->uniform2f("rcp_screen_res", 1.f/width*scale_x, 1.f/height*scale_y);
|
||||
shader->uniform4f("rcp_frame_opt", -0.5f/width*scale_x, -0.5f/height*scale_y, 0.5f/width*scale_x, 0.5f/height*scale_y);
|
||||
shader->uniform4f("rcp_frame_opt2", -2.f/width*scale_x, -2.f/height*scale_y, 2.f/width*scale_x, 2.f/height*scale_y);
|
||||
|
||||
if (dof_enabled)
|
||||
{
|
||||
//depth of field focal plane calculations
|
||||
|
|
@ -6429,17 +6475,13 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
|
|||
shader->uniform1f("magnification", magnification);
|
||||
}
|
||||
|
||||
S32 channel = shader->enableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, mScreen.getUsage());
|
||||
S32 channel = shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP, mFXAABuffer.getUsage());
|
||||
if (channel > -1)
|
||||
{
|
||||
mScreen.bindTexture(0, channel);
|
||||
mFXAABuffer.bindTexture(0, channel);
|
||||
gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
|
||||
}
|
||||
//channel = shader->enableTexture(LLViewerShaderMgr::DEFERRED_DEPTH, LLTexUnit::TT_RECT_TEXTURE);
|
||||
//if (channel > -1)
|
||||
//{
|
||||
//gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
|
||||
//}
|
||||
|
||||
|
||||
gGL.begin(LLRender::TRIANGLE_STRIP);
|
||||
gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
|
||||
gGL.vertex2f(-1,-1);
|
||||
|
|
|
|||
|
|
@ -527,6 +527,7 @@ public:
|
|||
LLRenderTarget mScreen;
|
||||
LLRenderTarget mUIScreen;
|
||||
LLRenderTarget mDeferredScreen;
|
||||
LLRenderTarget mFXAABuffer;
|
||||
LLRenderTarget mEdgeMap;
|
||||
LLRenderTarget mDeferredDepth;
|
||||
LLRenderTarget mDeferredLight[3];
|
||||
|
|
|
|||
|
|
@ -137,34 +137,36 @@ Thank you to the following Residents for helping to ensure that this is the best
|
|||
top="5"
|
||||
width="435"
|
||||
word_wrap="true">
|
||||
3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
|
||||
APR Copyright (C) 2000-2004 The Apache Software Foundation
|
||||
Collada DOM Copyright 2005 Sony Computer Entertainment Inc.
|
||||
cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
|
||||
DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.
|
||||
expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
|
||||
FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
|
||||
GL Copyright (C) 1999-2004 Brian Paul.
|
||||
GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University and David Luebke, Brenden Schubert, University of Virginia.
|
||||
google-perftools Copyright (c) 2005, Google Inc.
|
||||
Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
|
||||
jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
|
||||
jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
|
||||
ogg/vorbis Copyright (C) 2001, Xiphophorus
|
||||
OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
|
||||
PCRE Copyright (c) 1997-2008 University of Cambridge
|
||||
SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
|
||||
SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
|
||||
zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
|
||||
google-perftools Copyright (c) 2005, Google Inc.
|
||||
3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
|
||||
APR Copyright (C) 2000-2004 The Apache Software Foundation
|
||||
Collada DOM Copyright 2005 Sony Computer Entertainment Inc.
|
||||
cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
|
||||
DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.
|
||||
expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
|
||||
FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
|
||||
GL Copyright (C) 1999-2004 Brian Paul.
|
||||
GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University and David Luebke, Brenden Schubert, University of Virginia.
|
||||
google-perftools Copyright (c) 2005, Google Inc.
|
||||
Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
|
||||
jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
|
||||
jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
|
||||
ogg/vorbis Copyright (C) 2001, Xiphophorus
|
||||
OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
|
||||
PCRE Copyright (c) 1997-2008 University of Cambridge
|
||||
SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
|
||||
SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
|
||||
zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
|
||||
google-perftools Copyright (c) 2005, Google Inc.
|
||||
|
||||
Second Life Viewer uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details.
|
||||
Second Life Viewer uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details.
|
||||
|
||||
All rights reserved. See licenses.txt for details.
|
||||
This software contains source code provided by NVIDIA Corporation.
|
||||
|
||||
Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
|
||||
</text_editor>
|
||||
All rights reserved. See licenses.txt for details.
|
||||
|
||||
Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
|
||||
</text_editor>
|
||||
</panel>
|
||||
</tab_container>
|
||||
</floater>
|
||||
|
|
|
|||
Loading…
Reference in New Issue