32 const int other_1 = (primary_channel + 1) % 3;
33 const int other_2 = (primary_channel + 2) % 3;
35 const int min_channel =
MIN2(other_1, other_2);
36 const int max_channel =
MAX2(other_1, other_2);
38 const float val = screen_balance * pixelColor[min_channel] +
39 (1.0f - screen_balance) * pixelColor[max_channel];
41 return (pixelColor[primary_channel] - val) *
fabsf(1.0f - val);
71 float screen_color[4];
76 const int primary_channel =
max_axis_v3(screen_color);
77 const float min_pixel_color =
min_fff(pixel_color[0], pixel_color[1], pixel_color[2]);
79 if (min_pixel_color > 1.0f) {
98 else if (saturation >= screen_saturation) {
106 float distance = 1.0f - saturation / screen_saturation;
MINLINE float min_fff(float a, float b, float c)
MINLINE int max_axis_v3(const float vec[3])
_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
Read Guarded memory(de)allocation.
void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override
calculate a single pixel
SocketReader * m_pixelReader
void deinitExecution() override
SocketReader * m_screenReader
void initExecution() override
void readSampled(float result[4], float x, float y, PixelSampler sampler)
void addInputSocket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
void addOutputSocket(DataType datatype)
SocketReader * getInputSocketReader(unsigned int inputSocketindex)
static float get_pixel_saturation(const float pixelColor[4], float screen_balance, int primary_channel)
ccl_device_inline float distance(const float2 &a, const float2 &b)