Revision 5ccafcca
Added by Leszek Koltunski over 7 years ago
src/main/java/org/distorted/library/EffectQueuePostprocess.java | ||
---|---|---|
77 | 77 |
|
78 | 78 |
// BLUR effect |
79 | 79 |
private static DistortedProgram mBlurProgram; |
80 |
private static int mRadiusH,mStepH,mWeightsH,mObjDH,mMVPMatrixH;
|
|
80 |
private static int mRadiusH,mOffsetsH,mWeightsH,mObjDH,mMVPMatrixH;
|
|
81 | 81 |
private float[] mWeights = new float[MAX_BLUR]; |
82 |
|
|
82 |
private float[] mOffsets = new float[MAX_BLUR]; |
|
83 | 83 |
// another effect .... |
84 | 84 |
|
85 | 85 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
103 | 103 |
|
104 | 104 |
int blurProgramH = mBlurProgram.getProgramHandle(); |
105 | 105 |
mRadiusH = GLES30.glGetUniformLocation( blurProgramH, "u_Radius"); |
106 |
mStepH = GLES30.glGetUniformLocation( blurProgramH, "u_Step");
|
|
106 |
mOffsetsH = GLES30.glGetUniformLocation( blurProgramH, "u_Offsets");
|
|
107 | 107 |
mWeightsH = GLES30.glGetUniformLocation( blurProgramH, "u_Weights"); |
108 | 108 |
mObjDH = GLES30.glGetUniformLocation( blurProgramH, "u_objD"); |
109 | 109 |
mMVPMatrixH = GLES30.glGetUniformLocation( blurProgramH, "u_MVPMatrix"); |
... | ... | |
167 | 167 |
for(int i=0; i<=radius; i++) |
168 | 168 |
{ |
169 | 169 |
mWeights[i] = 1.0f / (2.0f*radius+1.0f); |
170 |
mOffsets[i] = i/h; |
|
170 | 171 |
} |
171 | 172 |
|
172 | 173 |
GLES30.glUniform1fv( mWeightsH, radius+1, mWeights,0); |
174 |
GLES30.glUniform1fv( mOffsetsH ,radius+1, mOffsets,0); |
|
173 | 175 |
GLES30.glUniform1i( mRadiusH, radius); |
174 | 176 |
GLES30.glUniform2f( mObjDH , w, h ); |
175 | 177 |
|
... | ... | |
182 | 184 |
Matrix.multiplyMM(mMVPMatrix, 0, mBufferFBO.mProjectionMatrix, 0, mTmpMatrix, 0); |
183 | 185 |
|
184 | 186 |
// horizontal blur |
185 |
GLES30.glUniform1f( mStepH , 1/h ); |
|
187 |
|
|
186 | 188 |
GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0); |
187 | 189 |
GLES30.glVertexAttribPointer(mBlurProgram.mAttribute[0], POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
188 | 190 |
GLES30.glVertexAttribPointer(mBlurProgram.mAttribute[1], TEX_DATA_SIZE , GLES30.GL_FLOAT, false, 0, mQuadTextureInv); |
... | ... | |
192 | 194 |
df.setAsOutput(); |
193 | 195 |
GLES30.glViewport(0, 0, df.mWidth, df.mHeight); |
194 | 196 |
|
197 |
float adjust = h/w; |
|
198 |
for(int i=0; i<=radius; i++) mOffsets[i] *= adjust; |
|
199 |
|
|
195 | 200 |
// vertical blur |
196 |
GLES30.glUniform1f( mStepH , 1/w );
|
|
201 |
GLES30.glUniform1fv( mOffsetsH ,radius+1, mOffsets,0);
|
|
197 | 202 |
GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mvp , 0); |
198 | 203 |
GLES30.glVertexAttribPointer(mBlurProgram.mAttribute[0], POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
199 | 204 |
GLES30.glVertexAttribPointer(mBlurProgram.mAttribute[1], TEX_DATA_SIZE , GLES30.GL_FLOAT, false, 0, mQuadTextureInv); |
Also available in: Unified diff
Separable Box blur fully works now!