From ab80a842aa883b761c825f87247c1eb3e2369d6c Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Mon, 20 Oct 2025 10:56:19 -0500 Subject: [PATCH 1/2] fix particle glow --- Engine/source/gfx/gl/gfxGLShader.cpp | 4 ++++ Engine/source/renderInstance/renderParticleMgr.cpp | 4 +++- Engine/source/renderInstance/renderParticleMgr.h | 1 + .../game/core/rendering/shaders/gl/particlesP.glsl | 7 ++++++- .../BaseGame/game/core/rendering/shaders/particlesP.hlsl | 7 ++++++- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLShader.cpp b/Engine/source/gfx/gl/gfxGLShader.cpp index 69ea74f34..a304b9bc2 100644 --- a/Engine/source/gfx/gl/gfxGLShader.cpp +++ b/Engine/source/gfx/gl/gfxGLShader.cpp @@ -1122,15 +1122,19 @@ void GFXGLShader::setConstantsFromBuffer(U8* buffer) // Set sampler number on our program. glUniform1i(handle->mDesc.bindPoint, handle->mDesc.samplerReg); break; + case GFXSCT_Bool: case GFXSCT_Int: glUniform1iv(handle->mDesc.bindPoint, handle->mDesc.arraySize, (GLint*)(mGlobalConstBuffer + handle->mDesc.offset)); break; + case GFXSCT_Bool2: case GFXSCT_Int2: glUniform2iv(handle->mDesc.bindPoint, handle->mDesc.arraySize, (GLint*)(mGlobalConstBuffer + handle->mDesc.offset)); break; + case GFXSCT_Bool3: case GFXSCT_Int3: glUniform3iv(handle->mDesc.bindPoint, handle->mDesc.arraySize, (GLint*)(mGlobalConstBuffer + handle->mDesc.offset)); break; + case GFXSCT_Bool4: case GFXSCT_Int4: glUniform4iv(handle->mDesc.bindPoint, handle->mDesc.arraySize, (GLint*)(mGlobalConstBuffer + handle->mDesc.offset)); break; diff --git a/Engine/source/renderInstance/renderParticleMgr.cpp b/Engine/source/renderInstance/renderParticleMgr.cpp index 3f4779d34..4c2f8ccba 100644 --- a/Engine/source/renderInstance/renderParticleMgr.cpp +++ b/Engine/source/renderInstance/renderParticleMgr.cpp @@ -495,7 +495,8 @@ void RenderParticleMgr::renderParticle(ParticleRenderInst* ri, SceneRenderState* mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaFactorSC, alphaFactor ); mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaScaleSC, alphaScale ); - + mParticleShaderConsts.mShaderConsts->setSafe(mParticleShaderConsts.mGlowSC, ri->glow ? 1 : 0); + mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mFSModelViewProjSC, *ri->modelViewProj ); mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mOneOverFarSC, 1.0f / state->getFarPlane() ); @@ -556,6 +557,7 @@ bool RenderParticleMgr::_initShader() mParticleShaderConsts.mOneOverSoftnessSC = mParticleShader->getShaderConstHandle( "$oneOverSoftness" ); mParticleShaderConsts.mAlphaFactorSC = mParticleShader->getShaderConstHandle( "$alphaFactor" ); mParticleShaderConsts.mAlphaScaleSC = mParticleShader->getShaderConstHandle( "$alphaScale" ); + mParticleShaderConsts.mGlowSC = mParticleShader->getShaderConstHandle("$glow"); mParticleShaderConsts.mFSModelViewProjSC = mParticleShader->getShaderConstHandle( "$fsModelViewProj" ); mParticleShaderConsts.mDeferredTargetParamsSC = mParticleShader->getShaderConstHandle( "$deferredTargetParams" ); diff --git a/Engine/source/renderInstance/renderParticleMgr.h b/Engine/source/renderInstance/renderParticleMgr.h index 6d606acad..6409e6516 100644 --- a/Engine/source/renderInstance/renderParticleMgr.h +++ b/Engine/source/renderInstance/renderParticleMgr.h @@ -112,6 +112,7 @@ protected: GFXShaderConstHandle *mDeferredTargetParamsSC; GFXShaderConstHandle *mAlphaFactorSC; GFXShaderConstHandle *mAlphaScaleSC; + GFXShaderConstHandle* mGlowSC; GFXShaderConstHandle *mSamplerDiffuse; GFXShaderConstHandle *mSamplerDeferredTex; GFXShaderConstHandle *mSamplerParaboloidLightMap; diff --git a/Templates/BaseGame/game/core/rendering/shaders/gl/particlesP.glsl b/Templates/BaseGame/game/core/rendering/shaders/gl/particlesP.glsl index cf35e5f1b..96a165ef3 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/gl/particlesP.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/gl/particlesP.glsl @@ -77,6 +77,7 @@ vec4 lmSample( vec3 nrm ) uniform float alphaFactor; uniform float alphaScale; +uniform int glow; out vec4 OUT_col; @@ -106,7 +107,11 @@ void main() // Scale output color by the alpha factor (turn LerpAlpha into pre-multiplied alpha) vec3 colorScale = ( alphaFactor < 0.0 ? IN_color.rgb * diffuse.rgb : vec3( alphaFactor > 0.0 ? IN_color.a * diffuse.a * alphaFactor * softBlend : softBlend ) ); - + if (glow >0) + { + vec4 glowCol = vec4(pow(max((IN_color * diffuse).rgb*10,0.0),3.54406804435),(IN_color * diffuse).a); + colorScale *= glowCol.rgb; + } OUT_col = hdrEncode( vec4( IN_color.rgb * diffuse.rgb * colorScale, IN_color.a * diffuse.a * softBlend * alphaScale ) ); } diff --git a/Templates/BaseGame/game/core/rendering/shaders/particlesP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/particlesP.hlsl index 155107d8b..b27885f53 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/particlesP.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/particlesP.hlsl @@ -75,6 +75,7 @@ float4 lmSample( float3 nrm ) uniform float alphaFactor; uniform float alphaScale; +uniform int glow; float4 main( Conn IN ) : TORQUE_TARGET0 { @@ -102,7 +103,11 @@ float4 main( Conn IN ) : TORQUE_TARGET0 // Scale output color by the alpha factor (turn LerpAlpha into pre-multiplied alpha) float3 colorScale = ( alphaFactor < 0.0 ? IN.color.rgb * diffuse.rgb : ( alphaFactor > 0.0 ? IN.color.a * diffuse.a * alphaFactor * softBlend : softBlend ) ); - + if (glow >0) + { + float4 glowCol = float4(pow(max((IN.color * diffuse).rgb*10,0.0),3.54406804435),(IN.color * diffuse).a); + colorScale *= glowCol.rgb; + } return hdrEncode( float4( IN.color.rgb * diffuse.rgb * colorScale, IN.color.a * diffuse.a * softBlend * alphaScale ) ); } From c0bd8de143682294a2b8bfd077313019082a11c3 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Mon, 20 Oct 2025 12:11:56 -0500 Subject: [PATCH 2/2] shift glow logic to use a bool. we'll likely make that a scalar at some point, but not at the last second gl math parity. for proper *command* parity we'll need to hunt down why it' forcing it to version 110 --- Engine/source/renderInstance/renderParticleMgr.cpp | 2 +- .../game/core/rendering/shaders/gl/particlesP.glsl | 8 ++++---- .../BaseGame/game/core/rendering/shaders/particlesP.hlsl | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Engine/source/renderInstance/renderParticleMgr.cpp b/Engine/source/renderInstance/renderParticleMgr.cpp index 4c2f8ccba..5bcd8cb96 100644 --- a/Engine/source/renderInstance/renderParticleMgr.cpp +++ b/Engine/source/renderInstance/renderParticleMgr.cpp @@ -495,7 +495,7 @@ void RenderParticleMgr::renderParticle(ParticleRenderInst* ri, SceneRenderState* mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaFactorSC, alphaFactor ); mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaScaleSC, alphaScale ); - mParticleShaderConsts.mShaderConsts->setSafe(mParticleShaderConsts.mGlowSC, ri->glow ? 1 : 0); + mParticleShaderConsts.mShaderConsts->setSafe(mParticleShaderConsts.mGlowSC, ri->glow); mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mFSModelViewProjSC, *ri->modelViewProj ); mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mOneOverFarSC, 1.0f / state->getFarPlane() ); diff --git a/Templates/BaseGame/game/core/rendering/shaders/gl/particlesP.glsl b/Templates/BaseGame/game/core/rendering/shaders/gl/particlesP.glsl index 96a165ef3..b5311267a 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/gl/particlesP.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/gl/particlesP.glsl @@ -19,7 +19,6 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- - #include "torque.glsl" #include "hlslCompat.glsl" @@ -77,7 +76,7 @@ vec4 lmSample( vec3 nrm ) uniform float alphaFactor; uniform float alphaScale; -uniform int glow; +uniform bool glow; out vec4 OUT_col; @@ -107,9 +106,10 @@ void main() // Scale output color by the alpha factor (turn LerpAlpha into pre-multiplied alpha) vec3 colorScale = ( alphaFactor < 0.0 ? IN_color.rgb * diffuse.rgb : vec3( alphaFactor > 0.0 ? IN_color.a * diffuse.a * alphaFactor * softBlend : softBlend ) ); - if (glow >0) + if (glow) { - vec4 glowCol = vec4(pow(max((IN_color * diffuse).rgb*10,0.0),3.54406804435),(IN_color * diffuse).a); + vec3 glowCol = (IN_color * diffuse).rgb*10;//pow((IN_color * diffuse).rgb*10,3.54406804435); + glowCol*=glowCol*glowCol*0.54406804435; colorScale *= glowCol.rgb; } OUT_col = hdrEncode( vec4( IN_color.rgb * diffuse.rgb * colorScale, diff --git a/Templates/BaseGame/game/core/rendering/shaders/particlesP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/particlesP.hlsl index b27885f53..f6cd1ebb2 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/particlesP.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/particlesP.hlsl @@ -75,7 +75,7 @@ float4 lmSample( float3 nrm ) uniform float alphaFactor; uniform float alphaScale; -uniform int glow; +uniform bool glow; float4 main( Conn IN ) : TORQUE_TARGET0 { @@ -103,7 +103,7 @@ float4 main( Conn IN ) : TORQUE_TARGET0 // Scale output color by the alpha factor (turn LerpAlpha into pre-multiplied alpha) float3 colorScale = ( alphaFactor < 0.0 ? IN.color.rgb * diffuse.rgb : ( alphaFactor > 0.0 ? IN.color.a * diffuse.a * alphaFactor * softBlend : softBlend ) ); - if (glow >0) + if (glow) { float4 glowCol = float4(pow(max((IN.color * diffuse).rgb*10,0.0),3.54406804435),(IN.color * diffuse).a); colorScale *= glowCol.rgb;