From 65bbba72bb820dab9369d731808210f38f3f5eaa Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Thu, 2 Feb 2012 17:06:39 -0500 Subject: [PATCH] - The underwater effect is now... um... a decent one. - Updated flibitEFX with an EFXFilter for underwater. - Updated the LWJGL audio rendering to use EFX filters. --- lib/flibitEFX.jar | Bin 5677 -> 6925 bytes src/lwjake2/sound/lwjgl/Channel.java | 3 ++- src/lwjake2/sound/lwjgl/LWJGLSoundImpl.java | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/flibitEFX.jar b/lib/flibitEFX.jar index cab70eee47277a8ff339f1d1fef84e107c471bce..75d8ad2ac5c16c9869fff6bb50f6a8a6842cdd8e 100644 GIT binary patch delta 2417 zcmZXW2{e>#8^_0(nP%+Ej9tiBqBO|9t85c7$Q}yKgzQn4Az>n71_@~~l8b3ecHoO50Gb3f-?|NHt^AIj9`u}5=)xBvhs01!yX z;W-GrK*-Ul26_;3n6m6A3Cf|i2VD+bHX6e@?f~~F2x{dJ^dOjODctZX|skk#gR=-gcd=M4q8EBU0`Sf9D%g&ijofLOs)3P z}D{E8d$E7NJQ z3FR42>87nVIfm^#TN%H(8Kl@bZyk4t_`~S-OUYw3Ok~oU_yyq{krG0hC;iCmWeuU@ zCkXg0Ovi5S^G|$IRYjrFk@X85J?Y8&YYbYGocHO}4-Rb}G2jU-9CS1+j2XOIAy&pC z8K%J+qbwZ1OxBsT`N)4!UDwkH;b5#cYRA1qeAltI6ST=&v!7c5!#WaFOvB1gmbmABt_3*yZ zQOnBq#7&*o9Gg$?)CYZfS*9o{s$r{7A)v1XV0{~X*14h({o7&I?)`-uyV=fey=}6^ z_iMI+f9eVf*sGJ}w#h?a4gjExy|mbMqKtRG=;t3E?HlPIu68cSHzFc0n`%Qd6-fP! z)5)|gZFZm*adF}JAPWwx0}yU%hQ!m0M8p#^EXXll?Fho~C%`yYw_=TH7EPz`Jg4LH z={Ek0?ib-4&kNMadB|R9vnlRH37c?w0qy?QQaz#dkX^ zW*nDbd`7_6N=pRoW~&NQ`BUtos+FWhFO;d3{>pYCXSm;{Xt*%lzAfawf9n)MIyew| zhvB^(h9$CLv$99g)ze9d{XSi`&88<*K&EhAIz;J z2c{(Qpk<%l$l*uXG>QwvThWe?7*+`x|TR;5QQ<|{kqrXiZlU21$~t& z?f7n!pKv}936%Wp*S;hFrFni>Hg6i&zTUku?f!Ev$FK9@n@aQ*el<0zijArR`+j&2 zcCQ7Ek*|t#g4CIvR)>4}Yv7qP%~&#^ek|XVLt{LEO2=W0)c*`7((q ztu$c4e1SX4+>I!YTOp3#aLxD_Yh;;|MG98ls9!D|>LLvbYT<7L6Hnqzr>>;M2+!@< zjj!IYXeiE1y<-eojVu^6=jzsQJVKPTscc6_SH?hQ7V6wbcn3L?Zz>PXCV8g4ur8{L zyyc%oOTmoVVD;52AL-~Ym<;NzIlX|!W9#%E{JQg6cW*yhed@E+`7mJ&=$0RKQZLwm zT;$MqDd|+&kQ18uP( z$IIVJ68@p4D{ZXjR8WYkW>G^e1zvA!T97t@ z>5Q|P>9EPBSgIx=CbikZhdi+InJZ#)BT`$v4nxdJJzCd09h(63S5U)_dGy27M=2G z7tUo5_q9_p@-tv=x7t6toP!96*rPSUwr5RTdXC;TtX{@t{$OCBWJu~{$?Uk(@syAe5+nFc9U?4Glh*5>}nd-C8J1KWxE3*&` z6afeLwL3f-PR!9p1=Uv3xI3FAAfmh>PBNJlQ$F{mQ+H#NYh;W-zPV~2)3EW+StP%> zW6=Eh`L}|HAue;^Z=p+Rl@*zN3^%ix4dz?0X#B(%g{4=Qw>a(596&hdA45Uv7Sdxo z3Zk&-o{2CQM(rU|*mw_3!d83O6?WN!3)~m>x1k_W;r6osY8!z64ssF<&UIhD(tUP&m(@2y&7yjHHe@4cy1e4$~k}5CXD)->Gb?(gy(mRQ?3BNlq#j*xQf9 vBf_il=LevGe`)Q1Qn=xJDXRZD!av&Co&fF9VD={f0ABV~V5@XQWbf@S38FE6 delta 1296 zcmV+r1@HQeHmxiSP)h>@3IG5I006{ukqjvU!*h{0tpc`lk>(%*w{w#S0WJc!bCWm$ zI0CnGvvL8Q0s^;lvk?Ti0S>owLO|(zWvc@M00344lYRjull%o2f8x4H3AB8qKtB@d z1gI%U2noam8e}OdNT7)8I$nnjTf1@`C^vo(7bFl72YvuQ3NdS&fZ)Qx)8Vc*9c{WMu9?_lSP7*{MdC$)IAvfSL-m1-WcrYy z?0CHq{T{`EU}z3yefTHH^nxjd&t;TqMisD>-A>8;;{+H&oJ>shpDa z<03j7ymaXsWMl6$)J1rj2MpG0snlT@igC(dIC^@W2f?p$#qkC@*Er#`nFyXG@rg*% zceF&F7;!Zx32eYnn~1d7iFjx$>v=p+#)7B_(O3%DpYk`{e};{96ON4@Hf>l~vC+qM z8#l0O<0keQy8pEf!z6A|T|Grg(G zeMxWNcwTn=CRdMz5~=tX7UnRz2)5~!>-6*tC9R&kGWj-E$u=k&!JrDT(fSVtFYx-aj>8A2fQ&QhH&jdO&_XWY$Vpr(lz zsQzZPvhE&CI;v)~b6mkj2g3P+V@Ns;-Jv@vt`NFbap;Y%3D;WSxZ zQ?e}-z2X)dD84BLCuCBknY4Q%?+`wX;+s1v2|q-WC|QyO7)Qx;G@rxxK86rxVVp!a zi%A&6Y!T1y=OZ6rj*eD6@qhcA*ApWzGqj8gQ-7;p(u55$6d4q3i!|vJ`Ih)GNNMN( zdx{Q=2_@IH;?9}@L^()hhhT{8o5I@ibr9@!JAW-JU+Hxq8Uz!(bBqGdD_Q!Tt&s?9 z{FC+ekFeLCM@A~Q(|YZT-M6*yX-1L>pI)yn={>l(aHQU|iYB1{dM>VKqb3#17$Ar- z7f5bVet12vS8BdxZt&#ly9}-W6IVEefHJ^5DEyU@mJb6z)0Z>Z; z0u%!Z000O80K{{X;1)Ro!*i1x7eE5GbCX>cFao!8laCiZ0=ILM&lgAnw{w#j7*_(f zbCYryVF|Z$LO|(zWvc^|+!#=kj~N~U3kZ`T1SgZ$87~5{3zH!PGLtzP5Fp`lLO_LZ zkvS;?007Je001fg0000000000005+cMh}z08Yh#G8V3{w1^@s601E&M0AK?E0JjnV G0002hST_~` diff --git a/src/lwjake2/sound/lwjgl/Channel.java b/src/lwjake2/sound/lwjgl/Channel.java index 2bc2072..690abbd 100644 --- a/src/lwjake2/sound/lwjgl/Channel.java +++ b/src/lwjake2/sound/lwjgl/Channel.java @@ -291,7 +291,7 @@ public class Channel { //stack variable private static float[] entityOrigin = {0, 0, 0}; - static void playAllSounds(FloatBuffer listenerOrigin, int currentEffectIndex) { + static void playAllSounds(FloatBuffer listenerOrigin, int currentEffectIndex, int currentFilterIndex) { FloatBuffer sourceOrigin = sourceOriginBuffer; Channel ch; int sourceId; @@ -326,6 +326,7 @@ public class Channel { AL10.alSourcef (sourceId, AL10.AL_ROLLOFF_FACTOR, ch.rolloff); AL10.alSource3f(sourceId, AL10.AL_POSITION, sourceOrigin.get(), sourceOrigin.get(), sourceOrigin.get()); AL11.alSource3i(sourceId, EFX10.AL_AUXILIARY_SEND_FILTER, currentEffectIndex, 0, EFX10.AL_FILTER_NULL); + AL10.alSourcei(sourceId, EFX10.AL_DIRECT_FILTER, currentFilterIndex); AL10.alSourcePlay(sourceId); sourceOrigin.rewind(); ch.modified = false; diff --git a/src/lwjake2/sound/lwjgl/LWJGLSoundImpl.java b/src/lwjake2/sound/lwjgl/LWJGLSoundImpl.java index a55eb94..664c7bc 100644 --- a/src/lwjake2/sound/lwjgl/LWJGLSoundImpl.java +++ b/src/lwjake2/sound/lwjgl/LWJGLSoundImpl.java @@ -43,6 +43,7 @@ import java.nio.IntBuffer; import java.nio.ShortBuffer; import com.flibitijibibo.flibitEFX.EFXEffectUnderwater; +import com.flibitijibibo.flibitEFX.EFXFilterUnderwater; import org.lwjgl.LWJGLException; import org.lwjgl.openal.AL; import org.lwjgl.openal.AL10; @@ -68,7 +69,9 @@ public final class LWJGLSoundImpl implements Sound { /** EFX Variables */ private int currentEffectIndex; + private int currentFilterIndex; private EFXEffectUnderwater underwaterEffect; + private EFXFilterUnderwater underwaterFilter; // singleton private LWJGLSoundImpl() { @@ -154,6 +157,7 @@ public final class LWJGLSoundImpl implements Sound { { Com.Printf("... using EFX effects:\n"); underwaterEffect = new EFXEffectUnderwater(); + underwaterFilter = new EFXFilterUnderwater(); } @@ -161,6 +165,7 @@ public final class LWJGLSoundImpl implements Sound { { // Unload EFX Effects underwaterEffect.killEffect(); + underwaterFilter.killFilter(); // Release the context and the device. AL.destroy(); @@ -260,14 +265,18 @@ public final class LWJGLSoundImpl implements Sound { AL10.alListenerf(AL10.AL_GAIN, s_volume.value); // Detect EFX Conditions - if ((GameBase.gi.pointcontents.pointcontents(origin)& Defines.MASK_WATER)!= 0) + if ((GameBase.gi.pointcontents.pointcontents(origin)& Defines.MASK_WATER)!= 0) { currentEffectIndex = underwaterEffect.getIndex(); - else + currentFilterIndex = underwaterFilter.getIndex(); + } + else { currentEffectIndex = EFX10.AL_EFFECTSLOT_NULL; + currentFilterIndex = EFX10.AL_FILTER_NULL; + } Channel.addLoopSounds(); Channel.addPlaySounds(); - Channel.playAllSounds(listenerOrigin, currentEffectIndex); + Channel.playAllSounds(listenerOrigin, currentEffectIndex, currentFilterIndex); } /* (non-Javadoc)