Compare commits
	
		
			No commits in common. "6afbbd7e2a2e03269d968745aba154cd7abf9bf5" and "fb81cc298299ed6f61ab210de59fb741abf1546d" have entirely different histories.
		
	
	
		
			6afbbd7e2a
			...
			fb81cc2982
		
	
		
| @ -40,8 +40,8 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity | |||||||
|   jobject this, |   jobject this, | ||||||
|   jint N, |   jint N, | ||||||
|   jint chunk_mask, |   jint chunk_mask, | ||||||
|   float ** d, |   jobjectArray jrx, | ||||||
|   float ** d0, |   jobjectArray jrx0, | ||||||
|   jobjectArray jru, |   jobjectArray jru, | ||||||
|   jobjectArray jrv, |   jobjectArray jrv, | ||||||
|   jobjectArray jrw, |   jobjectArray jrw, | ||||||
| @ -51,8 +51,8 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity | |||||||
|     float a=dt*DIFFUSION_CONST*N*N*N; |     float a=dt*DIFFUSION_CONST*N*N*N; | ||||||
|     float c=1+6*a; |     float c=1+6*a; | ||||||
|     int i, j, k, l, m; |     int i, j, k, l, m; | ||||||
|     float * x = GET_ARR_RAW(env,d,CENTER_LOC); |     float * x = GET_ARR(env,jrx,CENTER_LOC); | ||||||
|     float * x0 = GET_ARR_RAW(env,d0,CENTER_LOC); |     float * x0 = GET_ARR(env,jrx0,CENTER_LOC); | ||||||
|      |      | ||||||
|     __m256 aScalar = _mm256_set1_ps(a); |     __m256 aScalar = _mm256_set1_ps(a); | ||||||
|     __m256 cScalar = _mm256_set1_ps(c); |     __m256 cScalar = _mm256_set1_ps(c); | ||||||
|  | |||||||
| @ -700,6 +700,14 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( | |||||||
|             Chunk * currentChunk = chunks[i]; |             Chunk * currentChunk = chunks[i]; | ||||||
|             chunkJRaw = currentChunk->jchunk; |             chunkJRaw = currentChunk->jchunk; | ||||||
|             chunkMask = currentChunk->chunkMask; |             chunkMask = currentChunk->chunkMask; | ||||||
|  |             jd = currentChunk->jd; | ||||||
|  |             jd0 = currentChunk->jd0; | ||||||
|  |             u = currentChunk->ju; | ||||||
|  |             v = currentChunk->jv; | ||||||
|  |             w = currentChunk->jw; | ||||||
|  |             u0 = currentChunk->ju0; | ||||||
|  |             v0 = currentChunk->jv0; | ||||||
|  |             w0 = currentChunk->jw0; | ||||||
|             Java_electrosphere_FluidSim_addDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,timestep); |             Java_electrosphere_FluidSim_addDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,timestep); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -708,6 +716,23 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( | |||||||
|         //swap vector fields
 |         //swap vector fields
 | ||||||
|         for(int i = 0; i < numChunks; i++){ |         for(int i = 0; i < numChunks; i++){ | ||||||
|             Chunk * currentChunk = chunks[i]; |             Chunk * currentChunk = chunks[i]; | ||||||
|  |             chunkJRaw = currentChunk->jchunk; | ||||||
|  |             chunkMask = currentChunk->chunkMask; | ||||||
|  |             jd = currentChunk->jd; | ||||||
|  |             jd0 = currentChunk->jd0; | ||||||
|  |             u = currentChunk->ju; | ||||||
|  |             v = currentChunk->jv; | ||||||
|  |             w = currentChunk->jw; | ||||||
|  |             u0 = currentChunk->ju0; | ||||||
|  |             v0 = currentChunk->jv0; | ||||||
|  |             w0 = currentChunk->jw0; | ||||||
|  |             setBuffArr(dJId,jd0); | ||||||
|  |             setBuffArr(d0JId,jd); | ||||||
|  | 
 | ||||||
|  |             jobject tmpObj; | ||||||
|  |             tmpObj = currentChunk->jd; | ||||||
|  |             currentChunk->jd = currentChunk->jd0; | ||||||
|  |             currentChunk->jd0 = tmpObj; | ||||||
| 
 | 
 | ||||||
|             float * tmpArr; |             float * tmpArr; | ||||||
|             for(int j = 0; j < 27; j++){ |             for(int j = 0; j < 27; j++){ | ||||||
| @ -722,8 +747,14 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( | |||||||
|             chunkMask = currentChunk->chunkMask; |             chunkMask = currentChunk->chunkMask; | ||||||
|             jd = currentChunk->jd; |             jd = currentChunk->jd; | ||||||
|             jd0 = currentChunk->jd0; |             jd0 = currentChunk->jd0; | ||||||
|             copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,0,currentChunk->d); |             u = currentChunk->ju; | ||||||
|             copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,0,currentChunk->d0); |             v = currentChunk->jv; | ||||||
|  |             w = currentChunk->jw; | ||||||
|  |             u0 = currentChunk->ju0; | ||||||
|  |             v0 = currentChunk->jv0; | ||||||
|  |             w0 = currentChunk->jw0; | ||||||
|  |             Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,0,jd); | ||||||
|  |             Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,0,jd0); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     //diffuse density
 |     //diffuse density
 | ||||||
| @ -733,16 +764,29 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( | |||||||
|                 Chunk * currentChunk = chunks[i]; |                 Chunk * currentChunk = chunks[i]; | ||||||
|                 chunkJRaw = currentChunk->jchunk; |                 chunkJRaw = currentChunk->jchunk; | ||||||
|                 chunkMask = currentChunk->chunkMask; |                 chunkMask = currentChunk->chunkMask; | ||||||
|  |                 jd = currentChunk->jd; | ||||||
|  |                 jd0 = currentChunk->jd0; | ||||||
|                 u = currentChunk->ju; |                 u = currentChunk->ju; | ||||||
|                 v = currentChunk->jv; |                 v = currentChunk->jv; | ||||||
|                 w = currentChunk->jw; |                 w = currentChunk->jw; | ||||||
|                 Java_electrosphere_FluidSim_solveDiffuseDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); |                 u0 = currentChunk->ju0; | ||||||
|  |                 v0 = currentChunk->jv0; | ||||||
|  |                 w0 = currentChunk->jw0; | ||||||
|  |                 Java_electrosphere_FluidSim_solveDiffuseDensity(env,chunkJRaw,DIM,chunkMask,jd,jd0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); | ||||||
|             } |             } | ||||||
|             for(int i = 0; i < numChunks; i++){ |             for(int i = 0; i < numChunks; i++){ | ||||||
|                 Chunk * currentChunk = chunks[i]; |                 Chunk * currentChunk = chunks[i]; | ||||||
|                 chunkJRaw = currentChunk->jchunk; |                 chunkJRaw = currentChunk->jchunk; | ||||||
|                 chunkMask = currentChunk->chunkMask; |                 chunkMask = currentChunk->chunkMask; | ||||||
|                 setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,currentChunk->d); |                 jd = currentChunk->jd; | ||||||
|  |                 jd0 = currentChunk->jd0; | ||||||
|  |                 u = currentChunk->ju; | ||||||
|  |                 v = currentChunk->jv; | ||||||
|  |                 w = currentChunk->jw; | ||||||
|  |                 u0 = currentChunk->ju0; | ||||||
|  |                 v0 = currentChunk->jv0; | ||||||
|  |                 w0 = currentChunk->jw0; | ||||||
|  |                 Java_electrosphere_FluidSim_setBoundsToNeighbors(env,chunkJRaw,DIM,chunkMask,0,jd); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -751,6 +795,24 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( | |||||||
|         //swap vector fields
 |         //swap vector fields
 | ||||||
|         for(int i = 0; i < numChunks; i++){ |         for(int i = 0; i < numChunks; i++){ | ||||||
|             Chunk * currentChunk = chunks[i]; |             Chunk * currentChunk = chunks[i]; | ||||||
|  |             chunkJRaw = currentChunk->jchunk; | ||||||
|  |             chunkMask = currentChunk->chunkMask; | ||||||
|  |             jd = currentChunk->jd; | ||||||
|  |             jd0 = currentChunk->jd0; | ||||||
|  |             u = currentChunk->ju; | ||||||
|  |             v = currentChunk->jv; | ||||||
|  |             w = currentChunk->jw; | ||||||
|  |             u0 = currentChunk->ju0; | ||||||
|  |             v0 = currentChunk->jv0; | ||||||
|  |             w0 = currentChunk->jw0; | ||||||
|  |             setBuffArr(dJId,jd0); | ||||||
|  |             setBuffArr(d0JId,jd); | ||||||
|  | 
 | ||||||
|  |             jobject tmpObj; | ||||||
|  |             tmpObj = currentChunk->jd; | ||||||
|  |             currentChunk->jd = currentChunk->jd0; | ||||||
|  |             currentChunk->jd0 = tmpObj; | ||||||
|  | 
 | ||||||
|             float * tmpArr; |             float * tmpArr; | ||||||
|             for(int j = 0; j < 27; j++){ |             for(int j = 0; j < 27; j++){ | ||||||
|                 tmpArr = currentChunk->d[j]; |                 tmpArr = currentChunk->d[j]; | ||||||
| @ -762,8 +824,16 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( | |||||||
|             Chunk * currentChunk = chunks[i]; |             Chunk * currentChunk = chunks[i]; | ||||||
|             chunkJRaw = currentChunk->jchunk; |             chunkJRaw = currentChunk->jchunk; | ||||||
|             chunkMask = currentChunk->chunkMask; |             chunkMask = currentChunk->chunkMask; | ||||||
|             copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,0,currentChunk->d); |             jd = currentChunk->jd; | ||||||
|             copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,0,currentChunk->d0); |             jd0 = currentChunk->jd0; | ||||||
|  |             u = currentChunk->ju; | ||||||
|  |             v = currentChunk->jv; | ||||||
|  |             w = currentChunk->jw; | ||||||
|  |             u0 = currentChunk->ju0; | ||||||
|  |             v0 = currentChunk->jv0; | ||||||
|  |             w0 = currentChunk->jw0; | ||||||
|  |             Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,0,jd); | ||||||
|  |             Java_electrosphere_FluidSim_copyNeighbors(env,chunkJRaw,DIM,chunkMask,0,0,jd0); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     //advect density
 |     //advect density
 | ||||||
| @ -772,9 +842,14 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( | |||||||
|             Chunk * currentChunk = chunks[i]; |             Chunk * currentChunk = chunks[i]; | ||||||
|             chunkJRaw = currentChunk->jchunk; |             chunkJRaw = currentChunk->jchunk; | ||||||
|             chunkMask = currentChunk->chunkMask; |             chunkMask = currentChunk->chunkMask; | ||||||
|  |             jd = currentChunk->jd; | ||||||
|  |             jd0 = currentChunk->jd0; | ||||||
|             u = currentChunk->ju; |             u = currentChunk->ju; | ||||||
|             v = currentChunk->jv; |             v = currentChunk->jv; | ||||||
|             w = currentChunk->jw; |             w = currentChunk->jw; | ||||||
|  |             u0 = currentChunk->ju0; | ||||||
|  |             v0 = currentChunk->jv0; | ||||||
|  |             w0 = currentChunk->jw0; | ||||||
|             Java_electrosphere_FluidSim_advectDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); |             Java_electrosphere_FluidSim_advectDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -784,6 +859,14 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_simulate( | |||||||
|             Chunk * currentChunk = chunks[i]; |             Chunk * currentChunk = chunks[i]; | ||||||
|             chunkJRaw = currentChunk->jchunk; |             chunkJRaw = currentChunk->jchunk; | ||||||
|             chunkMask = currentChunk->chunkMask; |             chunkMask = currentChunk->chunkMask; | ||||||
|  |             jd = currentChunk->jd; | ||||||
|  |             jd0 = currentChunk->jd0; | ||||||
|  |             u = currentChunk->ju; | ||||||
|  |             v = currentChunk->jv; | ||||||
|  |             w = currentChunk->jw; | ||||||
|  |             u0 = currentChunk->ju0; | ||||||
|  |             v0 = currentChunk->jv0; | ||||||
|  |             w0 = currentChunk->jw0; | ||||||
|             setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,currentChunk->d); |             setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,currentChunk->d); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -73,7 +73,7 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_addDensity | |||||||
|  * Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V |  * Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V | ||||||
|  */ |  */ | ||||||
| JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity | JNIEXPORT void JNICALL Java_electrosphere_FluidSim_solveDiffuseDensity | ||||||
|   (JNIEnv *, jobject, jint, jint, float **, float **, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat); |   (JNIEnv *, jobject, jint, jint, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat); | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Class:     electrosphere_FluidSim |  * Class:     electrosphere_FluidSim | ||||||
| @ -107,13 +107,4 @@ JNIEXPORT void JNICALL setBoundsToNeighborsRaw | |||||||
| JNIEXPORT void JNICALL Java_electrosphere_FluidSim_copyNeighbors | JNIEXPORT void JNICALL Java_electrosphere_FluidSim_copyNeighbors | ||||||
|   (JNIEnv *, jobject, jint, jint, jint, jint, jobjectArray); |   (JNIEnv *, jobject, jint, jint, jint, jint, jobjectArray); | ||||||
| 
 | 
 | ||||||
| JNIEXPORT void JNICALL copyNeighborsRaw |  | ||||||
|   (JNIEnv * env, |  | ||||||
|   jobject this, |  | ||||||
|   jint N, |  | ||||||
|   jint chunk_mask, |  | ||||||
|   jint cx, |  | ||||||
|   jint vector_dir, |  | ||||||
|   float ** neighborArray); |  | ||||||
| 
 |  | ||||||
| #endif | #endif | ||||||
| @ -782,231 +782,6 @@ JNIEXPORT void JNICALL Java_electrosphere_FluidSim_setBoundsToNeighbors | |||||||
|     target[IX(DIM-1,DIM-1,DIM-1)] = (float)((target[IX(DIM-1,DIM-1,DIM-2)]+target[IX(DIM-1,DIM-2,DIM-1)]+target[IX(DIM-1,DIM-1,DIM-2)])/3.0); |     target[IX(DIM-1,DIM-1,DIM-1)] = (float)((target[IX(DIM-1,DIM-1,DIM-2)]+target[IX(DIM-1,DIM-2,DIM-1)]+target[IX(DIM-1,DIM-1,DIM-2)])/3.0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /**
 |  | ||||||
|  * This exclusively copies neighbors to make sure zeroing out stuff doesn't break sim |  | ||||||
| */ |  | ||||||
| JNIEXPORT void JNICALL copyNeighborsRaw |  | ||||||
|   (JNIEnv * env, |  | ||||||
|   jobject this, |  | ||||||
|   jint N, |  | ||||||
|   jint chunk_mask, |  | ||||||
|   jint cx, |  | ||||||
|   jint vector_dir, |  | ||||||
|   float ** neighborArray){ |  | ||||||
|     int DIM = N; |  | ||||||
|     float * target = GET_ARR_RAW(env,neighborArray,CENTER_LOC); |  | ||||||
|     float * source; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
|     //   PLANES
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,1,1)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,1,1)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|             for(int y = 1; y < DIM-1; y++){ |  | ||||||
|                 target[IX(0,x,y)] = source[IX(DIM-2,x,y)]; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,1,1)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,1,1)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|             for(int y = 1; y < DIM-1; y++){ |  | ||||||
|                 target[IX(DIM-1,x,y)] = source[IX(1,x,y)]; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,1,0,1)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(1,0,1)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|             for(int y = 1; y < DIM-1; y++){ |  | ||||||
|                 target[IX(x,0,y)] = source[IX(x,DIM-2,y)]; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,1,2,1)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(1,2,1)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|             for(int y = 1; y < DIM-1; y++){ |  | ||||||
|                 target[IX(x,DIM-1,y)] = source[IX(x,1,y)]; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,1,1,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(1,1,0)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|             for(int y = 1; y < DIM-1; y++){ |  | ||||||
|                 target[IX(x,y,0)] = source[IX(x,y,DIM-2)]; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,1,1,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(1,1,2)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|             for(int y = 1; y < DIM-1; y++){ |  | ||||||
|                 target[IX(x,y,DIM-1)] = source[IX(x,y,1)]; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
|     //    EDGES
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,0,1)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,0,1)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(0,0,x)] = source[IX(DIM-2,DIM-2,x)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,0,1)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,0,1)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(DIM-1,0,x)] = source[IX(1,DIM-2,x)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,2,1)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,2,1)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(0,DIM-1,x)] = source[IX(DIM-2,1,x)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,2,1)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,2,1)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(DIM-1,DIM-1,x)] = source[IX(1,1,x)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,1,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,1,0)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(0,x,0)] = source[IX(DIM-2,x,DIM-2)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,1,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,1,0)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(DIM-1,x,0)] = source[IX(1,x,DIM-2)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,1,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,1,2)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(0,x,DIM-1)] = source[IX(DIM-2,x,1)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,1,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,1,2)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(DIM-1,x,DIM-1)] = source[IX(1,x,1)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,1,0,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(1,0,0)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(x,0,0)] = source[IX(x,DIM-2,DIM-2)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,1,2,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(1,2,0)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(x,DIM-1,0)] = source[IX(x,1,DIM-2)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,1,0,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(1,0,2)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(x,0,DIM-1)] = source[IX(x,DIM-2,1)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,1,2,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(1,2,2)); |  | ||||||
|         for(int x=1; x < DIM-1; x++){ |  | ||||||
|                 target[IX(x,DIM-1,DIM-1)] = source[IX(x,1,1)]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
|     //     CORNERS
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,0,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,0,0)); |  | ||||||
|         target[IX(0,0,0)] = source[IX(DIM-2,DIM-2,DIM-2)]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,0,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,0,0)); |  | ||||||
|         target[IX(DIM-1,0,0)] = source[IX(1,DIM-2,DIM-2)]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,2,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,2,0)); |  | ||||||
|         target[IX(0,DIM-1,0)] = source[IX(DIM-2,1,DIM-2)]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,2,0)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,2,0)); |  | ||||||
|         target[IX(DIM-1,DIM-1,0)] = source[IX(1,1,DIM-2)]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     //
 |  | ||||||
|     //
 |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,0,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,0,2)); |  | ||||||
|         target[IX(0,0,DIM-1)] = source[IX(DIM-2,DIM-2,1)]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,0,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,0,2)); |  | ||||||
|         target[IX(DIM-1,0,DIM-1)] = source[IX(1,DIM-2,1)]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,0,2,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(0,2,2)); |  | ||||||
|         target[IX(0,DIM-1,DIM-1)] = source[IX(DIM-2,1,1)]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if(ARR_EXISTS(chunk_mask,2,2,2)){ |  | ||||||
|         source = GET_ARR_RAW(env,neighborArray,CK(2,2,2)); |  | ||||||
|         target[IX(DIM-1,DIM-1,DIM-1)] = source[IX(1,1,1)]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /**
 | /**
 | ||||||
|  * This exclusively copies neighbors to make sure zeroing out stuff doesn't break sim |  * This exclusively copies neighbors to make sure zeroing out stuff doesn't break sim | ||||||
| */ | */ | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user