summaryrefslogtreecommitdiff
path: root/src/renderer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer.c')
-rw-r--r--src/renderer.c73
1 files changed, 30 insertions, 43 deletions
diff --git a/src/renderer.c b/src/renderer.c
index d68287c..6d159e7 100644
--- a/src/renderer.c
+++ b/src/renderer.c
@@ -373,7 +373,7 @@ int r_xsection_update(r_window *rw, r_xsection *xsection, phy_sim *sim,
{
phy_field_info *fi = &sim->field_info;
float *field;
- size_t width, height, x, y, z;
+ size_t width, height, x[3], dx, dy, d0;
uint8_t *pixels;
int pitch;
float scale;
@@ -387,12 +387,21 @@ int r_xsection_update(r_window *rw, r_xsection *xsection, phy_sim *sim,
if (flags & XSECTION_XY) {
width = fi->dims[0];
height = fi->dims[1];
+ d0 = 2;
+ dx = 0;
+ dy = 1;
} else if (flags & XSECTION_XZ) {
width = fi->dims[0];
height = fi->dims[2];
+ d0 = 1;
+ dx = 0;
+ dy = 2;
} else {
width = fi->dims[1];
height = fi->dims[2];
+ d0 = 0;
+ dx = 1;
+ dy = 2;
}
if (flags & XSECTION_E) {
@@ -419,61 +428,39 @@ int r_xsection_update(r_window *rw, r_xsection *xsection, phy_sim *sim,
SDL_LockTexture(xsection->texture, NULL, (void**)&pixels, &pitch);
- if (flags & XSECTION_XY) {
- z = frac * fi->dims[2];
- if (z >= fi->dims[2])
- z = fi->dims[2] - 1;
+ x[d0] = frac * fi->dims[d0];
+ if (x[d0] >= fi->dims[d0])
+ x[d0] = fi->dims[d0] - 1;
- for (y = 0; y < fi->dims[1]; y++)
- for (x = 0; x < fi->dims[0]; x++) {
+ if (flags & XSECTION_EPS)
+ for (x[dy] = 0; x[dy] < fi->dims[dy]; x[dy]++)
+ for (x[dx] = 0; x[dx] < fi->dims[dx]; x[dx]++) {
uint8_t *pixel;
- float *point;
+ float gray;
+ phy_field_aux_point *aux;
- pixel = pixels + (y * pitch + x * 4);
- point = field + z * fi->zstr + y * fi->ystr +
- x * fi->xstr;
+ pixel = pixels + (x[dy] * pitch + x[dx] * 4);
+ aux = sim->aux + x[2] * fi->zstr1 + x[1] * fi->ystr1 +
+ x[0] * fi->xstr1;
- pixel[0] = r_float_to_u8(point[0] * scale);
- pixel[1] = r_float_to_u8(point[1] * scale);
- pixel[2] = r_float_to_u8(point[2] * scale);
+ gray = remap(aux->eps, sim->eps_min, sim->eps_max,
+ 0.0f, 1.0f);
+ pixel[0] = pixel[1] = pixel[2] = r_float_to_u8(gray);
}
- } else if (flags & XSECTION_XZ) {
- y = frac * fi->dims[1];
- if (y >= fi->dims[1])
- y = fi->dims[1] - 1;
-
- for (z = 0; z < fi->dims[2]; z++)
- for (x = 0; x < fi->dims[0]; x++) {
- uint8_t *pixel;
- float *point;
-
- pixel = pixels + (z * pitch + x * 4);
- point = field + z * fi->zstr + y * fi->ystr +
- x * fi->xstr;
-
- pixel[0] = r_float_to_u8(point[0] * scale);
- pixel[1] = r_float_to_u8(point[1] * scale);
- pixel[2] = r_float_to_u8(point[2] * scale);
- }
- } else {
- x = frac * fi->dims[0];
- if (x >= fi->dims[0])
- x = fi->dims[0] - 1;
-
- for (z = 0; z < fi->dims[2]; z++)
- for (y = 0; y < fi->dims[1]; y++) {
+ else
+ for (x[dy] = 0; x[dy] < fi->dims[dy]; x[dy]++)
+ for (x[dx] = 0; x[dx] < fi->dims[dx]; x[dx]++) {
uint8_t *pixel;
float *point;
- pixel = pixels + (z * pitch + y * 4);
- point = field + z * fi->zstr + y * fi->ystr +
- x * fi->xstr;
+ pixel = pixels + (x[dy] * pitch + x[dx] * 4);
+ point = field + x[2] * fi->zstr + x[1] * fi->ystr +
+ x[0] * fi->xstr;
pixel[0] = r_float_to_u8(point[0] * scale);
pixel[1] = r_float_to_u8(point[1] * scale);
pixel[2] = r_float_to_u8(point[2] * scale);
}
- }
SDL_UnlockTexture(xsection->texture);