Fix native bounds setting bug
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good

This commit is contained in:
austin 2024-12-06 19:05:33 -05:00
parent 878f839f65
commit d3f545955f
8 changed files with 43 additions and 5 deletions

View File

@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
#Fri Dec 06 16:10:07 EST 2024
buildNumber=534
#Fri Dec 06 19:03:01 EST 2024
buildNumber=558

View File

@ -14,6 +14,11 @@
*/
#define BOUND_MIN_VALUE 0
/**
* Maximum value of bounds array for it to be considered a blocker
*/
#define BOUND_MAX_VALUE 1
/**
* The dimension of a single chunk's array
*/

View File

@ -7,7 +7,7 @@
void fluid_solve_bounds_checker(float ** arrays){
static inline void fluid_solve_bounds_checker(float ** arrays){
int i, j;
int neighborIndex;
//x+ face

View File

@ -8,6 +8,7 @@
//local includes
#include "fluid/queue/chunk.h"
#include "fluid/queue/chunkmask.h"
#include "fluid/queue/boundsolver.h"
#include "fluid/queue/metadatacalc.h"
#include "fluid/env/environment.h"
#include "fluid/env/utilities.h"
@ -57,6 +58,7 @@ JNIEXPORT void JNICALL Java_electrosphere_server_fluid_simulator_FluidAccelerate
){
environment->consts.dt = dt;
int numReadIn = readInChunks(env,chunkList,environment);
fluid_solve_bounds(numReadIn,chunkViewC,environment);
fluid_dispatch(numReadIn,chunkViewC,environment);
fluid_simulate(environment);
updateMetadata(env,numReadIn,chunkViewC,environment);
@ -237,6 +239,16 @@ int readInChunks(JNIEnv * env, jobject chunkList, Environment * environment){
newChunk->v0[j] = getArray(env,v0,j);
newChunk->w0[j] = getArray(env,w0,j);
newChunk->bounds[j] = getArray(env,bounds,j);
} else {
newChunk->d[j] = NULL;
newChunk->d0[j] = NULL;
newChunk->u[j] = NULL;
newChunk->v[j] = NULL;
newChunk->w[j] = NULL;
newChunk->u0[j] = NULL;
newChunk->v0[j] = NULL;
newChunk->w0[j] = NULL;
newChunk->bounds[j] = NULL;
}
}
}

View File

@ -29,7 +29,7 @@ LIBRARY_API void fluid_cellular_simulate(Environment * environment){
continue;
} else {
//transfer straight down
if(bounds[IX(x,y-1,z)] <= BOUND_MIN_VALUE){
if(bounds[IX(x,y-1,z)] < BOUND_MIN_VALUE){
int deltaLower = MAX_VALUE - d[IX(x,y-1,z)];
if(deltaLower > 0){
int transferLower;

View File

@ -109,6 +109,8 @@ void allocateCenterField(JNIEnv * env, jobject fluidObj, jfieldID arrFieldId){
if (byteBuffer == NULL) {
// Handle ByteBuffer creation failure
pool_return(centerArrPool, buffer);
jobject jd = (*env)->GetObjectField(env,fluidObj,arrFieldId);
(*env)->SetObjectArrayElement(env,jd,CENTER_POS,NULL);
return;
}
@ -208,6 +210,7 @@ void allocateField(JNIEnv * env, jobject fluidObj, jfieldID arrFieldId){
if (byteBuffer == NULL) {
// Handle ByteBuffer creation failure
pool_return(fieldPool,buffer);
(*env)->SetObjectField(env,fluidObj,arrFieldId,NULL);
return;
}

View File

@ -1,4 +1,5 @@
#include<stdlib.h>
#include <stdio.h>
//Libraries
#include "../../lib/stb/stb_ds.h"
@ -26,14 +27,20 @@ POOL * pool_create(int blockSize){
* @return The block of memory
*/
void * pool_get(POOL * pool){
void * rVal;
pool->posCurr++;
if(pool->posCurr >= pool->posMax){
//allocate a new block
void * newBlock = (void *)calloc(1,pool->blockSize);
if(newBlock == NULL){
pool->posCurr--;
return NULL;
}
stbds_arrput(pool->table,newBlock);
pool->posMax++;
}
return pool->table[pool->posCurr - 1];
rVal = pool->table[pool->posCurr - 1];
return rVal;
}
/**

View File

@ -545,6 +545,17 @@ public class ServerFluidChunk {
*/
public void freeBuffers(){
this.free();
for(int i = 0; i < 27; i++){
bWeights[i] = null;
b0Weights[i] = null;
bVelocityX[i] = null;
bVelocityY[i] = null;
bVelocityZ[i] = null;
b0VelocityX[i] = null;
b0VelocityY[i] = null;
b0VelocityZ[i] = null;
bBounds[i] = null;
}
}
/**