@@ -55,10 +55,9 @@ extension Noise
55
55
struct PermutationTable
56
56
{
57
57
private
58
- let permut : [ UInt8 ] , // keep these small to minimize cache misses
59
- hashes : [ UInt8 ]
58
+ let permut : [ UInt8 ] // keep these small to minimize cache misses
60
59
61
- init ( range : Int , seed: Int )
60
+ init ( seed: Int )
62
61
{
63
62
var permutations : [ UInt8 ] = [ UInt8] ( 0 ... 255 ) ,
64
63
state128 : ( UInt32 , UInt32 , UInt32 , UInt32 ) = ( 1 , 0 , UInt32 ( extendingOrTruncating: seed >> 32 ) , UInt32 ( extendingOrTruncating: seed) )
@@ -77,25 +76,24 @@ struct PermutationTable
77
76
}
78
77
79
78
self . permut = permutations
80
- self . hashes = permutations. map { $0 % UInt8( range) }
81
79
}
82
80
83
81
func hash( _ n1: Int , _ n2: Int ) -> Int
84
82
{
85
- return Int ( self . hashes [ Int ( self . permut [ n1 & 255 ] ) ^ ( n2 & 255 ) ] )
83
+ return Int ( self . permut [ Int ( self . permut [ n1 & 255 ] ) ^ ( n2 & 255 ) ] )
86
84
}
87
85
88
86
func hash( _ n1: Int , _ n2: Int , _ n3: Int ) -> Int
89
87
{
90
- return Int ( self . hashes [ Int ( self . permut [ Int ( self . permut [ n1 & 255 ] ) ^ ( n2 & 255 ) ] ) ^ ( n3 & 255 ) ] )
88
+ return Int ( self . permut [ self . hash ( n1 , n2 ) ^ ( n3 & 255 ) ] )
91
89
}
92
90
}
93
91
94
92
protocol GradientNoise2D : Noise
95
93
{
96
94
var permutation_table : PermutationTable { get }
97
95
98
- static var gradient_table : [ ( Double , Double ) ] { get }
96
+ static var gradient_table16 : [ ( Double , Double ) ] { get }
99
97
static var radius : Double { get }
100
98
}
101
99
@@ -106,7 +104,7 @@ extension GradientNoise2D
106
104
let dr : Double = Self . radius - dx*dx - dy*dy
107
105
if dr > 0
108
106
{
109
- let gradient : ( Double , Double ) = Self . gradient_table [ self . permutation_table. hash ( u, v) ] ,
107
+ let gradient : ( Double , Double ) = Self . gradient_table16 [ self . permutation_table. hash ( u, v) & 15 ] ,
110
108
drdr : Double = dr * dr
111
109
return drdr * drdr * ( gradient. 0 * dx + gradient. 1 * dy)
112
110
}
@@ -121,7 +119,7 @@ protocol GradientNoise3D:Noise
121
119
{
122
120
var permutation_table : PermutationTable { get }
123
121
124
- static var gradient_table : [ ( Double , Double , Double ) ] { get }
122
+ static var gradient_table16 : [ ( Double , Double , Double ) ] { get }
125
123
}
126
124
127
125
extension GradientNoise3D
@@ -131,7 +129,7 @@ extension GradientNoise3D
131
129
let dr : Double = 0.75 - dx*dx - dy*dy - dz*dz
132
130
if dr > 0
133
131
{
134
- let gradient : ( Double , Double , Double ) = Self . gradient_table [ self . permutation_table. hash ( u, v, w) ] ,
132
+ let gradient : ( Double , Double , Double ) = Self . gradient_table16 [ self . permutation_table. hash ( u, v, w) & 15 ] ,
135
133
drdr : Double = dr * dr
136
134
return drdr * drdr * ( gradient. 0 * dx + gradient. 1 * dy + gradient. 2 * dz)
137
135
}
0 commit comments