Compare commits
3 Commits
fb81cc2982
...
6afbbd7e2a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6afbbd7e2a | ||
|
|
6b585b367b | ||
|
|
085cd18fdf |
@ -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,
|
||||||
jobjectArray jrx,
|
float ** d,
|
||||||
jobjectArray jrx0,
|
float ** d0,
|
||||||
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(env,jrx,CENTER_LOC);
|
float * x = GET_ARR_RAW(env,d,CENTER_LOC);
|
||||||
float * x0 = GET_ARR(env,jrx0,CENTER_LOC);
|
float * x0 = GET_ARR_RAW(env,d0,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,14 +700,6 @@ 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -716,23 +708,6 @@ 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++){
|
||||||
@ -747,14 +722,8 @@ 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;
|
||||||
u = currentChunk->ju;
|
copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,0,currentChunk->d);
|
||||||
v = currentChunk->jv;
|
copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,0,currentChunk->d0);
|
||||||
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
|
||||||
@ -764,29 +733,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;
|
||||||
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;
|
Java_electrosphere_FluidSim_solveDiffuseDensity(env,chunkJRaw,DIM,chunkMask,currentChunk->d,currentChunk->d0,u,v,w,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
|
||||||
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;
|
||||||
jd = currentChunk->jd;
|
setBoundsToNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,currentChunk->d);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -795,24 +751,6 @@ 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];
|
||||||
@ -824,16 +762,8 @@ 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;
|
copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,0,currentChunk->d);
|
||||||
jd0 = currentChunk->jd0;
|
copyNeighborsRaw(env,chunkJRaw,DIM,chunkMask,0,0,currentChunk->d0);
|
||||||
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
|
||||||
@ -842,14 +772,9 @@ 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -859,14 +784,6 @@ 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, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
(JNIEnv *, jobject, jint, jint, float **, float **, jobjectArray, jobjectArray, jobjectArray, jfloat, jfloat, jfloat);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: electrosphere_FluidSim
|
* Class: electrosphere_FluidSim
|
||||||
@ -107,4 +107,13 @@ 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,6 +782,231 @@ 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