15 static unsigned int next_pow2(
unsigned int x,
unsigned int *L2)
17 unsigned int pw, x_notpow2 =
x & (
x - 1);
34 static unsigned int revbin_upd(
unsigned int r,
unsigned int h)
36 while (!((
r ^= h) & h)) {
44 double tt, fc, dc, fs, ds,
a =
M_PI;
46 int n2, bd, bl, istep, k,
len = 1 <<
M, n = 1;
49 unsigned int Nh =
len >> 1;
50 for (i = 1; i < (
len - 1); i++) {
63 for (k = 0; k <
len; k += istep) {
65 data_n[k] =
data[k] - t1;
72 fs = ds =
sqrt(1.0 - fc * fc);
74 for (bl = 1; bl < n2; bl++) {
75 fREAL *data_nbd = &data_n[bd];
77 for (k = bl; k <
len; k += istep) {
78 t1 = fc * (
double)data_n[k] + fs * (
double)data_nbd[k];
79 t2 = fs * (
double)data_n[k] - fc * (
double)data_nbd[k];
80 data_n[k] =
data[k] - t1;
81 data_nbd[k] = data_bd[k] - t2;
85 tt = fc * dc - fs * ds;
86 fs = fs * dc + fc * ds;
93 for (k = n2; k <
len; k += istep) {
95 data_n[k] =
data[k] - t1;
106 for (k = 0; k <
len; k++) {
116 fREAL *
data,
unsigned int Mx,
unsigned int My,
unsigned int nzp,
unsigned int inverse)
118 unsigned int i, j, Nx, Ny, maxy;
125 for (j = 0; j < maxy; j++) {
131 for (j = 0; j < Ny; j++) {
132 for (i = j + 1; i < Nx; i++) {
133 unsigned int op = i + (j << Mx), np = j + (i << My);
139 unsigned int k, Nym = Ny - 1, stm = 1 << (Mx + My);
140 for (i = 0; stm > 0; i++) {
141 #define PRED(k) (((k & Nym) << Mx) + (k >> My))
142 for (j =
PRED(i); j > i; j =
PRED(j)) {
148 for (k = i, j =
PRED(i); j != i; k = j, j =
PRED(j), stm--) {
156 SWAP(
unsigned int, Nx, Ny);
157 SWAP(
unsigned int, Mx, My);
160 for (j = 0; j < Ny; j++) {
165 for (j = 0; j <= (Ny >> 1); j++) {
166 unsigned int jm = (Ny - j) & (Ny - 1);
167 unsigned int ji = j << Mx;
168 unsigned int jmi = jm << Mx;
169 for (i = 0; i <= (Nx >> 1); i++) {
170 unsigned int im = (Nx - i) & (Nx - 1);
176 data[ji + i] =
A - E;
177 data[jmi + i] =
B + E;
178 data[ji + im] =
C + E;
179 data[jmi + im] =
D - E;
190 unsigned int i, j, k,
L, mj, mL;
191 unsigned int m = 1 <<
M, n = 1 <<
N;
192 unsigned int m2 = 1 << (
M - 1), n2 = 1 << (
N - 1);
193 unsigned int mn2 = m << (
N - 1);
198 d1[m2 + mn2] *= d2[m2 + mn2];
199 for (i = 1; i < m2; i++) {
201 a = d1[i] * d2[i] - d1[k] * d2[k];
202 b = d1[k] * d2[i] + d1[i] * d2[k];
205 a = d1[i + mn2] * d2[i + mn2] - d1[k + mn2] * d2[k + mn2];
206 b = d1[k + mn2] * d2[i + mn2] + d1[i + mn2] * d2[k + mn2];
207 d1[i + mn2] = (
b +
a) * (
fREAL)0.5;
208 d1[k + mn2] = (
b -
a) * (
fREAL)0.5;
210 for (j = 1; j < n2; j++) {
214 a = d1[mj] * d2[mj] - d1[mL] * d2[mL];
215 b = d1[mL] * d2[mj] + d1[mj] * d2[mL];
218 a = d1[m2 + mj] * d2[m2 + mj] - d1[m2 + mL] * d2[m2 + mL];
219 b = d1[m2 + mL] * d2[m2 + mj] + d1[m2 + mj] * d2[m2 + mL];
220 d1[m2 + mj] = (
b +
a) * (
fREAL)0.5;
221 d1[m2 + mL] = (
b -
a) * (
fREAL)0.5;
223 for (i = 1; i < m2; i++) {
225 for (j = 1; j < n2; j++) {
229 a = d1[i + mj] * d2[i + mj] - d1[k + mL] * d2[k + mL];
230 b = d1[k + mL] * d2[i + mj] + d1[i + mj] * d2[k + mL];
231 d1[i + mj] = (
b +
a) * (
fREAL)0.5;
232 d1[k + mL] = (
b -
a) * (
fREAL)0.5;
233 a = d1[i + mL] * d2[i + mL] - d1[k + mj] * d2[k + mj];
234 b = d1[k + mj] * d2[i + mL] + d1[i + mL] * d2[k + mj];
235 d1[i + mL] = (
b +
a) * (
fREAL)0.5;
236 d1[k + mj] = (
b -
a) * (
fREAL)0.5;
245 unsigned int w2, h2, hw, hh, log2_w, log2_h;
248 int xbl, ybl, nxb, nyb, xbsz, ybsz;
249 bool in2done =
false;
250 const unsigned int kernel_width = in2->
get_width();
251 const unsigned int kernel_height = in2->
get_height();
252 const unsigned int image_width = in1->
get_width();
253 const unsigned int image_height = in1->
get_height();
263 w2 = 2 * kernel_width - 1;
264 h2 = 2 * kernel_height - 1;
274 wt[0] = wt[1] = wt[2] = 0.0f;
275 for (
y = 0;
y < kernel_height;
y++) {
277 for (
x = 0;
x < kernel_width;
x++) {
282 wt[0] = 1.0f / wt[0];
285 wt[1] = 1.0f / wt[1];
288 wt[2] = 1.0f / wt[2];
290 for (
y = 0;
y < kernel_height;
y++) {
292 for (
x = 0;
x < kernel_width;
x++) {
301 hw = kernel_width >> 1;
302 hh = kernel_height >> 1;
303 xbsz = (w2 + 1) - kernel_width;
304 ybsz = (h2 + 1) - kernel_height;
305 nxb = image_width / xbsz;
306 if (image_width % xbsz) {
309 nyb = image_height / ybsz;
310 if (image_height % ybsz) {
313 for (ybl = 0; ybl < nyb; ybl++) {
314 for (xbl = 0; xbl < nxb; xbl++) {
317 for (ch = 0; ch < 3; ch++) {
323 for (
y = 0;
y < kernel_height;
y++) {
324 fp = &data1ch[
y * w2];
326 for (
x = 0;
x < kernel_width;
x++) {
334 for (
y = 0;
y < ybsz;
y++) {
335 int yy = ybl * ybsz +
y;
336 if (yy >= image_height) {
341 for (
x = 0;
x < xbsz;
x++) {
342 int xx = xbl * xbsz +
x;
343 if (xx >= image_width) {
346 fp[
x] = colp[xx][ch];
353 FHT2D(data1ch, log2_w, log2_h, kernel_height + 1, 0);
355 FHT2D(
data2, log2_w, log2_h, kernel_height + 1, 0);
364 for (
y = 0;
y < (int)h2;
y++) {
365 const int yy = ybl * ybsz +
y - hh;
366 if ((yy < 0) || (yy >= image_height)) {
371 for (
x = 0;
x < (int)w2;
x++) {
372 const int xx = xbl * xbsz +
x - hw;
373 if ((xx < 0) || (xx >= image_width)) {
376 colp[xx][ch] += fp[
x];
397 float scale, u,
v,
r,
w, d;
400 unsigned int sz = 1 << settings->
size;
401 const float cs_r = 1.0f, cs_g = 1.0f, cs_b = 1.0f;
409 scale = 0.25f *
sqrtf((
float)(sz * sz));
411 for (
y = 0;
y < sz;
y++) {
412 v = 2.0f * (
y / (
float)sz) - 1.0f;
413 for (
x = 0;
x < sz;
x++) {
414 u = 2.0f * (
x / (
float)sz) - 1.0f;
415 r = (u * u +
v *
v) * scale;
417 fcol[0] =
expf(d * cs_r);
418 fcol[1] =
expf(d * cs_g);
419 fcol[2] =
expf(d * cs_b);
typedef float(TangentPoint)[2]
MINLINE void mul_v3_v3(float r[3], const float a[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
void BLI_rcti_init(struct rcti *rect, int xmin, int xmax, int ymin, int ymax)
typedef double(DMatrix)[4][4]
_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
ATTR_WARN_UNUSED_RESULT const BMVert * v
btMatrix3x3 inverse() const
Return the inverse of the matrix.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void generate_glare(float *data, MemoryBuffer *input_tile, NodeGlare *settings) override
a MemoryBuffer contains access to the data of a chunk
const rcti & get_rect() const
get the rect of this MemoryBuffer
const int get_width() const
get the width of this MemoryBuffer
const int get_height() const
get the height of this MemoryBuffer
void write_pixel(int x, int y, const float color[4])
float * get_buffer()
get the data of this MemoryBuffer
static const float data2[18 *GP_PRIM_DATABUF_SIZE]
static const float data1[33 *GP_PRIM_DATABUF_SIZE]
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
static void FHT2D(fREAL *data, unsigned int Mx, unsigned int My, unsigned int nzp, unsigned int inverse)
static unsigned int next_pow2(unsigned int x, unsigned int *L2)
constexpr int COM_DATA_TYPE_COLOR_CHANNELS
static void convolve(float *dst, MemoryBuffer *in1, MemoryBuffer *in2)
static void FHT(fREAL *data, unsigned int M, unsigned int inverse)
static unsigned int revbin_upd(unsigned int r, unsigned int h)
static void fht_convolve(fREAL *d1, const fREAL *d2, unsigned int M, unsigned int N)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)