diff options
| -rw-r--r-- | src/main.cc | 19 | 
1 files changed, 15 insertions, 4 deletions
| diff --git a/src/main.cc b/src/main.cc index 5604f3d..71fbc88 100644 --- a/src/main.cc +++ b/src/main.cc @@ -49,7 +49,18 @@ glm::mat4 getMVP(float world_width, float world_height) {  	return projection * view;  } -int setupGeometry(int x, int y) { +int setupPlainGeometry(int x, int y) { +	if ( x == 0 || y == 0 || x == nX-1 || y == nY-1 ) { +		return 0; // disable end of world +	} +	if (   ((x == 1 || x == nX-2) && (y > 0 && y < nY-1)) +	    || ((y == 1 || y == nY-2) && (x > 0 && x < nX-1)) ) { +		return 2; // bounce back outer walls +	} +	return 1; // everything else shall be bulk fluid +} + +int setupOpenGeometry(int x, int y) {  	if ( x == 0 || y == 0 || x == nX-1 || y == nY-1 ) {  		return 0; // disable end of world  	} @@ -68,7 +79,7 @@ int setupGeometry(int x, int y) {  	return 1; // everything else shall be bulk fluid  } -int renderWindow() { +int render(bool open_boundaries) {  	Window window("compustream");  	if ( !window.isGood() ) { @@ -97,7 +108,7 @@ int renderWindow() {  		lattice_a = std::make_unique<LatticeCellBuffer>(nX, nY);  		lattice_b = std::make_unique<LatticeCellBuffer>(nX, nY); -		fluid     = std::make_unique<  FluidCellBuffer>(nX, nY, setupGeometry); +		fluid     = std::make_unique<  FluidCellBuffer>(nX, nY, open_boundaries ? setupOpenGeometry : setupPlainGeometry);  		interact_shader = std::make_unique<ComputeShader>(INTERACT_SHADER_CODE);  		collide_shader  = std::make_unique<ComputeShader>(COLLIDE_SHADER_CODE); @@ -214,5 +225,5 @@ int main(int argc, char* argv[]) {  		return -1;  	} -	return renderWindow(); +	return render(std::string_view(argv[1]) == "--open");  } | 
