summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/cNoise.cpp21
-rw-r--r--source/cNoise.h20
-rw-r--r--source/cNoise.inc2
3 files changed, 33 insertions, 10 deletions
diff --git a/source/cNoise.cpp b/source/cNoise.cpp
index 4221d9218..653b9e95c 100644
--- a/source/cNoise.cpp
+++ b/source/cNoise.cpp
@@ -129,18 +129,21 @@ float cNoise::CosineNoise2D( float a_X, float a_Y ) const
return CosineInterpolate( interp1, interp2, FracY );
}
+
+
+
+
float cNoise::CubicNoise2D( float a_X, float a_Y ) const
{
const int BaseX = FAST_FLOOR( a_X );
const int BaseY = FAST_FLOOR( a_Y );
- const float points[4][4] = {
-
- IntNoise2D( BaseX-1, BaseY-1 ), IntNoise2D( BaseX, BaseY-1 ), IntNoise2D( BaseX+1, BaseY-1 ), IntNoise2D( BaseX+2, BaseY-1 ),
- IntNoise2D( BaseX-1, BaseY ), IntNoise2D( BaseX, BaseY ), IntNoise2D( BaseX+1, BaseY ), IntNoise2D( BaseX+2, BaseY ),
- IntNoise2D( BaseX-1, BaseY+1 ), IntNoise2D( BaseX, BaseY+1 ), IntNoise2D( BaseX+1, BaseY+1 ), IntNoise2D( BaseX+2, BaseY+1 ),
- IntNoise2D( BaseX-1, BaseY+2 ), IntNoise2D( BaseX, BaseY+2 ), IntNoise2D( BaseX+1, BaseY+2 ), IntNoise2D( BaseX+2, BaseY+2 ),
-
+ const float points[4][4] =
+ {
+ IntNoise2D( BaseX-1, BaseY-1 ), IntNoise2D( BaseX, BaseY-1 ), IntNoise2D( BaseX+1, BaseY-1 ), IntNoise2D( BaseX+2, BaseY-1 ),
+ IntNoise2D( BaseX-1, BaseY ), IntNoise2D( BaseX, BaseY ), IntNoise2D( BaseX+1, BaseY ), IntNoise2D( BaseX+2, BaseY ),
+ IntNoise2D( BaseX-1, BaseY+1 ), IntNoise2D( BaseX, BaseY+1 ), IntNoise2D( BaseX+1, BaseY+1 ), IntNoise2D( BaseX+2, BaseY+1 ),
+ IntNoise2D( BaseX-1, BaseY+2 ), IntNoise2D( BaseX, BaseY+2 ), IntNoise2D( BaseX+1, BaseY+2 ), IntNoise2D( BaseX+2, BaseY+2 ),
};
const float FracX = (a_X) - BaseX;
@@ -154,6 +157,10 @@ float cNoise::CubicNoise2D( float a_X, float a_Y ) const
return CubicInterpolate( interp1, interp2, interp3, interp4, FracY );
}
+
+
+
+
#if NOISE_USE_SSE
float cNoise::SSE_CubicNoise2D( float a_X, float a_Y ) const
{
diff --git a/source/cNoise.h b/source/cNoise.h
index d4da677f3..a0283fc8d 100644
--- a/source/cNoise.h
+++ b/source/cNoise.h
@@ -6,15 +6,23 @@
// Do not touch
#if NOISE_USE_INLINE
-# define __NOISE_INLINE__ inline
+ #ifdef _MSC_VER
+ #define __NOISE_INLINE__ __forceinline
+ #else
+ #define __NOISE_INLINE__ inline
+ #endif // _MSC_VER
#else
-# define __NOISE_INLINE__
+ #define __NOISE_INLINE__
#endif
#if NOISE_USE_SSE
# include <emmintrin.h>
#endif
+
+
+
+
class cNoise
{
public:
@@ -55,6 +63,14 @@ private:
unsigned int m_Seed;
};
+
+
+
+
#if NOISE_USE_INLINE
# include "cNoise.inc"
#endif
+
+
+
+
diff --git a/source/cNoise.inc b/source/cNoise.inc
index a63bb0c2f..fd52fef37 100644
--- a/source/cNoise.inc
+++ b/source/cNoise.inc
@@ -36,7 +36,7 @@ float cNoise::CubicInterpolate( float a_A, float a_B, float a_C, float a_D, floa
float R = a_C - a_A;
float S = a_B;
- return P*(a_Pct*a_Pct*a_Pct) + Q*(a_Pct*a_Pct) + R*a_Pct + S;
+ return ((P * a_Pct + Q) * a_Pct + R) * a_Pct + S;
}
float cNoise::CosineInterpolate( float a_A, float a_B, float a_Pct ) const