Revision 93dca704
Added by Leszek Koltunski almost 9 years ago
| src/main/java/org/distorted/library/EffectQueuePostprocess.java | ||
|---|---|---|
| 171 | 171 |
|
| 172 | 172 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 173 | 173 |
|
| 174 |
private int computeKernel(int radius, float height)
|
|
| 174 |
private int computeGaussianKernel(int radius)
|
|
| 175 | 175 |
{
|
| 176 | 176 |
if( radius>=MAX_BLUR ) radius = MAX_BLUR-1; |
| 177 | 177 |
|
| 178 |
// Box Blur size 'radius' |
|
| 179 |
/* |
|
| 180 |
for(int i=0; i<=radius; i++) |
|
| 181 |
{
|
|
| 182 |
mWeights[i] = 1.0f / (2.0f*radius+1.0f); |
|
| 183 |
mOffsets[i] = i*height; |
|
| 184 |
} |
|
| 185 |
*/ |
|
| 186 |
// Gaussian Blur size 'radius' |
|
| 187 |
|
|
| 188 | 178 |
float P = (float)NUM_GAUSSIAN / (radius>3 ? radius:3); |
| 189 | 179 |
float x = 0.0f; |
| 190 | 180 |
mWeights[0] = GAUSSIAN[0]; |
| ... | ... | |
| 201 | 191 |
|
| 202 | 192 |
mWeights[i] = (1-z)*GAUSSIAN[j] + z*GAUSSIAN[j+1]; |
| 203 | 193 |
sum += 2*mWeights[i]; |
| 204 |
mOffsets[i] = i*height; |
|
| 205 | 194 |
} |
| 206 | 195 |
|
| 207 | 196 |
for(int i=0; i<=radius; i++) |
| ... | ... | |
| 214 | 203 |
|
| 215 | 204 |
for(int i=0; i<numloops; i++) |
| 216 | 205 |
{
|
| 217 |
mOffsets[i+1] = mWeights[2*i+1]*mOffsets[2*i+1] + mWeights[2*i+2]*mOffsets[2*i+2];
|
|
| 206 |
mOffsets[i+1] = mWeights[2*i+1]*(2*i+1) + mWeights[2*i+2]*(2*i+2);
|
|
| 218 | 207 |
mWeights[i+1] = mWeights[2*i+1] + mWeights[2*i+2]; |
| 219 | 208 |
mOffsets[i+1] /= mWeights[i+1]; |
| 220 | 209 |
} |
| ... | ... | |
| 242 | 231 |
{
|
| 243 | 232 |
mBlurProgram.useProgram(); |
| 244 | 233 |
|
| 245 |
int radius = computeKernel( (int)mUniforms[0], 1/h ); |
|
| 234 |
int radius = computeGaussianKernel( (int)mUniforms[0] ); |
|
| 235 |
|
|
| 236 |
float adjust = 1/h; |
|
| 237 |
for(int i=0; i<=radius; i++) mOffsets[i] *= adjust; |
|
| 246 | 238 |
|
| 247 | 239 |
GLES30.glUniform1fv( mWeightsH, radius+1, mWeights,0); |
| 248 | 240 |
GLES30.glUniform1i( mRadiusH, radius); |
| ... | ... | |
| 267 | 259 |
df.setAsOutput(); |
| 268 | 260 |
GLES30.glViewport(0, 0, df.mWidth, df.mHeight); |
| 269 | 261 |
|
| 270 |
float adjust = h/w;
|
|
| 262 |
adjust = h/w; |
|
| 271 | 263 |
for(int i=0; i<=radius; i++) mOffsets[i] *= adjust; |
| 272 | 264 |
|
| 273 | 265 |
// vertical blur |
Also available in: Unified diff
Minor progress with Gaussian. Still need to cache the Weights and Offests tables.