// mcpro24fps mLog 60% to Gamma 2.2 // ver. 2020-04-13 __CONSTANT__ float BLACK = 0.0627; __CONSTANT__ float BRIGHTNESS = 0.2; __DEVICE__ float3 transform(int p_Width, int p_Height, int p_X, int p_Y, float p_R, float p_G, float p_B) { float3 rgb; rgb.x = p_R; rgb.y = p_G; rgb.z = p_B; if(rgb.x < BLACK) rgb.x = 0.0; else { rgb.x = (rgb.x - BLACK)/(1.0 - BLACK); rgb.x = (-1.0 * _powf(_clampf((1.0 - rgb.x),0.0,1.0), (BRIGHTNESS + 0.5)) + 1.0); rgb.x = (2.0 * (BRIGHTNESS - 0.5)) * (0.25 - (rgb.x - 0.5)*(rgb.x - 0.5)) + rgb.x; } if(rgb.y < BLACK) rgb.y = 0.0; else { rgb.y = (rgb.y - BLACK)/(1.0 - BLACK); rgb.y = (-1.0 * _powf(_clampf((1.0 - rgb.y),0.0,1.0), (BRIGHTNESS + 0.5)) + 1.0); rgb.y = (2.0 * (BRIGHTNESS - 0.5)) * (0.25 - (rgb.y - 0.5)*(rgb.y - 0.5)) + rgb.y; } if(rgb.z < BLACK) rgb.z = 0.0; else { rgb.z = (rgb.z - BLACK)/(1.0 - BLACK); rgb.z = (-1.0 * _powf(_clampf((1.0 - rgb.z),0.0,1.0), (BRIGHTNESS + 0.5)) + 1.0); rgb.z = (2.0 * (BRIGHTNESS - 0.5)) * (0.25 - (rgb.z - 0.5)*(rgb.z - 0.5)) + rgb.z; } //Gamma 2.2 rgb.x = rgb.x < 0 ? 0 : _powf(rgb.x, 1.0f/2.2f); rgb.y = rgb.y < 0 ? 0 : _powf(rgb.y, 1.0f/2.2f); rgb.z = rgb.z < 0 ? 0 : _powf(rgb.z, 1.0f/2.2f); return rgb; }