SL-17274 Hook up emissive map and non-texture parameters to pbropaqueF.glsl
parent
34ee8eb277
commit
9439c721f4
|
|
@ -1170,10 +1170,14 @@ void LLShaderMgr::initAttribsAndUniforms()
|
|||
llassert(mReservedUniforms.size() == LLShaderMgr::PROJECTOR_AMBIENT_LOD+1);
|
||||
|
||||
mReservedUniforms.push_back("color");
|
||||
|
||||
mReservedUniforms.push_back("emissiveColor");
|
||||
mReservedUniforms.push_back("metallicFactor");
|
||||
mReservedUniforms.push_back("roughnessFactor");
|
||||
|
||||
mReservedUniforms.push_back("diffuseMap");
|
||||
mReservedUniforms.push_back("altDiffuseMap");
|
||||
mReservedUniforms.push_back("specularMap");
|
||||
mReservedUniforms.push_back("emissiveMap");
|
||||
mReservedUniforms.push_back("bumpMap");
|
||||
mReservedUniforms.push_back("bumpMap2");
|
||||
mReservedUniforms.push_back("environmentMap");
|
||||
|
|
|
|||
|
|
@ -74,9 +74,13 @@ public:
|
|||
PROJECTOR_LOD, // "proj_lod"
|
||||
PROJECTOR_AMBIENT_LOD, // "proj_ambient_lod"
|
||||
DIFFUSE_COLOR, // "color"
|
||||
EMISSIVE_COLOR, // "emissiveColor"
|
||||
METALLIC_FACTOR, // "metallicFactor"
|
||||
ROUGHNESS_FACTOR, // "roughnessFactor"
|
||||
DIFFUSE_MAP, // "diffuseMap"
|
||||
ALTERNATE_DIFFUSE_MAP, // "altDiffuseMap"
|
||||
SPECULAR_MAP, // "specularMap"
|
||||
EMISSIVE_MAP, // "emissiveMap"
|
||||
BUMP_MAP, // "bumpMap"
|
||||
BUMP_MAP2, // "bumpMap2"
|
||||
ENVIRONMENT_MAP, // "environmentMap"
|
||||
|
|
|
|||
|
|
@ -32,10 +32,18 @@
|
|||
|
||||
uniform sampler2D diffuseMap; //always in sRGB space
|
||||
|
||||
uniform float metallicFactor;
|
||||
uniform float roughnessFactor;
|
||||
uniform vec3 emissiveColor;
|
||||
|
||||
#ifdef HAS_NORMAL_MAP
|
||||
uniform sampler2D bumpMap;
|
||||
#endif
|
||||
|
||||
#ifdef HAS_EMISSIVE_MAP
|
||||
uniform sampler2D emissiveMap;
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SPECULAR_MAP
|
||||
uniform sampler2D specularMap; // Packed: Occlusion, Metal, Roughness
|
||||
#endif
|
||||
|
|
@ -76,8 +84,6 @@ void main()
|
|||
// else
|
||||
vec3 col = vertex_color.rgb * texture2D(diffuseMap, vary_texcoord0.xy).rgb;
|
||||
|
||||
vec3 emissive = vec3(0);
|
||||
|
||||
#ifdef HAS_NORMAL_MAP
|
||||
vec4 norm = texture2D(bumpMap, vary_texcoord1.xy);
|
||||
norm.xyz = norm.xyz * 2 - 1;
|
||||
|
|
@ -105,6 +111,14 @@ void main()
|
|||
vec3 spec = vec3(1,1,1);
|
||||
#endif
|
||||
|
||||
spec.g *= roughnessFactor;
|
||||
spec.b *= metallicFactor;
|
||||
|
||||
vec3 emissive = emissiveColor;
|
||||
#ifdef HAS_EMISSIVE_MAP
|
||||
emissive *= texture2D(emissiveMap, vary_texcoord0.xy).rgb;
|
||||
#endif
|
||||
|
||||
|
||||
#if DEBUG_BASIC
|
||||
col.rgb = vec3( 1, 0, 1 );
|
||||
|
|
|
|||
|
|
@ -99,30 +99,48 @@ void LLDrawPoolPBROpaque::renderDeferred(S32 pass)
|
|||
{
|
||||
LLDrawInfo& params = **i;
|
||||
|
||||
//gGL.getTexUnit(0)->activate();
|
||||
//gGL.getTexUnit(0)->activate();
|
||||
|
||||
if (mShaderLevel > 1)
|
||||
if (params.mTexture.notNull())
|
||||
{
|
||||
if (params.mTexture.notNull())
|
||||
{
|
||||
gGL.getTexUnit(0)->bindFast(params.mTexture); // diffuse
|
||||
}
|
||||
gGL.getTexUnit(0)->bindFast(params.mTexture); // diffuse
|
||||
}
|
||||
else
|
||||
{
|
||||
gGL.getTexUnit(0)->bindFast(LLViewerFetchedTexture::sWhiteImagep);
|
||||
}
|
||||
|
||||
if (params.mNormalMap)
|
||||
{
|
||||
gDeferredPBROpaqueProgram.bindTexture(LLShaderMgr::BUMP_MAP, params.mNormalMap);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: bind default normal map (???? WTF is it ???)
|
||||
}
|
||||
|
||||
if (params.mSpecularMap)
|
||||
{
|
||||
gDeferredPBROpaqueProgram.bindTexture(LLShaderMgr::SPECULAR_MAP, params.mSpecularMap); // Packed Occlusion Roughness Metal
|
||||
}
|
||||
else
|
||||
{
|
||||
gDeferredPBROpaqueProgram.bindTexture(LLShaderMgr::SPECULAR_MAP, LLViewerFetchedTexture::sWhiteImagep);
|
||||
}
|
||||
|
||||
if (params.mEmissiveMap)
|
||||
{
|
||||
gDeferredPBROpaqueProgram.bindTexture(LLShaderMgr::EMISSIVE_MAP, params.mEmissiveMap); // Packed Occlusion Roughness Metal
|
||||
}
|
||||
else
|
||||
{
|
||||
gDeferredPBROpaqueProgram.bindTexture(LLShaderMgr::EMISSIVE_MAP, LLViewerFetchedTexture::sWhiteImagep);
|
||||
}
|
||||
|
||||
gDeferredPBROpaqueProgram.uniform1f(LLShaderMgr::ROUGHNESS_FACTOR, params.mGLTFMaterial->mRoughnessFactor);
|
||||
gDeferredPBROpaqueProgram.uniform1f(LLShaderMgr::METALLIC_FACTOR, params.mGLTFMaterial->mMetallicFactor);
|
||||
gDeferredPBROpaqueProgram.uniform3fv(LLShaderMgr::EMISSIVE_COLOR, 1, params.mGLTFMaterial->mEmissiveColor.mV);
|
||||
|
||||
// Similar to LLDrawPooLMaterials::pushMaterialsBatch(params, getVertexDataMask(), false);
|
||||
LLRenderPass::pushBatch(params, getVertexDataMask(), FALSE, FALSE);
|
||||
//LLRenderPass::applyModelMatrix(params);
|
||||
//params.mVertexBuffer->setBufferFast(getVertexDataMask());
|
||||
//params.mVertexBuffer->drawRangeFast(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1650,6 +1650,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredPBROpaqueProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
|
||||
gDeferredPBROpaqueProgram.addPermutation("HAS_NORMAL_MAP", "1");
|
||||
gDeferredPBROpaqueProgram.addPermutation("HAS_SPECULAR_MAP", "1");
|
||||
gDeferredPBROpaqueProgram.addPermutation("HAS_EMISSIVE_MAP", "1");
|
||||
gDeferredPBROpaqueProgram.addPermutation("DIFFUSE_ALPHA_MODE", "0");
|
||||
|
||||
success = make_rigged_variant(gDeferredPBROpaqueProgram, gDeferredSkinnedPBROpaqueProgram);
|
||||
|
|
|
|||
Loading…
Reference in New Issue