reintroduce sleep
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2024-12-07 16:29:40 -05:00
parent 6ee0a1b2c5
commit 1c73c2d5ea
2 changed files with 31 additions and 30 deletions

View File

@ -1270,6 +1270,7 @@ Frame tracking on native side
Fix memory leak in client fluid data chunks
Work on cellular sim determinism
More cellular determinism verification
reintroduce sleeping code
# TODO

View File

@ -43,49 +43,49 @@ void updateMetadata(JNIEnv * env, int numChunks, Chunk ** passedInChunks, Enviro
}
//get whether the chunk is currently homogenous or not
int homogenous = sum <= 0 ? JNI_TRUE : JNI_FALSE;
// (*env)->SetBooleanField(env,jObj,environment->lookupTable.serverFluidChunkTable.homogenousId,homogenous);
(*env)->SetBooleanField(env,jObj,environment->lookupTable.serverFluidChunkTable.homogenousId,JNI_FALSE);
(*env)->SetBooleanField(env,jObj,environment->lookupTable.serverFluidChunkTable.homogenousId,homogenous);
// (*env)->SetBooleanField(env,jObj,environment->lookupTable.serverFluidChunkTable.homogenousId,JNI_FALSE);
//update total density
(*env)->SetFloatField(env,jObj,totalDensityId,sum);
//check if any neighbor is non-homogenous
// jobject neighborArr = (*env)->GetObjectField(env,jObj,environment->lookupTable.serverFluidChunkTable.neighborsId);
// int nonHomogenousNeighbor = JNI_FALSE;
// for(int j = 0; j < NEIGHBOR_ARRAY_COUNT; j++){
// if(j == CENTER_LOC){
// continue;
// }
// jobject neighborObj = (*env)->GetObjectArrayElement(env,neighborArr,j);
// if(neighborObj != NULL){
// int neighborHomogenous = (*env)->GetBooleanField(env,neighborObj,environment->lookupTable.serverFluidChunkTable.homogenousId);
// if(neighborHomogenous == JNI_FALSE){
// nonHomogenousNeighbor = JNI_TRUE;
// break;
// }
// }
// }
jobject neighborArr = (*env)->GetObjectField(env,jObj,environment->lookupTable.serverFluidChunkTable.neighborsId);
int nonHomogenousNeighbor = JNI_FALSE;
for(int j = 0; j < NEIGHBOR_ARRAY_COUNT; j++){
if(j == CENTER_LOC){
continue;
}
jobject neighborObj = (*env)->GetObjectArrayElement(env,neighborArr,j);
if(neighborObj != NULL){
int neighborHomogenous = (*env)->GetBooleanField(env,neighborObj,environment->lookupTable.serverFluidChunkTable.homogenousId);
if(neighborHomogenous == JNI_FALSE){
nonHomogenousNeighbor = JNI_TRUE;
break;
}
}
}
//figure out if this chunk should sleep or not
int shouldSleep = JNI_TRUE;
// if(nonHomogenousNeighbor == JNI_TRUE || homogenous == JNI_FALSE){
if(nonHomogenousNeighbor == JNI_TRUE || homogenous == JNI_FALSE){
shouldSleep = JNI_FALSE;
// }
}
(*env)->SetBooleanField(env,jObj,environment->lookupTable.serverFluidChunkTable.asleepId,shouldSleep);
//if this cell is awake AND non-homogenous, make sure all neighbors are awake
// if(shouldSleep == JNI_FALSE && homogenous == JNI_FALSE){
if(shouldSleep == JNI_FALSE && homogenous == JNI_FALSE){
(*env)->SetBooleanField(env,jObj,updatedId,JNI_TRUE);
// for(int j = 0; j < NEIGHBOR_ARRAY_COUNT; j++){
// if(j == CENTER_LOC){
// continue;
// }
// jobject neighborObj = (*env)->GetObjectArrayElement(env,neighborArr,j);
// if(neighborObj != NULL){
// (*env)->SetBooleanField(env,neighborObj,environment->lookupTable.serverFluidChunkTable.asleepId,JNI_FALSE);
// }
// }
// }
for(int j = 0; j < NEIGHBOR_ARRAY_COUNT; j++){
if(j == CENTER_LOC){
continue;
}
jobject neighborObj = (*env)->GetObjectArrayElement(env,neighborArr,j);
if(neighborObj != NULL){
(*env)->SetBooleanField(env,neighborObj,environment->lookupTable.serverFluidChunkTable.asleepId,JNI_FALSE);
}
}
}
}
//alert java side to updated static values