Fluid-Simulation-Monochrome/src/defines.h

85 lines
1.6 KiB
C

#ifndef DEFINES_H
#define DEFINES_H
// Fixed Point
typedef int fix;
#define DB 16
#define FIX(x) ((x)<<DB) // int to fixed
#define FFIX(x) ((x)*(1<<DB)) // float to fixed
#define UNFIX(x) ((x)>>DB) // fixed to int
fix fmul(fix x, fix y) {
int64_t p = (int64_t)x * (int64_t)y;
return (int32_t)(p >> DB);
}
fix ffrac(fix f) {
return f & ((1 << DB) - 1);
}
float fixtof(fix f) {
return ((float)f)/(1<<DB);
}
// 64x64 simulation
#define W 64//29
#define H 64//19
#define ID(x, y) ((x) + (y) * W)
#define fH (float)H
#define MAX_X FIX(W - 1)
#define MAX_Y FIX(H - 1)
#define rdx FIX(H/2)
#define dx FFIX(1./(fH/2.))
#define dtRdx fmul(dt, rdx)
#define halfRdx rdx/2
#define alpha fmul(-ONE, fmul(dx, dx))
#define alphaHalfRdx fmul(alpha, halfRdx)
// 128x64 simulation
#define W2 128
#define ID2(x, y) ((x) + (y) * W2)
#define MAX_X2 FIX(W2 - 1)
// Global Defines
#define ONE FIX(1)
#define ONE_HALF ONE/2
#define dt FFIX(1./14.)
#define PREC_STEP FFIX(0.001)
#define swap(a, b) { fix *tmp=a; a=b; b=tmp; }
#define div tx
#define p ty
#define K_RESET KEY_DEL
#define K_PARAMS KEY_SHIFT
#define K_COLORS KEY_ALPHA
#define K_FPS KEY_MUL
#define K_HELP KEY_OPTN
fix radius = FIX(4);
fix dyeDiffusion = FFIX(0.999);
fix velDiffusion = FFIX(1);
fix dyeIntensity = FFIX(0.5);
fix velIntensity = FFIX(0.5);
const fix maxDyeIntensity = FIX(4);
fix emptyTreshold = FFIX(0.4);
fix saturateTreshold = FFIX(0.8);
int pressureIterations = 10;
fix *vx, *vy, *dye, *tx, *ty, *tz;
int addX, addY;
int currentView = 0; // 0 : simulation only, 1 : simulation + parameters, 2 : simulation + color settings
#endif // DEFINES_H