diff options
Diffstat (limited to 'src/renderer.c')
| -rw-r--r-- | src/renderer.c | 73 | 
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);  | 
