add threshold blending to opencl too.
This commit is contained in:
@@ -101,6 +101,7 @@ __kernel void defocusKernel(__read_only image2d_t inputImage, __read_only image2
|
||||
int2 inputCoordinate = realCoordinate - offsetInput;
|
||||
float size_center = read_imagef(inputSize, SAMPLER_NEAREST, inputCoordinate).s0;
|
||||
color_accum = read_imagef(inputImage, SAMPLER_NEAREST, inputCoordinate);
|
||||
readColor = color_accum;
|
||||
|
||||
if (size_center > threshold) {
|
||||
for (int ny = miny; ny < maxy; ny += step) {
|
||||
@@ -125,10 +126,20 @@ __kernel void defocusKernel(__read_only image2d_t inputImage, __read_only image2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
color = color_accum * (1.0f / multiplier_accum);
|
||||
write_imagef(output, coords, color);
|
||||
color = color_accum * (1.0f / multiplier_accum);
|
||||
|
||||
/* blend in out values over the threshold, otherwise we get sharp, ugly transitions */
|
||||
if ((size_center > threshold) &&
|
||||
(size_center < threshold * 2.0f))
|
||||
{
|
||||
/* factor from 0-1 */
|
||||
float fac = (size_center - threshold) / threshold;
|
||||
color = (readColor * (1.0f - fac)) + (color * fac);
|
||||
}
|
||||
|
||||
write_imagef(output, coords, color);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@ const char * clkernelstoh_COM_OpenCLKernels_cl = "/*\n" \
|
||||
" int2 inputCoordinate = realCoordinate - offsetInput;\n" \
|
||||
" float size_center = read_imagef(inputSize, SAMPLER_NEAREST, inputCoordinate).s0;\n" \
|
||||
" color_accum = read_imagef(inputImage, SAMPLER_NEAREST, inputCoordinate);\n" \
|
||||
" readColor = color_accum;\n" \
|
||||
"\n" \
|
||||
" if (size_center > threshold) {\n" \
|
||||
" for (int ny = miny; ny < maxy; ny += step) {\n" \
|
||||
@@ -127,10 +128,20 @@ const char * clkernelstoh_COM_OpenCLKernels_cl = "/*\n" \
|
||||
" }\n" \
|
||||
" }\n" \
|
||||
" }\n" \
|
||||
" }\n" \
|
||||
"\n" \
|
||||
" color = color_accum * (1.0f / multiplier_accum);\n" \
|
||||
" write_imagef(output, coords, color);\n" \
|
||||
" color = color_accum * (1.0f / multiplier_accum);\n" \
|
||||
"\n" \
|
||||
" /* blend in out values over the threshold, otherwise we get sharp, ugly transitions */\n" \
|
||||
" if ((size_center > threshold) &&\n" \
|
||||
" (size_center < threshold * 2.0f))\n" \
|
||||
" {\n" \
|
||||
" /* factor from 0-1 */\n" \
|
||||
" float fac = (size_center - threshold) / threshold;\n" \
|
||||
" color = (readColor * (1.0f - fac)) + (color * fac);\n" \
|
||||
" }\n" \
|
||||
"\n" \
|
||||
" write_imagef(output, coords, color);\n" \
|
||||
" }\n" \
|
||||
"}\n" \
|
||||
"\n" \
|
||||
"\n" \
|
||||
|
||||
@@ -101,8 +101,8 @@ void VariableSizeBokehBlurOperation::executePixel(float *color, int x, int y, vo
|
||||
float readColor[4];
|
||||
float bokeh[4];
|
||||
float tempSize[4];
|
||||
float multiplier_accum[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
float color_accum[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
float multiplier_accum[4];
|
||||
float color_accum[4];
|
||||
int maxBlur = tileData->maxBlur;
|
||||
|
||||
#ifdef COM_DEFOCUS_SEARCH
|
||||
@@ -122,8 +122,8 @@ void VariableSizeBokehBlurOperation::executePixel(float *color, int x, int y, vo
|
||||
inputSizeBuffer->readNoCheck(tempSize, x, y);
|
||||
inputProgramBuffer->readNoCheck(readColor, x, y);
|
||||
|
||||
add_v4_v4(color_accum, readColor);
|
||||
add_v4_fl(multiplier_accum, 1.0f);
|
||||
copy_v4_v4(color_accum, readColor);
|
||||
copy_v4_fl(multiplier_accum, 1.0f);
|
||||
float size_center = tempSize[0];
|
||||
|
||||
const int addXStep = QualityStepHelper::getStep() * COM_NUMBER_OF_CHANNELS;
|
||||
|
||||
Reference in New Issue
Block a user