diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp index 67c7de10e..1f460d625 100644 --- a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp @@ -83,7 +83,7 @@ void PBRConfigMapHLSL::processPix( Vector &componentList, cons pbrConfigMapTex->uniform = true; pbrConfigMapTex->texture = true; pbrConfigMapTex->constNum = pbrConfigMap->constNum; - LangElement *texOp = new GenOp(" @.Sample(@, @)", pbrConfigMapTex, pbrConfigMap, texCoord); + LangElement *texOp = new GenOp("@.Sample(@, @)", pbrConfigMapTex, pbrConfigMap, texCoord); Var *metalness = (Var*)LangElement::find("metalness"); if (!metalness) metalness = new Var("metalness", "float"); @@ -103,6 +103,21 @@ void PBRConfigMapHLSL::processPix( Vector &componentList, cons } meta->addStatement(new GenOp(" @ = @.g;\r\n", new DecOp(ao), pbrConfig)); meta->addStatement(new GenOp(" @ = @.a;\r\n", new DecOp(metalness), pbrConfig)); + + if (fd.features[MFT_GlowMap]) + { + Var* glowMul = new Var("glowMul", "float"); + glowMul->uniform = true; + glowMul->constSortPos = cspPotentialPrimitive; + + ShaderFeature::OutputTarget targ = ShaderFeature::DefaultTarget; + if (fd.features[MFT_isDeferred]) + targ = ShaderFeature::RenderTarget1; + + Var* diffuseColor = (Var*)LangElement::find(getOutputTargetVarName(targ)); + if (diffuseColor) + meta->addStatement(new GenOp(" @.rgb += @.rgb*float3(@,@,@)*@.aaa;\r\n", diffuseColor, diffuseColor, glowMul, glowMul, glowMul, texOp)); + } output = meta; } diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index b155baae7..e1b26b6c8 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -128,7 +128,7 @@ Material::Material() mSmoothnessChan[i] = 0; mAOChan[i] = 1; mMetalChan[i] = 2; - + mGlowChan[i] = 3; mAccuEnabled[i] = false; mAccuScale[i] = 1.0f; mAccuDirection[i] = 1.0f; diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index 615df3406..e9434f157 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -62,6 +62,7 @@ void ShaderConstHandles::init( GFXShader *shader, VectorgetShaderConstHandle(ShaderGenVars::pbrConfig); mSmoothnessSC = shader->getShaderConstHandle(ShaderGenVars::smoothness); mMetalnessSC = shader->getShaderConstHandle(ShaderGenVars::metalness); + mGlowMulSC = shader->getShaderConstHandle(ShaderGenVars::glowMul); mAccuScaleSC = shader->getShaderConstHandle("$accuScale"); mAccuDirectionSC = shader->getShaderConstHandle("$accuDirection"); mAccuStrengthSC = shader->getShaderConstHandle("$accuStrength"); @@ -1111,6 +1112,7 @@ void ProcessedShaderMaterial::_setShaderConstants(SceneRenderState * state, cons shaderConsts->setSafe(handles->mSmoothnessSC, mMaterial->mSmoothness[stageNum]); shaderConsts->setSafe(handles->mMetalnessSC, mMaterial->mMetalness[stageNum]); + shaderConsts->setSafe(handles->mGlowMulSC, mMaterial->mGlowMul[stageNum]); shaderConsts->setSafe(handles->mParallaxInfoSC, mMaterial->mParallaxScale[stageNum]); shaderConsts->setSafe(handles->mMinnaertConstantSC, mMaterial->mMinnaertConstant[stageNum]); diff --git a/Engine/source/materials/processedShaderMaterial.h b/Engine/source/materials/processedShaderMaterial.h index c7e52368d..89bd372bd 100644 --- a/Engine/source/materials/processedShaderMaterial.h +++ b/Engine/source/materials/processedShaderMaterial.h @@ -49,6 +49,7 @@ public: GFXShaderConstHandle* mPBRConfigSC; GFXShaderConstHandle* mSmoothnessSC; GFXShaderConstHandle* mMetalnessSC; + GFXShaderConstHandle* mGlowMulSC; GFXShaderConstHandle* mParallaxInfoSC; GFXShaderConstHandle* mAccuScaleSC; GFXShaderConstHandle* mAccuDirectionSC; diff --git a/Engine/source/shaderGen/shaderGenVars.cpp b/Engine/source/shaderGen/shaderGenVars.cpp index b28bb6447..4c75287b4 100644 --- a/Engine/source/shaderGen/shaderGenVars.cpp +++ b/Engine/source/shaderGen/shaderGenVars.cpp @@ -76,6 +76,7 @@ const String ShaderGenVars::vectorLightBrightness("$vectorLightBrightness"); const String ShaderGenVars::pbrConfig("$PBRConfig"); const String ShaderGenVars::smoothness("$smoothness"); const String ShaderGenVars::metalness("$metalness"); +const String ShaderGenVars::glowMul("$glowMul"); //Reflection Probes const String ShaderGenVars::probePosition("$inProbePosArray"); diff --git a/Engine/source/shaderGen/shaderGenVars.h b/Engine/source/shaderGen/shaderGenVars.h index 679dacb59..86055d6eb 100644 --- a/Engine/source/shaderGen/shaderGenVars.h +++ b/Engine/source/shaderGen/shaderGenVars.h @@ -88,6 +88,7 @@ struct ShaderGenVars const static String pbrConfig; const static String smoothness; const static String metalness; + const static String glowMul; //Reflection Probes const static String probePosition;