43 static float nextfr(
RNG *rng,
float min,
float max)
48 static float gaussRand(
RNG *rng)
58 x = (
float)(nextfr(rng, -1, 1));
59 y = (
float)(nextfr(rng, -1, 1));
69 MINLINE float catrom(
float p0,
float p1,
float p2,
float p3,
float f)
71 return 0.5f * ((2.0f * p1) + (-p0 + p2) * f + (2.0f * p0 - 5.0f * p1 + 4.0f * p2 - p3) * f * f +
72 (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * f * f * f);
75 MINLINE float omega(
float k,
float depth)
81 static float Ph(
struct Ocean *o,
float kx,
float kz)
84 float k2 = kx * kx + kz * kz;
91 tmp = (o->_wx * kx + o->_wz * kz) /
sqrtf(k2);
93 tmp *= o->_damp_reflections;
96 return o->_A *
expf(-1.0f / (k2 * (o->_L * o->_L))) *
expf(-k2 * (o->_l * o->_l)) *
97 powf(
fabsf(tmp), o->_wind_alignment) / (k2 * k2);
100 static void compute_eigenstuff(
struct OceanResult *ocr,
float jxx,
float jzz,
float jxz)
102 float a,
b, qplus, qminus;
104 b =
sqrt((jxx - jzz) * (jxx - jzz) + 4 * jxz * jxz);
109 qplus = (ocr->
Jplus - jxx) / jxz;
110 qminus = (ocr->
Jminus - jxx) / jxz;
112 a =
sqrt(1 + qplus * qplus);
113 b =
sqrt(1 + qminus * qminus);
116 ocr->
Eplus[1] = 0.0f;
117 ocr->
Eplus[2] = qplus /
a;
129 static void init_complex(fftw_complex cmpl,
float real,
float image)
135 static void add_comlex_c(fftw_complex res,
const fftw_complex cmpl1,
const fftw_complex cmpl2)
137 res[0] = cmpl1[0] + cmpl2[0];
138 res[1] = cmpl1[1] + cmpl2[1];
141 static void mul_complex_f(fftw_complex res,
const fftw_complex cmpl,
float f)
143 res[0] = cmpl[0] * (
double)f;
144 res[1] = cmpl[1] * (
double)f;
147 static void mul_complex_c(fftw_complex res,
const fftw_complex cmpl1,
const fftw_complex cmpl2)
150 temp[0] = cmpl1[0] * cmpl2[0] - cmpl1[1] * cmpl2[1];
151 temp[1] = cmpl1[0] * cmpl2[1] + cmpl1[1] * cmpl2[0];
156 static float real_c(fftw_complex cmpl)
161 static float image_c(fftw_complex cmpl)
166 static void conj_complex(fftw_complex res,
const fftw_complex cmpl1)
172 static void exp_complex(fftw_complex res, fftw_complex cmpl)
174 float r =
expf(cmpl[0]);
176 res[0] =
cosf(cmpl[1]) *
r;
177 res[1] =
sinf(cmpl[1]) *
r;
182 float foam = jminus * -0.005f + coverage;
183 CLAMP(foam, 0.0f, 1.0f);
190 float frac_x, frac_z;
225 (interpf(interpf(m[i1 * oc->_N + j1], m[i0 * oc->_N + j1], frac_x), \
226 interpf(m[i1 * oc->_N + j0], m[i0 * oc->_N + j0], frac_x), \
230 if (oc->_do_disp_y) {
231 ocr->
disp[1] = BILERP(oc->_disp_y);
234 if (oc->_do_normals) {
235 ocr->
normal[0] = BILERP(oc->_N_x);
236 ocr->
normal[1] = oc->_N_y ;
237 ocr->
normal[2] = BILERP(oc->_N_z);
241 ocr->
disp[0] = BILERP(oc->_disp_x);
242 ocr->
disp[2] = BILERP(oc->_disp_z);
249 if (oc->_do_jacobian) {
250 compute_eigenstuff(ocr, BILERP(oc->_Jxx), BILERP(oc->_Jzz), BILERP(oc->_Jxz));
260 int i0,
i1, i2, i3, j0, j1, j2, j3;
261 float frac_x, frac_z;
297 i0 = i0 < 0 ? i0 + oc->_M : i0;
298 i3 = i3 >= oc->_M ? i3 - oc->_M : i3;
302 j0 = j0 < 0 ? j0 + oc->_N : j0;
303 j3 = j3 >= oc->_N ? j3 - oc->_N : j3;
306 catrom(catrom(m[i0 * oc->_N + j0], \
307 m[i1 * oc->_N + j0], \
308 m[i2 * oc->_N + j0], \
309 m[i3 * oc->_N + j0], \
311 catrom(m[i0 * oc->_N + j1], \
312 m[i1 * oc->_N + j1], \
313 m[i2 * oc->_N + j1], \
314 m[i3 * oc->_N + j1], \
316 catrom(m[i0 * oc->_N + j2], \
317 m[i1 * oc->_N + j2], \
318 m[i2 * oc->_N + j2], \
319 m[i3 * oc->_N + j2], \
321 catrom(m[i0 * oc->_N + j3], \
322 m[i1 * oc->_N + j3], \
323 m[i2 * oc->_N + j3], \
324 m[i3 * oc->_N + j3], \
329 if (oc->_do_disp_y) {
330 ocr->
disp[1] = INTERP(oc->_disp_y);
332 if (oc->_do_normals) {
333 ocr->
normal[0] = INTERP(oc->_N_x);
334 ocr->
normal[1] = oc->_N_y ;
335 ocr->
normal[2] = INTERP(oc->_N_z);
338 ocr->
disp[0] = INTERP(oc->_disp_x);
339 ocr->
disp[2] = INTERP(oc->_disp_z);
346 if (oc->_do_jacobian) {
347 compute_eigenstuff(ocr, INTERP(oc->_Jxx), INTERP(oc->_Jzz), INTERP(oc->_Jxz));
372 ocr->
disp[1] = oc->_do_disp_y ? (
float)oc->_disp_y[i * oc->_N + j] : 0.0f;
375 ocr->
disp[0] = oc->_disp_x[i * oc->_N + j];
376 ocr->
disp[2] = oc->_disp_z[i * oc->_N + j];
383 if (oc->_do_normals) {
384 ocr->
normal[0] = oc->_N_x[i * oc->_N + j];
385 ocr->
normal[1] = oc->_N_y ;
386 ocr->
normal[2] = oc->_N_z[i * oc->_N + j];
391 if (oc->_do_jacobian) {
393 ocr, oc->_Jxx[i * oc->_N + j], oc->_Jzz[i * oc->_N + j], oc->_Jxz[i * oc->_N + j]);
399 typedef struct OceanSimulateData {
406 static void ocean_compute_htilda(
void *__restrict userdata,
410 OceanSimulateData *osd = userdata;
411 const Ocean *o = osd->o;
412 const float scale = osd->scale;
413 const float t = osd->t;
419 for (j = 0; j <= o->_N / 2; j++) {
420 fftw_complex exp_param1;
421 fftw_complex exp_param2;
422 fftw_complex conj_param;
424 init_complex(exp_param1, 0.0, omega(o->_k[i * (1 + o->_N / 2) + j], o->_depth) *
t);
425 init_complex(exp_param2, 0.0, -omega(o->_k[i * (1 + o->_N / 2) + j], o->_depth) *
t);
426 exp_complex(exp_param1, exp_param1);
427 exp_complex(exp_param2, exp_param2);
428 conj_complex(conj_param, o->_h0_minus[i * o->_N + j]);
430 mul_complex_c(exp_param1, o->_h0[i * o->_N + j], exp_param1);
431 mul_complex_c(exp_param2, conj_param, exp_param2);
433 add_comlex_c(o->_htilda[i * (1 + o->_N / 2) + j], exp_param1, exp_param2);
434 mul_complex_f(o->_fft_in[i * (1 + o->_N / 2) + j], o->_htilda[i * (1 + o->_N / 2) + j], scale);
438 static void ocean_compute_displacement_y(
TaskPool *__restrict
pool,
void *
UNUSED(taskdata))
441 const Ocean *o = osd->o;
443 fftw_execute(o->_disp_y_plan);
446 static void ocean_compute_displacement_x(
TaskPool *__restrict
pool,
void *
UNUSED(taskdata))
449 const Ocean *o = osd->o;
450 const float scale = osd->scale;
451 const float chop_amount = osd->chop_amount;
454 for (i = 0; i < o->_M; i++) {
455 for (j = 0; j <= o->_N / 2; j++) {
456 fftw_complex mul_param;
457 fftw_complex minus_i;
459 init_complex(minus_i, 0.0, -1.0);
460 init_complex(mul_param, -scale, 0);
461 mul_complex_f(mul_param, mul_param, chop_amount);
462 mul_complex_c(mul_param, mul_param, minus_i);
463 mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
464 mul_complex_f(mul_param,
466 ((o->_k[i * (1 + o->_N / 2) + j] == 0.0f) ?
468 o->_kx[i] / o->_k[i * (1 + o->_N / 2) + j]));
469 init_complex(o->_fft_in_x[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
472 fftw_execute(o->_disp_x_plan);
475 static void ocean_compute_displacement_z(
TaskPool *__restrict
pool,
void *
UNUSED(taskdata))
478 const Ocean *o = osd->o;
479 const float scale = osd->scale;
480 const float chop_amount = osd->chop_amount;
483 for (i = 0; i < o->_M; i++) {
484 for (j = 0; j <= o->_N / 2; j++) {
485 fftw_complex mul_param;
486 fftw_complex minus_i;
488 init_complex(minus_i, 0.0, -1.0);
489 init_complex(mul_param, -scale, 0);
490 mul_complex_f(mul_param, mul_param, chop_amount);
491 mul_complex_c(mul_param, mul_param, minus_i);
492 mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
493 mul_complex_f(mul_param,
495 ((o->_k[i * (1 + o->_N / 2) + j] == 0.0f) ?
497 o->_kz[j] / o->_k[i * (1 + o->_N / 2) + j]));
498 init_complex(o->_fft_in_z[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
501 fftw_execute(o->_disp_z_plan);
504 static void ocean_compute_jacobian_jxx(
TaskPool *__restrict
pool,
void *
UNUSED(taskdata))
507 const Ocean *o = osd->o;
508 const float chop_amount = osd->chop_amount;
511 for (i = 0; i < o->_M; i++) {
512 for (j = 0; j <= o->_N / 2; j++) {
513 fftw_complex mul_param;
516 init_complex(mul_param, -1, 0);
518 mul_complex_f(mul_param, mul_param, chop_amount);
519 mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
520 mul_complex_f(mul_param,
522 ((o->_k[i * (1 + o->_N / 2) + j] == 0.0f) ?
524 o->_kx[i] * o->_kx[i] / o->_k[i * (1 + o->_N / 2) + j]));
525 init_complex(o->_fft_in_jxx[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
528 fftw_execute(o->_Jxx_plan);
530 for (i = 0; i < o->_M; i++) {
531 for (j = 0; j < o->_N; j++) {
532 o->_Jxx[i * o->_N + j] += 1.0;
537 static void ocean_compute_jacobian_jzz(
TaskPool *__restrict
pool,
void *
UNUSED(taskdata))
540 const Ocean *o = osd->o;
541 const float chop_amount = osd->chop_amount;
544 for (i = 0; i < o->_M; i++) {
545 for (j = 0; j <= o->_N / 2; j++) {
546 fftw_complex mul_param;
549 init_complex(mul_param, -1, 0);
551 mul_complex_f(mul_param, mul_param, chop_amount);
552 mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
553 mul_complex_f(mul_param,
555 ((o->_k[i * (1 + o->_N / 2) + j] == 0.0f) ?
557 o->_kz[j] * o->_kz[j] / o->_k[i * (1 + o->_N / 2) + j]));
558 init_complex(o->_fft_in_jzz[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
561 fftw_execute(o->_Jzz_plan);
563 for (i = 0; i < o->_M; i++) {
564 for (j = 0; j < o->_N; j++) {
565 o->_Jzz[i * o->_N + j] += 1.0;
570 static void ocean_compute_jacobian_jxz(
TaskPool *__restrict
pool,
void *
UNUSED(taskdata))
573 const Ocean *o = osd->o;
574 const float chop_amount = osd->chop_amount;
577 for (i = 0; i < o->_M; i++) {
578 for (j = 0; j <= o->_N / 2; j++) {
579 fftw_complex mul_param;
582 init_complex(mul_param, -1, 0);
584 mul_complex_f(mul_param, mul_param, chop_amount);
585 mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
586 mul_complex_f(mul_param,
588 ((o->_k[i * (1 + o->_N / 2) + j] == 0.0f) ?
590 o->_kx[i] * o->_kz[j] / o->_k[i * (1 + o->_N / 2) + j]));
591 init_complex(o->_fft_in_jxz[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
594 fftw_execute(o->_Jxz_plan);
600 const Ocean *o = osd->o;
603 for (i = 0; i < o->_M; i++) {
604 for (j = 0; j <= o->_N / 2; j++) {
605 fftw_complex mul_param;
607 init_complex(mul_param, 0.0, -1.0);
608 mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
609 mul_complex_f(mul_param, mul_param, o->_kx[i]);
610 init_complex(o->_fft_in_nx[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
613 fftw_execute(o->_N_x_plan);
619 const Ocean *o = osd->o;
622 for (i = 0; i < o->_M; i++) {
623 for (j = 0; j <= o->_N / 2; j++) {
624 fftw_complex mul_param;
626 init_complex(mul_param, 0.0, -1.0);
627 mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
628 mul_complex_f(mul_param, mul_param, o->_kz[i]);
629 init_complex(o->_fft_in_nz[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
632 fftw_execute(o->_N_z_plan);
637 return o->_k !=
NULL;
644 OceanSimulateData osd;
646 scale *= o->normalize_factor;
651 osd.chop_amount = chop_amount;
679 if (o->_do_jacobian) {
685 if (o->_do_normals) {
688 o->_N_y = 1.0f / scale;
698 static void set_height_normalize_factor(
struct Ocean *oc)
705 if (!oc->_do_disp_y) {
709 oc->normalize_factor = 1.0;
715 for (i = 0; i < oc->_M; i++) {
716 for (j = 0; j < oc->_N; j++) {
717 if (max_h <
fabs(oc->_disp_y[i * oc->_N + j])) {
718 max_h =
fabs(oc->_disp_y[i * oc->_N + j]);
729 res = 1.0f / (max_h);
731 oc->normalize_factor = res;
747 if (omd->
ocean->_M == resolution * resolution) {
761 const int resolution)
763 short do_heightfield, do_chop, do_normals, do_jacobian, do_spray;
765 do_heightfield =
true;
774 resolution * resolution,
775 resolution * resolution,
812 float sharpen_peak_jonswap,
813 short do_height_field,
830 o->_damp_reflections = 1.0f - damp;
831 o->_wind_alignment = alignment * 10.0f;
837 o->_L =
V *
V / GRAVITY;
841 o->_spectrum = spectrum;
844 o->_fetch_jonswap = fetch_jonswap;
845 o->_sharpen_peak_jonswap = sharpen_peak_jonswap * 10.0f;
850 if ((o->_k = (
float *)
MEM_mallocN(
sizeof(
float) * (
size_t)
M * (1 +
N / 2),
"ocean_k")) &&
851 (o->_h0 = (fftw_complex *)
MEM_mallocN(
sizeof(fftw_complex) * (
size_t)
M *
N,
"ocean_h0")) &&
852 (o->_h0_minus = (fftw_complex *)
MEM_mallocN(
sizeof(fftw_complex) * (
size_t)
M *
N,
853 "ocean_h0_minus")) &&
854 (o->_kx = (
float *)
MEM_mallocN(
sizeof(
float) * o->_M,
"ocean_kx")) &&
855 (o->_kz = (
float *)
MEM_mallocN(
sizeof(
float) * o->_N,
"ocean_kz"))) {
869 o->_do_disp_y = do_height_field;
870 o->_do_normals = do_normals;
871 o->_do_spray = do_spray;
872 o->_do_chop = do_chop;
873 o->_do_jacobian = do_jacobian;
876 if (o->_Lx == 0.0f) {
880 if (o->_Lz == 0.0f) {
885 for (i = 0; i <= o->_M / 2; i++) {
886 o->_kx[i] = 2.0f * (
float)
M_PI * i / o->_Lx;
890 for (i = o->_M - 1, ii = 0; i > o->_M / 2; i--, ii++) {
891 o->_kx[i] = -2.0f * (
float)
M_PI * ii / o->_Lx;
895 for (i = 0; i <= o->_N / 2; i++) {
896 o->_kz[i] = 2.0f * (
float)
M_PI * i / o->_Lz;
900 for (i = o->_N - 1, ii = 0; i > o->_N / 2; i--, ii++) {
901 o->_kz[i] = -2.0f * (
float)
M_PI * ii / o->_Lz;
905 for (i = 0; i < o->_M; i++) {
906 for (j = 0; j <= o->_N / 2; j++) {
907 o->_k[(size_t)i * (1 + o->_N / 2) + j] =
sqrt(o->_kx[i] * o->_kx[i] + o->_kz[j] * o->_kz[j]);
913 for (i = 0; i < o->_M; i++) {
914 for (j = 0; j < o->_N; j++) {
919 const int hash_x = o->_kx[i] * 360.0f;
920 const int hash_z = o->_kz[j] * 360.0f;
924 float r1 = gaussRand(rng);
925 float r2 = gaussRand(rng);
928 init_complex(r1r2, r1, r2);
929 switch (o->_spectrum) {
931 mul_complex_f(o->_h0[i * o->_N + j],
935 o->_h0_minus[i * o->_N + j],
941 o->_h0[i * o->_N + j],
945 o->_h0_minus[i * o->_N + j],
952 o->_h0[i * o->_N + j],
956 o->_h0_minus[i * o->_N + j],
963 o->_h0[i * o->_N + j], r1r2, (
float)(
sqrt(Ph(o, o->_kx[i], o->_kz[j]) / 2.0f)));
964 mul_complex_f(o->_h0_minus[i * o->_N + j],
966 (
float)(
sqrt(Ph(o, -o->_kx[i], -o->_kz[j]) / 2.0f)));
972 o->_fft_in = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
974 o->_htilda = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
980 o->_disp_y = (
double *)
MEM_mallocN(o->_M * o->_N *
sizeof(
double),
"ocean_disp_y");
981 o->_disp_y_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in, o->_disp_y, FFTW_ESTIMATE);
984 if (o->_do_normals) {
985 o->_fft_in_nx = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
987 o->_fft_in_nz = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
990 o->_N_x = (
double *)
MEM_mallocN(o->_M * o->_N *
sizeof(
double),
"ocean_N_x");
992 o->_N_z = (
double *)
MEM_mallocN(o->_M * o->_N *
sizeof(
double),
"ocean_N_z");
994 o->_N_x_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_nx, o->_N_x, FFTW_ESTIMATE);
995 o->_N_z_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_nz, o->_N_z, FFTW_ESTIMATE);
999 o->_fft_in_x = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
1001 o->_fft_in_z = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
1004 o->_disp_x = (
double *)
MEM_mallocN(o->_M * o->_N *
sizeof(
double),
"ocean_disp_x");
1005 o->_disp_z = (
double *)
MEM_mallocN(o->_M * o->_N *
sizeof(
double),
"ocean_disp_z");
1007 o->_disp_x_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_x, o->_disp_x, FFTW_ESTIMATE);
1008 o->_disp_z_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_z, o->_disp_z, FFTW_ESTIMATE);
1010 if (o->_do_jacobian) {
1011 o->_fft_in_jxx = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
1012 "ocean_fft_in_jxx");
1013 o->_fft_in_jzz = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
1014 "ocean_fft_in_jzz");
1015 o->_fft_in_jxz = (fftw_complex *)
MEM_mallocN(o->_M * (1 + o->_N / 2) *
sizeof(fftw_complex),
1016 "ocean_fft_in_jxz");
1018 o->_Jxx = (
double *)
MEM_mallocN(o->_M * o->_N *
sizeof(
double),
"ocean_Jxx");
1019 o->_Jzz = (
double *)
MEM_mallocN(o->_M * o->_N *
sizeof(
double),
"ocean_Jzz");
1020 o->_Jxz = (
double *)
MEM_mallocN(o->_M * o->_N *
sizeof(
double),
"ocean_Jxz");
1022 o->_Jxx_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jxx, o->_Jxx, FFTW_ESTIMATE);
1023 o->_Jzz_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jzz, o->_Jzz, FFTW_ESTIMATE);
1024 o->_Jxz_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jxz, o->_Jxz, FFTW_ESTIMATE);
1031 set_height_normalize_factor(o);
1048 if (oc->_do_disp_y) {
1049 fftw_destroy_plan(oc->_disp_y_plan);
1053 if (oc->_do_normals) {
1056 fftw_destroy_plan(oc->_N_x_plan);
1057 fftw_destroy_plan(oc->_N_z_plan);
1066 fftw_destroy_plan(oc->_disp_x_plan);
1067 fftw_destroy_plan(oc->_disp_z_plan);
1072 if (oc->_do_jacobian) {
1076 fftw_destroy_plan(oc->_Jxx_plan);
1077 fftw_destroy_plan(oc->_Jzz_plan);
1078 fftw_destroy_plan(oc->_Jxz_plan);
1119 # define CACHE_TYPE_DISPLACE 1
1120 # define CACHE_TYPE_FOAM 2
1121 # define CACHE_TYPE_NORMAL 3
1122 # define CACHE_TYPE_SPRAY 4
1123 # define CACHE_TYPE_SPRAY_INVERSE 5
1125 static void cache_filename(
1126 char *
string,
const char *path,
const char *relbase,
int frame,
int type)
1132 case CACHE_TYPE_FOAM:
1135 case CACHE_TYPE_NORMAL:
1138 case CACHE_TYPE_SPRAY:
1141 case CACHE_TYPE_SPRAY_INVERSE:
1142 fname =
"spray_inverse_";
1144 case CACHE_TYPE_DISPLACE:
1157 MINLINE void rgb_to_rgba_unit_alpha(
float r_rgba[4],
const float rgb[3])
1164 MINLINE void value_to_rgba_unit_alpha(
float r_rgba[4],
const float value)
1181 for (i = och->
start, f = 0; i <= och->end; i++, f++) {
1190 for (i = och->
start, f = 0; i <= och->end; i++, f++) {
1199 for (i = och->
start, f = 0; i <= och->end; i++, f++) {
1208 for (i = och->
start, f = 0; i <= och->end; i++, f++) {
1217 for (i = och->
start, f = 0; i <= och->end; i++, f++) {
1337 "displacement imbuf pointer array");
1341 "spray_inverse imbuf pointer array");
1357 f = frame - och->
start;
1367 cache_filename(
string, och->
bakepath, och->
relbase, frame, CACHE_TYPE_DISPLACE);
1370 cache_filename(
string, och->
bakepath, och->
relbase, frame, CACHE_TYPE_FOAM);
1373 cache_filename(
string, och->
bakepath, och->
relbase, frame, CACHE_TYPE_SPRAY);
1376 cache_filename(
string, och->
bakepath, och->
relbase, frame, CACHE_TYPE_SPRAY_INVERSE);
1379 cache_filename(
string, och->
bakepath, och->
relbase, frame, CACHE_TYPE_NORMAL);
1385 void (*
update_cb)(
void *,
float progress,
int *cancel),
1386 void *update_cb_data)
1395 int f, i = 0,
x,
y, cancel = 0;
1398 ImBuf *ibuf_foam, *ibuf_disp, *ibuf_normal, *ibuf_spray, *ibuf_spray_inverse;
1409 if (o->_do_jacobian) {
1410 prev_foam =
MEM_callocN(res_x * res_y *
sizeof(
float),
"previous frame foam bake data");
1423 for (f = och->
start, i = 0; f <= och->
end; f++, i++) {
1435 for (
y = 0;
y < res_y;
y++) {
1436 for (
x = 0;
x < res_x;
x++) {
1441 rgb_to_rgba_unit_alpha(&ibuf_disp->
rect_float[4 * (res_x *
y +
x)], ocr.
disp);
1443 if (o->_do_jacobian) {
1446 float pr = 0.0f, foam_result;
1447 float neg_disp, neg_eplus;
1453 pr = prev_foam[res_x *
y +
x];
1464 neg_disp = ocr.
disp[1] < 0.0f ? 1.0f + ocr.
disp[1] : 1.0f;
1465 neg_disp = neg_disp < 0.0f ? 0.0f : neg_disp;
1468 neg_eplus = ocr.
Eplus[2] < 0.0f ? 1.0f + ocr.
Eplus[2] : 1.0f;
1469 neg_eplus = neg_eplus < 0.0f ? 0.0f : neg_eplus;
1475 pr *= och->
foam_fade * (0.75f + neg_eplus * 0.25f);
1480 prev_foam[res_x *
y +
x] = foam_result;
1484 value_to_rgba_unit_alpha(&ibuf_foam->
rect_float[4 * (res_x *
y +
x)], foam_result);
1488 rgb_to_rgba_unit_alpha(&ibuf_spray->
rect_float[4 * (res_x *
y +
x)], ocr.
Eplus);
1489 rgb_to_rgba_unit_alpha(&ibuf_spray_inverse->
rect_float[4 * (res_x *
y +
x)],
1494 if (o->_do_normals) {
1501 cache_filename(
string, och->
bakepath, och->
relbase, f, CACHE_TYPE_DISPLACE);
1503 printf(
"Cannot save Displacement File Output to %s\n",
string);
1506 if (o->_do_jacobian) {
1507 cache_filename(
string, och->
bakepath, och->
relbase, f, CACHE_TYPE_FOAM);
1509 printf(
"Cannot save Foam File Output to %s\n",
string);
1513 cache_filename(
string, och->
bakepath, och->
relbase, f, CACHE_TYPE_SPRAY);
1515 printf(
"Cannot save Spray File Output to %s\n",
string);
1518 cache_filename(
string, och->
bakepath, och->
relbase, f, CACHE_TYPE_SPRAY_INVERSE);
1520 printf(
"Cannot save Spray Inverse File Output to %s\n",
string);
1525 if (o->_do_normals) {
1526 cache_filename(
string, och->
bakepath, och->
relbase, f, CACHE_TYPE_NORMAL);
1528 printf(
"Cannot save Normal File Output to %s\n",
string);
1540 update_cb(update_cb_data, progress, &cancel);
1629 float UNUSED(fetch_jonswap),
1630 float UNUSED(sharpen_peak_jonswap),
1631 short UNUSED(do_height_field),
1634 short UNUSED(do_normals),
1635 short UNUSED(do_jacobian),
1681 const char *
UNUSED(relbase),
1684 float UNUSED(wave_scale),
1685 float UNUSED(chop_amount),
1686 float UNUSED(foam_coverage),
1701 void (*
update_cb)(
void *,
float progress,
int *cancel),
1702 void *
UNUSED(update_cb_data))
typedef float(TangentPoint)[2]
int BKE_imbuf_write(struct ImBuf *ibuf, const char *name, const struct ImageFormatData *imf)
bool BKE_ocean_ensure(struct OceanModifierData *omd, int resolution)
float BLI_ocean_spectrum_piersonmoskowitz(const struct Ocean *oc, float kx, float kz)
float BLI_ocean_spectrum_jonswap(const struct Ocean *oc, float kx, float kz)
bool BKE_ocean_is_valid(const struct Ocean *o)
float BLI_ocean_spectrum_texelmarsenarsloe(const struct Ocean *oc, float kx, float kz)
BLI_INLINE unsigned int BLI_hash_int_2d(unsigned int kx, unsigned int ky)
MINLINE float min_ff(float a, float b)
MINLINE float normalize_v3(float r[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void BLI_join_dirfile(char *__restrict dst, size_t maxlen, const char *__restrict dir, const char *__restrict file) ATTR_NONNULL()
void BLI_rng_free(struct RNG *rng) ATTR_NONNULL(1)
void BLI_rng_seed(struct RNG *rng, unsigned int seed) ATTR_NONNULL(1)
struct RNG * BLI_rng_new(unsigned int seed)
float BLI_rng_get_float(struct RNG *rng) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_task_pool_user_data(TaskPool *pool)
void BLI_task_pool_work_and_wait(TaskPool *pool)
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
TaskPool * BLI_task_pool_create(void *userdata, eTaskPriority priority)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
void BLI_task_pool_free(TaskPool *pool)
void BLI_task_pool_push(TaskPool *pool, TaskRunFunction run, void *taskdata, bool free_taskdata, TaskFreeFunction freedata)
void BLI_rw_mutex_end(ThreadRWMutex *mutex)
void BLI_thread_unlock(int type)
void BLI_thread_lock(int type)
#define THREAD_LOCK_WRITE
void BLI_rw_mutex_lock(ThreadRWMutex *mutex, int mode)
void BLI_rw_mutex_init(ThreadRWMutex *mutex)
void BLI_rw_mutex_unlock(ThreadRWMutex *mutex)
typedef double(DMatrix)[4][4]
@ MOD_OCEAN_SPECTRUM_TEXEL_MARSEN_ARSLOE
@ MOD_OCEAN_SPECTRUM_JONSWAP
@ MOD_OCEAN_SPECTRUM_PIERSON_MOSKOWITZ
@ MOD_OCEAN_GENERATE_NORMALS
@ MOD_OCEAN_GENERATE_FOAM
@ MOD_OCEAN_GENERATE_SPRAY
#define R_IMF_EXR_CODEC_ZIP
#define R_IMF_IMTYPE_OPENEXR
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint i1
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
struct ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
struct ImBuf * IMB_loadiffname(const char *filepath, int flags, char colorspace[IM_MAX_SPACE])
Contains defines and structs used throughout the imbuf module.
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
static unsigned long seed
SIMD_FORCE_INLINE btScalar length2() const
Return the length of the vector squared.
SyclQueue void void size_t num_bytes void
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img") .image(3
void IMB_freeImBuf(ImBuf *UNUSED(ibuf))
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
ccl_device_inline float2 fabs(const float2 &a)
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static const pxr::TfToken rgb("rgb", pxr::TfToken::Immortal)
void BKE_ocean_eval_xz(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(x), float UNUSED(z))
void BKE_ocean_cache_eval_ij(struct OceanCache *UNUSED(och), struct OceanResult *UNUSED(ocr), int UNUSED(f), int UNUSED(i), int UNUSED(j))
void BKE_ocean_simulate(struct Ocean *UNUSED(o), float UNUSED(t), float UNUSED(scale), float UNUSED(chop_amount))
void BKE_ocean_free_data(struct Ocean *UNUSED(oc))
void BKE_ocean_free_modifier_cache(struct OceanModifierData *omd)
bool BKE_ocean_init_from_modifier(struct Ocean *UNUSED(ocean), struct OceanModifierData const *UNUSED(omd), int UNUSED(resolution))
void BKE_ocean_free_cache(struct OceanCache *och)
OceanCache * BKE_ocean_init_cache(const char *UNUSED(bakepath), const char *UNUSED(relbase), int UNUSED(start), int UNUSED(end), float UNUSED(wave_scale), float UNUSED(chop_amount), float UNUSED(foam_coverage), float UNUSED(foam_fade), int UNUSED(resolution))
void BKE_ocean_cache_eval_uv(struct OceanCache *UNUSED(och), struct OceanResult *UNUSED(ocr), int UNUSED(f), float UNUSED(u), float UNUSED(v))
struct Ocean * BKE_ocean_add(void)
void BKE_ocean_eval_xz_catrom(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(x), float UNUSED(z))
void BKE_ocean_eval_uv(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(u), float UNUSED(v))
bool BKE_ocean_init(struct Ocean *UNUSED(o), int UNUSED(M), int UNUSED(N), float UNUSED(Lx), float UNUSED(Lz), float UNUSED(V), float UNUSED(l), float UNUSED(A), float UNUSED(w), float UNUSED(damp), float UNUSED(alignment), float UNUSED(depth), float UNUSED(time), int UNUSED(spectrum), float UNUSED(fetch_jonswap), float UNUSED(sharpen_peak_jonswap), short UNUSED(do_height_field), short UNUSED(do_chop), short UNUSED(do_spray), short UNUSED(do_normals), short UNUSED(do_jacobian), int UNUSED(seed))
void BKE_ocean_eval_ij(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), int UNUSED(i), int UNUSED(j))
void BKE_ocean_free(struct Ocean *oc)
void BKE_ocean_simulate_cache(struct OceanCache *UNUSED(och), int UNUSED(frame))
float BKE_ocean_jminus_to_foam(float UNUSED(jminus), float UNUSED(coverage))
void BKE_ocean_bake(struct Ocean *UNUSED(o), struct OceanCache *UNUSED(och), void(*update_cb)(void *, float progress, int *cancel), void *UNUSED(update_cb_data))
void BKE_ocean_eval_uv_catrom(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(u), float UNUSED(v))
static void update_cb(PBVHNode *node, void *rebuild)
struct ImBuf ** ibufs_disp
struct ImBuf ** ibufs_spray
struct ImBuf ** ibufs_norm
struct ImBuf ** ibufs_foam
struct ImBuf ** ibufs_spray_inverse
struct OceanCache * oceancache
float sharpen_peak_jonswap
void ibuf_sample(ImBuf *ibuf, float fx, float fy, float dx, float dy, float result[4])
CCL_NAMESPACE_BEGIN struct Window V