conditional fluid chunk rasterization
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
ba7884363d
commit
d8eaf7f501
@ -1213,6 +1213,7 @@ Fix fluid chunk indexing from java side
|
||||
Memory pooling for chunk buffer allocations
|
||||
Server homogenous fluid chunk declarations
|
||||
Unsleeping fluid chunks on edit
|
||||
Conditionally rasterize fluid chunks based on homogeneity
|
||||
|
||||
|
||||
|
||||
|
||||
@ -65,12 +65,13 @@ public class FluidCell {
|
||||
Globals.clientScene.deregisterEntity(modelEntity);
|
||||
}
|
||||
|
||||
fillInData();
|
||||
|
||||
FluidChunkData currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos);
|
||||
if(!currentChunk.isHomogenous()){
|
||||
this.fillInData(currentChunk);
|
||||
modelEntity = FluidChunk.clientCreateFluidChunkEntity(weights);
|
||||
|
||||
ClientEntityUtils.initiallyPositionEntity(modelEntity, getRealPos(), new Quaterniond());
|
||||
}
|
||||
}
|
||||
|
||||
protected Vector3d getRealPos(){
|
||||
return new Vector3d(
|
||||
@ -85,12 +86,14 @@ public class FluidCell {
|
||||
*/
|
||||
public void destroy(){
|
||||
CollisionEngine collisionEngine = Globals.clientSceneWrapper.getCollisionEngine();
|
||||
if(modelEntity != null){
|
||||
collisionEngine.destroyPhysics(modelEntity);
|
||||
ClientEntityUtils.destroyEntity(modelEntity);
|
||||
//destruct model
|
||||
String modelPath = (String)modelEntity.getData(EntityDataStrings.DATA_STRING_MODEL_PATH);
|
||||
Globals.assetManager.deregisterModelPath(modelPath);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current chunk data for this draw cell
|
||||
@ -103,13 +106,12 @@ public class FluidCell {
|
||||
/**
|
||||
* Fills in the internal arrays of data for generate terrain models
|
||||
*/
|
||||
private void fillInData(){
|
||||
private void fillInData(FluidChunkData currentChunk){
|
||||
|
||||
//
|
||||
//fill in data
|
||||
//
|
||||
//main chunk
|
||||
FluidChunkData currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos);
|
||||
if(!currentChunk.isHomogenous()){
|
||||
for(int x = ServerFluidChunk.TRUE_DATA_OFFSET; x < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; x++){
|
||||
for(int y = ServerFluidChunk.TRUE_DATA_OFFSET; y < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; y++){
|
||||
@ -119,149 +121,6 @@ public class FluidCell {
|
||||
}
|
||||
}
|
||||
}
|
||||
// //face X
|
||||
// if(worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y, worldPos.z);
|
||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = currentChunk.getWeight(0, i, j);
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// //face Y
|
||||
// if(worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y + 1, worldPos.z);
|
||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = currentChunk.getWeight(i, 0, j);
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// //face Z
|
||||
// if(worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z + 1);
|
||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(i, j, 0);
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// //edge X-Y
|
||||
// if(
|
||||
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
// ){
|
||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y + 1, worldPos.z);
|
||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = currentChunk.getWeight(0, 0, i);
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// //edge X-Z
|
||||
// if(
|
||||
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
// ){
|
||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y, worldPos.z + 1);
|
||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(0, i, 0);
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// //edge Y-Z
|
||||
// if(
|
||||
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
// ){
|
||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y + 1, worldPos.z + 1);
|
||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(i, 0, 0);
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// }
|
||||
// if(
|
||||
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
// ){
|
||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y + 1, worldPos.z + 1);
|
||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(0, 0, 0);
|
||||
// } else {
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
// } else {
|
||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||
// }
|
||||
|
||||
//now set neighboring air weights based on nearby fluid count
|
||||
//idea being that we dont have the snapping behavior from iso surface jumping from -1->0.01
|
||||
|
||||
Loading…
Reference in New Issue
Block a user