diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2015-02-16 17:35:10 +0100 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2015-05-02 21:36:45 +0200 |
commit | 6123a81aecc4e3cd6c47c908fb7e9010d3d64798 (patch) | |
tree | c5db975b3789fd984fc51b7c3a426e7f56ff68bb /math.h | |
parent | 215dcd3d466303b39f8912602be039a7a3aefe5c (diff) | |
download | pucket-6123a81aecc4e3cd6c47c908fb7e9010d3d64798.tar.gz pucket-6123a81aecc4e3cd6c47c908fb7e9010d3d64798.tar.bz2 pucket-6123a81aecc4e3cd6c47c908fb7e9010d3d64798.zip |
Vectorize color clipping
Replaces redundant code with one function. Oddly this fixes rendering
with earlyclip – not sure why. Drop transparency and channel settings
(always transparent, always four channels).
Diffstat (limited to 'math.h')
-rw-r--r-- | math.h | 61 |
1 files changed, 61 insertions, 0 deletions
@@ -0,0 +1,61 @@ +/* + FLAM3 - cosmic recursive fractal flames + Copyright (C) 1992-2009 Spotworks LLC + Copyright (C) 2015 vlam3 contributors + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#pragma once + +#include <math.h> + +#include "build/config.h" + +#ifdef HAVE_AMDLIBM +#define REPLACE_WITH_AMDLIBM +#include <amdlibm.h> +#endif + +#define clamp(a,min,max) (a > max ? max : (a < min ? min : a)) + +/* Vector wrapping function, could be replaced by true vector functions later + */ + +inline double4 clamp_d4 (const double4 in, const double min, const double max) { + return (double4) { + clamp (in[0], min, max), + clamp (in[1], min, max), + clamp (in[2], min, max), + clamp (in[3], min, max), + }; +} + +inline double4 pow_d4 (const double4 in, double exp) { + return (double4) { + pow (in[0], exp), + pow (in[1], exp), + pow (in[2], exp), + pow (in[3], exp), + }; +} + +inline double4 nearbyint_d4 (const double4 in) { + return (double4) { + nearbyint (in[0]), + nearbyint (in[1]), + nearbyint (in[2]), + nearbyint (in[3]), + }; +} |