From b0158e2f60cffb654e9805f66dca055955769290 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw <simon@hardwired.org.uk> Date: Wed, 5 Sep 2012 21:49:34 +0100 Subject: [PATCH] Changes to Smudge and blending modes (make them a little slower and easier to handle) --- src/simulation/Simulation.cpp | 53 ++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index faa855250..143791270 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -848,6 +848,7 @@ void Simulation::ApplyDecoration(int x, int y, int colR_, int colG_, int colB_, { int rp; float tr, tg, tb, ta, colR = colR_, colG = colG_, colB = colB_, colA = colA_; + float strength = 0.01f; rp = pmap[y][x]; if (!rp) return; @@ -873,52 +874,54 @@ void Simulation::ApplyDecoration(int x, int y, int colR_, int colG_, int colB_, } else if (mode == DECO_ADD) { - ta += (colA*0.1f)*colA; - tr += (colR*0.1f)*colA; - tg += (colG*0.1f)*colA; - tb += (colB*0.1f)*colA; + ta += (colA*strength)*colA; + tr += (colR*strength)*colA; + tg += (colG*strength)*colA; + tb += (colB*strength)*colA; } else if (mode == DECO_SUBTRACT) { - ta -= (colA*0.1f)*colA; - tr -= (colR*0.1f)*colA; - tg -= (colG*0.1f)*colA; - tb -= (colB*0.1f)*colA; + ta -= (colA*strength)*colA; + tr -= (colR*strength)*colA; + tg -= (colG*strength)*colA; + tb -= (colB*strength)*colA; } else if (mode == DECO_MULTIPLY) { - tr *= 1.0f+(colR*0.1f)*colA; - tg *= 1.0f+(colG*0.1f)*colA; - tb *= 1.0f+(colB*0.1f)*colA; + tr *= 1.0f+(colR*strength)*colA; + tg *= 1.0f+(colG*strength)*colA; + tb *= 1.0f+(colB*strength)*colA; } else if (mode == DECO_DIVIDE) { - tr /= 1.0f+(colR*0.1f)*colA; - tg /= 1.0f+(colG*0.1f)*colA; - tb /= 1.0f+(colB*0.1f)*colA; + tr /= 1.0f+(colR*strength)*colA; + tg /= 1.0f+(colG*strength)*colA; + tb /= 1.0f+(colB*strength)*colA; } else if (mode == DECO_SMUDGE) { - int rx, ry, num = 0; - for (rx=-2; rx<3; rx++) - for (ry=-2; ry<3; ry++) + float tas = ta, trs = tr, tgs = tg, tbs = tb; + int rx, ry; + float num = 1.0f; + for (rx=-1; rx<2; rx++) + for (ry=-1; ry<2; ry++) { if ((pmap[y+ry][x+rx]&0xFF) && parts[pmap[y+ry][x+rx]>>8].dcolour) { Particle part = parts[pmap[y+ry][x+rx]>>8]; num++; - ta += float((part.dcolour>>24)&0xFF)/255.0f; - tr += float((part.dcolour>>16)&0xFF)/255.0f; - tg += float((part.dcolour>>8)&0xFF)/255.0f; - tb += float((part.dcolour)&0xFF)/255.0f; + tas += ((float)((part.dcolour>>24)&0xFF))/255.0f; + trs += ((float)((part.dcolour>>16)&0xFF))/255.0f; + tgs += ((float)((part.dcolour>>8)&0xFF))/255.0f; + tbs += ((float)((part.dcolour)&0xFF))/255.0f; } } if (num == 0) return; - ta = ta/float(num+1); - tr = tr/float(num+1); - tg = tg/float(num+1); - tb = tb/float(num+1); + ta = ((tas/num)*0.1f) + (ta*0.9f); + tr = ((trs/num)*0.1f) + (tr*0.9f); + tg = ((tgs/num)*0.1f) + (tg*0.9f); + tb = ((tbs/num)*0.1f) + (tb*0.9f); } colA_ = ta*255.0f;