Revision 78db8663
Added by Leszek Koltunski about 7 years ago
src/main/java/org/distorted/library/EffectQueuePostprocess.java | ||
---|---|---|
259 | 259 |
{ |
260 | 260 |
compute(time); |
261 | 261 |
|
262 |
surface.mBuffer1.setAsInput(); |
|
263 |
float w = surface.mBuffer1.mWidth; |
|
264 |
float h = surface.mBuffer2.mHeight; |
|
262 |
float w1 = surface.mBuffer1[DistortedOutputSurface.CUR_MIPMAP].mWidth; |
|
263 |
float h1 = surface.mBuffer2[DistortedOutputSurface.CUR_MIPMAP].mHeight; |
|
264 |
float w2 = surface.mWidth; |
|
265 |
float h2 = surface.mHeight; |
|
265 | 266 |
|
266 | 267 |
int radius = (int)mUniforms[0]; |
267 | 268 |
if( radius>=MAX_BLUR ) radius = MAX_BLUR-1; |
... | ... | |
270 | 271 |
int offset = radius + radius*radius/4; |
271 | 272 |
radius = (radius+1)/2; |
272 | 273 |
|
273 |
GLES30.glViewport(0, 0, (int)w, (int)h); |
|
274 |
|
|
275 | 274 |
// horizontal blur |
275 |
GLES30.glViewport(0, 0, (int)w1, (int)h1); |
|
276 | 276 |
mBlur1Program.useProgram(); |
277 |
surface.mBuffer2.setAsOutput(time); |
|
277 |
surface.mBuffer1[DistortedOutputSurface.CUR_MIPMAP].setAsInput(); |
|
278 |
surface.mBuffer2[DistortedOutputSurface.CUR_MIPMAP].setAsOutput(time); |
|
278 | 279 |
|
279 | 280 |
GLES30.glUniform1fv( mWeights1H, radius+1, weightsCache,offset); |
280 | 281 |
GLES30.glUniform1i( mRadius1H, radius); |
281 | 282 |
GLES30.glUniform1f( mDepth1H , 1.0f-surface.mNear); |
282 | 283 |
GLES30.glUniform1i( mColorTexture1H , 0 ); |
283 |
for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/h; |
|
284 |
for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/h1;
|
|
284 | 285 |
GLES30.glUniform1fv( mOffsets1H ,radius+1, mOffsets,0); |
285 | 286 |
GLES30.glVertexAttribPointer(mBlur1Program.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
286 | 287 |
GLES30.glVertexAttribPointer(mBlur1Program.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture); |
287 | 288 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
288 | 289 |
|
289 | 290 |
// vertical blur |
291 |
GLES30.glViewport(0, 0, (int)w2, (int)h2); |
|
290 | 292 |
mBlur2Program.useProgram(); |
291 |
surface.mBuffer2.setAsInput(); |
|
292 |
surface.mBuffer1.setAsDepth(); |
|
293 |
surface.mBuffer2[DistortedOutputSurface.CUR_MIPMAP].setAsInput();
|
|
294 |
surface.mBuffer1[DistortedOutputSurface.CUR_MIPMAP].setAsDepth();
|
|
293 | 295 |
surface.setAsOutput(time); |
294 | 296 |
|
295 | 297 |
GLES30.glUniform1fv( mWeights2H, radius+1, weightsCache,offset); |
... | ... | |
297 | 299 |
GLES30.glUniform1f( mDepth2H , 1.0f-surface.mNear); |
298 | 300 |
GLES30.glUniform1i( mColorTexture2H , 0 ); |
299 | 301 |
GLES30.glUniform1i( mDepthTexture2H , 1 ); |
300 |
for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/w; |
|
302 |
for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/w1;
|
|
301 | 303 |
GLES30.glUniform1fv( mOffsets2H ,radius+1, mOffsets,0); |
302 | 304 |
GLES30.glVertexAttribPointer(mBlur2Program.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
303 | 305 |
GLES30.glVertexAttribPointer(mBlur2Program.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture); |
Also available in: Unified diff
Beginning of work on Mipmap levels.