merge changes for lastest integrations
commit
9ef6449455
|
|
@ -60,10 +60,14 @@ VARYING vec3 vary_ambient;
|
|||
VARYING vec3 vary_directional;
|
||||
VARYING vec3 vary_fragcoord;
|
||||
VARYING vec3 vary_position;
|
||||
VARYING vec4 vary_pointlight_col;
|
||||
VARYING vec3 vary_pointlight_col;
|
||||
VARYING vec2 vary_texcoord0;
|
||||
VARYING vec3 vary_norm;
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
VARYING vec4 vertex_color;
|
||||
#endif
|
||||
|
||||
uniform vec4 light_position[8];
|
||||
uniform vec3 light_direction[8];
|
||||
uniform vec3 light_attenuation[8];
|
||||
|
|
@ -212,7 +216,7 @@ void main()
|
|||
diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f));
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
float vertex_color_alpha = vary_pointlight_col.a;
|
||||
float vertex_color_alpha = vertex_color.a;
|
||||
#else
|
||||
float vertex_color_alpha = 1.0;
|
||||
#endif
|
||||
|
|
@ -221,7 +225,7 @@ void main()
|
|||
|
||||
vec3 l = light_position[0].xyz;
|
||||
vec3 dlight = calcDirectionalLight(normal, l) * 2.6;
|
||||
dlight = dlight * vary_directional.rgb * vary_pointlight_col.rgb;
|
||||
dlight = dlight * vary_directional.rgb * vary_pointlight_col;
|
||||
|
||||
#if HAS_SHADOW
|
||||
vec4 col = vec4(vary_ambient + dlight * shadow, vertex_color_alpha);
|
||||
|
|
@ -246,7 +250,7 @@ void main()
|
|||
LIGHT_LOOP(6)
|
||||
LIGHT_LOOP(7)
|
||||
|
||||
color.rgb += diff.rgb * vary_pointlight_col.rgb * col.rgb;
|
||||
color.rgb += diff.rgb * vary_pointlight_col * col.rgb;
|
||||
|
||||
frag_color = color;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,8 +69,11 @@ VARYING vec3 vary_ambient;
|
|||
VARYING vec3 vary_directional;
|
||||
VARYING vec3 vary_fragcoord;
|
||||
VARYING vec3 vary_position;
|
||||
VARYING vec4 vary_pointlight_col;
|
||||
VARYING vec3 vary_pointlight_col;
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
VARYING vec4 vertex_color;
|
||||
#endif
|
||||
|
||||
VARYING vec2 vary_texcoord0;
|
||||
|
||||
|
|
@ -83,6 +86,8 @@ uniform vec3 light_direction[8];
|
|||
uniform vec3 light_attenuation[8];
|
||||
uniform vec3 light_diffuse[8];
|
||||
|
||||
uniform vec3 sun_dir;
|
||||
|
||||
vec3 calcDirectionalLight(vec3 n, vec3 l)
|
||||
{
|
||||
float a = max(dot(n,l),0.0);
|
||||
|
|
@ -183,21 +188,30 @@ void main()
|
|||
|
||||
|
||||
|
||||
vary_pointlight_col.rgb = diff;
|
||||
vary_pointlight_col.a = diffuse_color.a;
|
||||
vary_pointlight_col = diff;
|
||||
|
||||
|
||||
col.rgb = vec3(0,0,0);
|
||||
|
||||
// Add windlight lights
|
||||
col.rgb = atmosAmbient(col.rgb);
|
||||
|
||||
float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = (1.0-ambient);
|
||||
|
||||
col.rgb *= ambient;
|
||||
|
||||
vary_ambient = col.rgb*diff.rgb;
|
||||
|
||||
vary_directional.rgb = atmosAffectDirectionalLight(1.0f);
|
||||
|
||||
col.rgb = col.rgb*diff.rgb;
|
||||
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
vertex_color = col;
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SKIN
|
||||
vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip);
|
||||
|
|
|
|||
|
|
@ -579,6 +579,14 @@ void main()
|
|||
final_da = max(final_da, 0.0f);
|
||||
|
||||
col.rgb = atmosAmbient(col);
|
||||
|
||||
float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = (1.0-ambient);
|
||||
|
||||
col.rgb *= ambient;
|
||||
|
||||
col.rgb = col.rgb + atmosAffectDirectionalLight(final_da * 2.6);
|
||||
col.rgb *= diffuse.rgb;
|
||||
|
||||
|
|
@ -625,13 +633,13 @@ void main()
|
|||
|
||||
#define LIGHT_LOOP(i) col.rgb = col.rgb + calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare);
|
||||
|
||||
/*LIGHT_LOOP(1)
|
||||
LIGHT_LOOP(1)
|
||||
LIGHT_LOOP(2)
|
||||
LIGHT_LOOP(3)
|
||||
LIGHT_LOOP(4)
|
||||
LIGHT_LOOP(5)
|
||||
LIGHT_LOOP(6)
|
||||
LIGHT_LOOP(7)*/
|
||||
LIGHT_LOOP(7)
|
||||
|
||||
frag_color.rgb = col.rgb;
|
||||
glare = min(glare, 1.0);
|
||||
|
|
|
|||
|
|
@ -301,6 +301,13 @@ void main()
|
|||
calcAtmospherics(pos.xyz, 1.0);
|
||||
|
||||
col = atmosAmbient(vec3(0));
|
||||
float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = (1.0-ambient);
|
||||
|
||||
col.rgb *= ambient;
|
||||
|
||||
col += atmosAffectDirectionalLight(max(min(da, 1.0) * 2.6, diffuse.a));
|
||||
|
||||
col *= diffuse.rgb;
|
||||
|
|
|
|||
|
|
@ -83,6 +83,8 @@ uniform vec3 light_direction[8];
|
|||
uniform vec3 light_attenuation[8];
|
||||
uniform vec3 light_diffuse[8];
|
||||
|
||||
uniform vec3 sun_dir;
|
||||
|
||||
vec3 calcDirectionalLight(vec3 n, vec3 l)
|
||||
{
|
||||
float a = max(dot(n,l),0.0);
|
||||
|
|
@ -190,6 +192,13 @@ void main()
|
|||
// Add windlight lights
|
||||
col.rgb = atmosAmbient(col.rgb);
|
||||
|
||||
float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = (1.0-ambient);
|
||||
|
||||
col.rgb *= ambient;
|
||||
|
||||
vary_directional.rgb = atmosAffectDirectionalLight(1.0f);
|
||||
vary_ambient = col.rgb*dff;
|
||||
|
||||
|
|
|
|||
|
|
@ -296,7 +296,7 @@ void main()
|
|||
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
|
||||
|
||||
vec4 diffuse = texture2DRect(diffuseRect, tc);
|
||||
|
||||
|
||||
vec3 col;
|
||||
float bloom = 0.0;
|
||||
|
||||
|
|
@ -310,6 +310,14 @@ void main()
|
|||
calcAtmospherics(pos.xyz, ambocc);
|
||||
|
||||
col = atmosAmbient(vec3(0));
|
||||
|
||||
float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = (1.0-ambient);
|
||||
|
||||
col *= ambient;
|
||||
|
||||
col += atmosAffectDirectionalLight(max(min(da, scol) * 2.6, diffuse.a));
|
||||
|
||||
col *= diffuse.rgb;
|
||||
|
|
|
|||
|
|
@ -441,7 +441,7 @@ list OpenGLPre15
|
|||
RenderVBOEnable 1 0
|
||||
|
||||
list OpenGLPre30
|
||||
RenderDeferred 1 0
|
||||
RenderDeferred 0 0
|
||||
RenderMaxTextureIndex 1 1
|
||||
|
||||
list Intel
|
||||
|
|
|
|||
|
|
@ -217,6 +217,7 @@ boost::signals2::connection LLMaterialMgr::get(const LLUUID& region_id, const LL
|
|||
return connection;
|
||||
}
|
||||
|
||||
#if USE_TE_SPECIFIC_REGISTRATION
|
||||
boost::signals2::connection LLMaterialMgr::getTE(const LLUUID& region_id, const LLMaterialID& material_id, U32 te, LLMaterialMgr::get_callback_te_t::slot_type cb)
|
||||
{
|
||||
boost::signals2::connection connection;
|
||||
|
|
@ -261,6 +262,7 @@ boost::signals2::connection LLMaterialMgr::getTE(const LLUUID& region_id, const
|
|||
|
||||
return connection;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool LLMaterialMgr::isGetAllPending(const LLUUID& region_id) const
|
||||
{
|
||||
|
|
@ -346,6 +348,7 @@ const LLMaterialPtr LLMaterialMgr::setMaterial(const LLUUID& region_id, const LL
|
|||
mGetCallbacks.erase(itCallback);
|
||||
}
|
||||
|
||||
#if USE_TE_SPECIFIC_REGISTRATION
|
||||
TEMaterialPair te_mat_pair;
|
||||
te_mat_pair.materialID = material_id;
|
||||
|
||||
|
|
@ -361,6 +364,7 @@ const LLMaterialPtr LLMaterialMgr::setMaterial(const LLUUID& region_id, const LL
|
|||
mGetTECallbacks.erase(itCallbackTE);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return itMaterial->second;
|
||||
}
|
||||
|
|
@ -779,3 +783,4 @@ void LLMaterialMgr::onRegionRemoved(LLViewerRegion* regionp)
|
|||
clearGetQueues(regionp->getRegionID());
|
||||
// Put doesn't need clearing: objects that can't be found will clean up in processPutQueue()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,11 +44,13 @@ public:
|
|||
typedef std::map<LLMaterialID, LLMaterialPtr> material_map_t;
|
||||
|
||||
typedef boost::signals2::signal<void (const LLMaterialID&, const LLMaterialPtr)> get_callback_t;
|
||||
typedef boost::signals2::signal<void (const LLMaterialID&, const LLMaterialPtr, U32 te)> get_callback_te_t;
|
||||
|
||||
const LLMaterialPtr get(const LLUUID& region_id, const LLMaterialID& material_id);
|
||||
boost::signals2::connection get(const LLUUID& region_id, const LLMaterialID& material_id, get_callback_t::slot_type cb);
|
||||
|
||||
#if USE_TE_SPECIFIC_REGISTRATION
|
||||
typedef boost::signals2::signal<void (const LLMaterialID&, const LLMaterialPtr, U32 te)> get_callback_te_t;
|
||||
boost::signals2::connection getTE(const LLUUID& region_id, const LLMaterialID& material_id, U32 te, get_callback_te_t::slot_type cb);
|
||||
#endif
|
||||
|
||||
typedef boost::signals2::signal<void (const LLUUID&, const material_map_t&)> getall_callback_t;
|
||||
void getAll(const LLUUID& region_id);
|
||||
|
|
@ -82,6 +84,7 @@ protected:
|
|||
typedef std::map<LLMaterialID, get_callback_t*> get_callback_map_t;
|
||||
get_callback_map_t mGetCallbacks;
|
||||
|
||||
#if USE_TE_SPECIFIC_REGISTRATION
|
||||
// struct for TE-specific material ID query
|
||||
struct TEMaterialPair
|
||||
{
|
||||
|
|
@ -101,6 +104,7 @@ protected:
|
|||
|
||||
typedef std::map<TEMaterialPair, get_callback_te_t*> get_callback_te_map_t;
|
||||
get_callback_te_map_t mGetTECallbacks;
|
||||
#endif
|
||||
|
||||
typedef std::set<LLUUID> getall_queue_t;
|
||||
getall_queue_t mGetAllQueue;
|
||||
|
|
@ -118,3 +122,4 @@ protected:
|
|||
};
|
||||
|
||||
#endif // LL_LLMATERIALMGR_H
|
||||
|
||||
|
|
|
|||
|
|
@ -466,6 +466,12 @@ void LLViewerShaderMgr::setShaders()
|
|||
S32 deferred_class = 0;
|
||||
S32 transform_class = gGLManager.mHasTransformFeedback ? 1 : 0;
|
||||
|
||||
static LLCachedControl<bool> use_transform_feedback(gSavedSettings, "RenderUseTransformFeedback");
|
||||
if (!use_transform_feedback)
|
||||
{
|
||||
transform_class = 0;
|
||||
}
|
||||
|
||||
if (LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
|
||||
gSavedSettings.getBOOL("RenderDeferred") &&
|
||||
gSavedSettings.getBOOL("RenderAvatarVP") &&
|
||||
|
|
|
|||
|
|
@ -1973,7 +1973,7 @@ S32 LLVOVolume::setTEGlow(const U8 te, const F32 glow)
|
|||
return res;
|
||||
}
|
||||
|
||||
void LLVOVolume::setTEMaterialParamsCallback(const LLMaterialID &pMaterialID, const LLMaterialPtr pMaterialParams, U32 te)
|
||||
void LLVOVolume::setTEMaterialParamsCallbackTE(const LLMaterialID &pMaterialID, const LLMaterialPtr pMaterialParams, U32 te)
|
||||
{
|
||||
LL_DEBUGS("MaterialTEs") << "materialid " << pMaterialID.asString() << " to TE " << te << LL_ENDL;
|
||||
if (te >= getNumTEs())
|
||||
|
|
@ -1986,6 +1986,18 @@ void LLVOVolume::setTEMaterialParamsCallback(const LLMaterialID &pMaterialID, co
|
|||
}
|
||||
}
|
||||
|
||||
void LLVOVolume::setTEMaterialParamsCallback(const LLMaterialID &pMaterialID, const LLMaterialPtr pMaterialParams)
|
||||
{
|
||||
LL_DEBUGS("MaterialTEs") << "materialid " << pMaterialID.asString() << LL_ENDL;
|
||||
for (U8 i = 0; i < getNumTEs(); i++)
|
||||
{
|
||||
if (getTE(i) && (getTE(i)->getMaterialID().isNull() || (getTE(i)->getMaterialID() == pMaterialID)))
|
||||
{
|
||||
setTEMaterialParams(i, pMaterialParams);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)
|
||||
{
|
||||
S32 res = LLViewerObject::setTEMaterialID(te, pMaterialID);
|
||||
|
|
@ -1996,7 +2008,11 @@ S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)
|
|||
LL_DEBUGS("MaterialTEs") << " " << pMaterialID.asString() << LL_ENDL;
|
||||
if (res)
|
||||
{
|
||||
#if USE_TE_SPECIFIC_REGISTRATION
|
||||
LLMaterialMgr::instance().getTE(getRegion()->getRegionID(), pMaterialID, te, boost::bind(&LLVOVolume::setTEMaterialParamsCallback, this, _1, _2, _3));
|
||||
#else
|
||||
LLMaterialMgr::instance().get(getRegion()->getRegionID(), pMaterialID, boost::bind(&LLVOVolume::setTEMaterialParamsCallback, this, _1, _2));
|
||||
#endif
|
||||
setChanged(TEXTURE);
|
||||
if (!mDrawable.isNull())
|
||||
{
|
||||
|
|
@ -5553,4 +5569,3 @@ void LLHUDPartition::shift(const LLVector4a &offset)
|
|||
//HUD objects don't shift with region crossing. That would be silly.
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -187,7 +187,8 @@ public:
|
|||
/*virtual*/ S32 setTEMediaFlags(const U8 te, const U8 media_flags);
|
||||
/*virtual*/ S32 setTEGlow(const U8 te, const F32 glow);
|
||||
/*virtual*/ S32 setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID);
|
||||
void setTEMaterialParamsCallback(const LLMaterialID& pMaterialID, const LLMaterialPtr pMaterialParams, U32 te);
|
||||
void setTEMaterialParamsCallback(const LLMaterialID& pMaterialID, const LLMaterialPtr pMaterialParams);
|
||||
void setTEMaterialParamsCallbackTE(const LLMaterialID& pMaterialID, const LLMaterialPtr pMaterialParams, U32 te);
|
||||
/*virtual*/ S32 setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams);
|
||||
/*virtual*/ S32 setTEScale(const U8 te, const F32 s, const F32 t);
|
||||
/*virtual*/ S32 setTEScaleS(const U8 te, const F32 s);
|
||||
|
|
@ -382,3 +383,4 @@ protected:
|
|||
};
|
||||
|
||||
#endif // LL_LLVOVOLUME_H
|
||||
|
||||
|
|
|
|||
|
|
@ -5765,8 +5765,15 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)
|
|||
|
||||
LLLightState* light = gGL.getLight(1);
|
||||
|
||||
mHWLightColors[1] = diffuse;
|
||||
if (LLPipeline::sRenderDeferred)
|
||||
{
|
||||
diffuse.mV[0] = powf(diffuse.mV[0], 2.2f);
|
||||
diffuse.mV[1] = powf(diffuse.mV[1], 2.2f);
|
||||
diffuse.mV[2] = powf(diffuse.mV[2], 2.2f);
|
||||
}
|
||||
|
||||
mHWLightColors[1] = diffuse;
|
||||
|
||||
light->setDiffuse(diffuse);
|
||||
light->setAmbient(LLColor4::black);
|
||||
light->setSpecular(LLColor4::black);
|
||||
|
|
@ -5805,6 +5812,13 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)
|
|||
}
|
||||
backlight_diffuse *= backlight_mag / max_component;
|
||||
|
||||
if (LLPipeline::sRenderDeferred)
|
||||
{
|
||||
backlight_diffuse.mV[0] = powf(backlight_diffuse.mV[0], 2.2f);
|
||||
backlight_diffuse.mV[1] = powf(backlight_diffuse.mV[1], 2.2f);
|
||||
backlight_diffuse.mV[2] = powf(backlight_diffuse.mV[2], 2.2f);
|
||||
}
|
||||
|
||||
mHWLightColors[1] = backlight_diffuse;
|
||||
|
||||
LLLightState* light = gGL.getLight(1);
|
||||
|
|
@ -6011,6 +6025,14 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
|
|||
|
||||
LLVector4 light_pos(mSunDir, 0.0f);
|
||||
LLColor4 light_diffuse = mSunDiffuse;
|
||||
|
||||
if (LLPipeline::sRenderDeferred)
|
||||
{
|
||||
light_diffuse.mV[0] = powf(light_diffuse.mV[0], 2.2f);
|
||||
light_diffuse.mV[1] = powf(light_diffuse.mV[1], 2.2f);
|
||||
light_diffuse.mV[2] = powf(light_diffuse.mV[2], 2.2f);
|
||||
}
|
||||
|
||||
mHWLightColors[0] = light_diffuse;
|
||||
|
||||
LLLightState* light = gGL.getLight(0);
|
||||
|
|
@ -6079,6 +6101,13 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
|
|||
F32 x = (3.f * (1.f + light->getLightFalloff())); // why this magic? probably trying to match a historic behavior.
|
||||
float linatten = x / (light_radius); // % of brightness at radius
|
||||
|
||||
if (LLPipeline::sRenderDeferred)
|
||||
{
|
||||
light_color.mV[0] = powf(light_color.mV[0], 2.2f);
|
||||
light_color.mV[1] = powf(light_color.mV[1], 2.2f);
|
||||
light_color.mV[2] = powf(light_color.mV[2], 2.2f);
|
||||
}
|
||||
|
||||
mHWLightColors[cur_light] = light_color;
|
||||
LLLightState* light_state = gGL.getLight(cur_light);
|
||||
|
||||
|
|
@ -6152,6 +6181,13 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
|
|||
F32 x = 3.f;
|
||||
float linatten = x / (light_radius); // % of brightness at radius
|
||||
|
||||
if (LLPipeline::sRenderDeferred)
|
||||
{
|
||||
light_color.mV[0] = powf(light_color.mV[0], 2.2f);
|
||||
light_color.mV[1] = powf(light_color.mV[1], 2.2f);
|
||||
light_color.mV[2] = powf(light_color.mV[2], 2.2f);
|
||||
}
|
||||
|
||||
mHWLightColors[2] = light_color;
|
||||
LLLightState* light = gGL.getLight(2);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue