Bug 1055646 - Allow setting the uniforms of the blur shader on ShaderProgramOGL. r=nical

This commit is contained in:
Markus Stange
2014-09-02 14:09:26 +02:00
parent 4df2032de2
commit d35c0e34d4
2 changed files with 63 additions and 0 deletions

View File

@@ -49,6 +49,10 @@ AddUniforms(ProgramProfileOGL& aProfile)
"uTexturePass2",
"uColorMatrix",
"uColorMatrixVector",
"uBlurRadius",
"uBlurOffset",
"uBlurAlpha",
"uBlurGaussianKernel",
nullptr
};
@@ -549,5 +553,25 @@ ShaderProgramOGL::Activate()
mGL->fUseProgram(mProgram);
}
void
ShaderProgramOGL::SetBlurRadius(float aRX, float aRY)
{
float f[] = {aRX, aRY};
SetUniform(KnownUniform::BlurRadius, 2, f);
float gaussianKernel[GAUSSIAN_KERNEL_HALF_WIDTH];
float sum = 0.0f;
for (int i = 0; i < GAUSSIAN_KERNEL_HALF_WIDTH; i++) {
float x = i * GAUSSIAN_KERNEL_STEP;
float sigma = 1.0f;
gaussianKernel[i] = exp(-x * x / (2 * sigma * sigma)) / sqrt(2 * M_PI * sigma * sigma);
sum += gaussianKernel[i] * (i == 0 ? 1 : 2);
}
for (int i = 0; i < GAUSSIAN_KERNEL_HALF_WIDTH; i++) {
gaussianKernel[i] /= sum;
}
SetArrayUniform(KnownUniform::BlurGaussianKernel, GAUSSIAN_KERNEL_HALF_WIDTH, gaussianKernel);
}
} /* layers */
} /* mozilla */