Java Code Examples for android.opengl.GLES20#glBindFramebuffer()
The following examples show how to use
android.opengl.GLES20#glBindFramebuffer() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: FrameBuffer.java From HokoBlur with Apache License 2.0 | 6 votes |
@Override public void bindTexture(ITexture texture) { if (texture == null) { return; } mTexture = texture; if (texture.id() != 0) { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBufferId); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, texture.id(), 0); } GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); }
Example 2
Source File: GlFilterGroup.java From CameraRecorder-android with MIT License | 6 votes |
@Override public void draw(final int texName, final GLES20FramebufferObject fbo) { prevTexName = texName; for (final Pair<GlFilter, GLES20FramebufferObject> pair : list) { if (pair.second != null) { if (pair.first != null) { pair.second.enable(); GLES20.glClear(GL_COLOR_BUFFER_BIT); pair.first.draw(prevTexName, pair.second); } prevTexName = pair.second.getTexName(); } else { if (fbo != null) { fbo.enable(); } else { GLES20.glBindFramebuffer(GL_FRAMEBUFFER, 0); } if (pair.first != null) { pair.first.draw(prevTexName, fbo); } } } }
Example 3
Source File: GlUtil.java From PLDroidShortVideo with Apache License 2.0 | 6 votes |
public static void createFBO(int[] fboTex, int[] fboId, int width, int height) { //generate fbo id GLES20.glGenFramebuffers(1, fboId, 0); //generate texture GLES20.glGenTextures(1, fboTex, 0); //Bind Frame buffer GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId[0]); //Bind texture GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, fboTex[0]); //Define texture parameters GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); //Attach texture FBO color attachment GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, fboTex[0], 0); //we are done, reset GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); }
Example 4
Source File: FrameBuffer.java From AAVT with Apache License 2.0 | 5 votes |
/** * 创建FrameBuffer * @param hasRenderBuffer 是否启用RenderBuffer * @param width 宽度 * @param height 高度 * @param texType 类型,一般为{@link GLES20#GL_TEXTURE_2D} * @param texFormat 纹理格式,一般为{@link GLES20#GL_RGBA}、{@link GLES20#GL_RGB}等 * @param minParams 纹理的缩小过滤参数 * @param maxParams 纹理的放大过滤参数 * @param wrapS 纹理的S环绕参数 * @param wrapT 纹理的W环绕参数 * @return 创建结果,0表示成功,其他值为GL错误 */ public int createFrameBuffer(boolean hasRenderBuffer,int width,int height,int texType,int texFormat, int minParams,int maxParams,int wrapS,int wrapT){ mFrameTemp=new int[4]; GLES20.glGenFramebuffers(1,mFrameTemp,0); GLES20.glGenTextures(1,mFrameTemp,1); GLES20.glBindTexture(texType,mFrameTemp[1]); GLES20.glTexImage2D(texType, 0,texFormat, width, height, 0, texFormat, GLES20.GL_UNSIGNED_BYTE, null); //设置缩小过滤为使用纹理中坐标最接近的一个像素的颜色作为需要绘制的像素颜色 GLES20.glTexParameteri(texType, GLES20.GL_TEXTURE_MIN_FILTER,minParams); //设置放大过滤为使用纹理中坐标最接近的若干个颜色,通过加权平均算法得到需要绘制的像素颜色 GLES20.glTexParameteri(texType, GLES20.GL_TEXTURE_MAG_FILTER,maxParams); //设置环绕方向S,截取纹理坐标到[1/2n,1-1/2n]。将导致永远不会与border融合 GLES20.glTexParameteri(texType, GLES20.GL_TEXTURE_WRAP_S,wrapS); //设置环绕方向T,截取纹理坐标到[1/2n,1-1/2n]。将导致永远不会与border融合 GLES20.glTexParameteri(texType, GLES20.GL_TEXTURE_WRAP_T,wrapT); GLES20.glGetIntegerv(GLES20.GL_FRAMEBUFFER_BINDING,mFrameTemp,3); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER,mFrameTemp[0]); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, texType, mFrameTemp[1], 0); if(hasRenderBuffer){ GLES20.glGenRenderbuffers(1,mFrameTemp,2); GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER,mFrameTemp[2]); GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER,GLES20.GL_DEPTH_COMPONENT16,width,height); GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER,GLES20.GL_DEPTH_ATTACHMENT,GLES20.GL_RENDERBUFFER,mFrameTemp[2]); } return GLES20.glGetError(); }
Example 5
Source File: CameraGLRendererBase.java From Document-Scanner with GNU General Public License v3.0 | 5 votes |
private void drawTex(int tex, boolean isOES, int fbo) { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fbo); if(fbo == 0) GLES20.glViewport(0, 0, mView.getWidth(), mView.getHeight()); else GLES20.glViewport(0, 0, mFBOWidth, mFBOHeight); GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); if(isOES) { GLES20.glUseProgram(progOES); GLES20.glVertexAttribPointer(vPosOES, 2, GLES20.GL_FLOAT, false, 4*2, vert); GLES20.glVertexAttribPointer(vTCOES, 2, GLES20.GL_FLOAT, false, 4*2, texOES); } else { GLES20.glUseProgram(prog2D); GLES20.glVertexAttribPointer(vPos2D, 2, GLES20.GL_FLOAT, false, 4*2, vert); GLES20.glVertexAttribPointer(vTC2D, 2, GLES20.GL_FLOAT, false, 4*2, tex2D); } GLES20.glActiveTexture(GLES20.GL_TEXTURE0); if(isOES) { GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, tex); GLES20.glUniform1i(GLES20.glGetUniformLocation(progOES, "sTexture"), 0); } else { GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, tex); GLES20.glUniform1i(GLES20.glGetUniformLocation(prog2D, "sTexture"), 0); } GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); GLES20.glFlush(); }
Example 6
Source File: CameraGLRendererBase.java From react-native-documentscanner-android with MIT License | 5 votes |
private void deleteFBO() { Log.d(LOGTAG, "deleteFBO("+mFBOWidth+"x"+mFBOHeight+")"); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); GLES20.glDeleteFramebuffers(1, FBO, 0); deleteTex(texFBO); deleteTex(texDraw); mFBOWidth = mFBOHeight = 0; }
Example 7
Source File: FBO.java From Fatigue-Detection with MIT License | 5 votes |
FBO create(int width,int height){ int[] frameBuffers = new int[1]; int[] frameBufferTextures = new int[1]; GLES20.glGenFramebuffers(1, frameBuffers, 0); GLES20.glGenTextures(1, frameBufferTextures, 0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, frameBufferTextures[0]); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width,height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBuffers[0]); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, frameBufferTextures[0], 0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); frameBuffer=frameBuffers[0]; frameBufferTexture=frameBufferTextures[0]; return this; }
Example 8
Source File: CameraGLRendererBase.java From OpenCvFaceDetect with Apache License 2.0 | 5 votes |
private void drawTex(int tex, boolean isOES, int fbo) { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fbo); if(fbo == 0) GLES20.glViewport(0, 0, mView.getWidth(), mView.getHeight()); else GLES20.glViewport(0, 0, mFBOWidth, mFBOHeight); GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); if(isOES) { GLES20.glUseProgram(progOES); GLES20.glVertexAttribPointer(vPosOES, 2, GLES20.GL_FLOAT, false, 4*2, vert); GLES20.glVertexAttribPointer(vTCOES, 2, GLES20.GL_FLOAT, false, 4*2, texOES); } else { GLES20.glUseProgram(prog2D); GLES20.glVertexAttribPointer(vPos2D, 2, GLES20.GL_FLOAT, false, 4*2, vert); GLES20.glVertexAttribPointer(vTC2D, 2, GLES20.GL_FLOAT, false, 4*2, tex2D); } GLES20.glActiveTexture(GLES20.GL_TEXTURE0); if(isOES) { GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, tex); GLES20.glUniform1i(GLES20.glGetUniformLocation(progOES, "sTexture"), 0); } else { GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, tex); GLES20.glUniform1i(GLES20.glGetUniformLocation(prog2D, "sTexture"), 0); } GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); GLES20.glFlush(); }
Example 9
Source File: CameraGLRendererBase.java From MOAAP with MIT License | 5 votes |
private void deleteFBO() { Log.d(LOGTAG, "deleteFBO("+mFBOWidth+"x"+mFBOHeight+")"); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); GLES20.glDeleteFramebuffers(1, FBO, 0); deleteTex(texFBO); deleteTex(texDraw); mFBOWidth = mFBOHeight = 0; }
Example 10
Source File: UWhiteningGPUVideoFilter.java From UCDLive_Android with MIT License | 5 votes |
@Override public void onDraw(int cameraTexture, int targetFrameBuffer, FloatBuffer shapeBuffer, FloatBuffer textrueBuffer) { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, targetFrameBuffer); GLES20.glUseProgram(glProgram); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, cameraTexture); GLES20.glUniform1i(glCamTextureLoc, 0); GLES20.glActiveTexture(GLES20.GL_TEXTURE1); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, imageTexture); GLES20.glUniform1i(glColorMapTextureLoc, 1); GLES20.glEnableVertexAttribArray(glCamPostionLoc); GLES20.glEnableVertexAttribArray(glCamTextureCoordLoc); shapeBuffer.position(0); GLES20.glVertexAttribPointer(glCamPostionLoc, 2, GLES20.GL_FLOAT, false, 2 * 4, shapeBuffer); textrueBuffer.position(0); GLES20.glVertexAttribPointer(glCamTextureCoordLoc, 2, GLES20.GL_FLOAT, false, 2 * 4, textrueBuffer); GLES20.glViewport(0, 0, width, height); GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); GLES20.glDrawElements(GLES20.GL_TRIANGLES, drawIndecesBuffer.limit(), GLES20.GL_UNSIGNED_SHORT, drawIndecesBuffer); GLES20.glFinish(); GLES20.glDisableVertexAttribArray(glCamPostionLoc); GLES20.glDisableVertexAttribArray(glCamTextureCoordLoc); GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0); GLES20.glUseProgram(0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); }
Example 11
Source File: GLES20Canvas.java From android-openGL-canvas with Apache License 2.0 | 4 votes |
private void setRenderTarget(BasicTexture oldTexture, RawTexture texture) { // FIXME: 2016/11/18 If client version is 2, then bufferOES will crash... if (oldTexture == null && texture != null) { if (texture.getTarget() == GLES20.GL_TEXTURE_2D) { GLES20.glGenFramebuffers(1, mFrameBuffer, 0); checkError(); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBuffer[0]); checkError(); } else { GLES11Ext.glGenFramebuffersOES(1, mFrameBuffer, 0); checkError(); GLES11Ext.glBindFramebufferOES(GLES11Ext.GL_FRAMEBUFFER_OES, mFrameBuffer[0]); checkError(); } } else if (oldTexture != null && texture == null) { if (oldTexture.getTarget() == GLES20.GL_TEXTURE_2D) { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); checkError(); GLES20.glDeleteFramebuffers(1, mFrameBuffer, 0); checkError(); } else { GLES11Ext.glBindFramebufferOES(GLES11Ext.GL_FRAMEBUFFER_OES, 0); checkError(); GLES11Ext.glDeleteFramebuffersOES(1, mFrameBuffer, 0); checkError(); } } if (texture == null) { setSize(mScreenWidth, mScreenHeight); } else { setSize(texture.getWidth(), texture.getHeight()); if (!texture.isLoaded()) { texture.prepare(this); } if (texture.getTarget() == GLES20.GL_TEXTURE_2D) { GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, texture.getTarget(), texture.getId(), 0); checkError(); checkFramebufferStatus(); } else { GLES11Ext.glFramebufferTexture2DOES(GLES11Ext.GL_FRAMEBUFFER_OES, GLES11Ext.GL_COLOR_ATTACHMENT0_OES, texture.getTarget(), texture.getId(), 0); checkError(); checkFramebufferStatusOes(); } } }
Example 12
Source File: FURenderer.java From PLDroidShortVideo with Apache License 2.0 | 4 votes |
private void createFBO(int width, int height) { if (fboTex != null && (fboWidth != width || fboHeight != height)) { deleteFBO(); } fboWidth = width; fboHeight = height; if (fboTex == null) { fboId = new int[4]; fboTex = new int[4]; renderBufferId = new int[4]; //generate fbo id GLES20.glGenFramebuffers(4, fboId, 0); //generate texture GLES20.glGenTextures(4, fboTex, 0); //generate render buffer GLES20.glGenRenderbuffers(4, renderBufferId, 0); for (int i = 0; i < fboId.length; i++) { //Bind Frame buffer GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId[i]); //Bind texture GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, fboTex[i]); //Define texture parameters GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); //Bind render buffer and define buffer dimension GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, renderBufferId[i]); GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16, width, height); //Attach texture FBO color attachment GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, fboTex[i], 0); //Attach render buffer to depth attachment GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, renderBufferId[i]); //we are done, reset GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); } } }
Example 13
Source File: FBO.java From PLDroidMediaStreaming with Apache License 2.0 | 4 votes |
/** * Prepares the off-screen framebuffer. */ private void prepareFramebuffer(int width, int height) { GlUtil.checkGlError("start"); int[] values = new int[1]; // Create a texture object and bind it. This will be the color buffer. GLES20.glGenTextures(1, values, 0); GlUtil.checkGlError("glGenTextures"); mOffscreenTexture = values[0]; // expected > 0 Log.i(TAG, "prepareFramebuffer mOffscreenTexture:" + mOffscreenTexture); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mOffscreenTexture); GlUtil.checkGlError("glBindTexture"); // Create texture storage. GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GlUtil.checkGlError("glTexParameter"); // Create framebuffer object and bind it. GLES20.glGenFramebuffers(1, values, 0); GlUtil.checkGlError("glGenFramebuffers"); mFramebuffer = values[0]; // expected > 0 GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFramebuffer); GlUtil.checkGlError("glBindFramebuffer " + mFramebuffer); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, mOffscreenTexture, 0); // See if GLES is happy with all this. int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER); if (status != GLES20.GL_FRAMEBUFFER_COMPLETE) { throw new RuntimeException("Framebuffer not complete, status=" + status); } GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); // Switch back to the default framebuffer. GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); GlUtil.checkGlError("glBindFramebuffer"); }
Example 14
Source File: PhotoFilterView.java From TelePlus-Android with GNU General Public License v2.0 | 4 votes |
private void drawCustomParamsPass() { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, renderFrameBuffer[1]); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, renderTexture[1], 0); GLES20.glClear(0); GLES20.glUseProgram(toolsShaderProgram); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTexture[0]); GLES20.glUniform1i(sourceImageHandle, 0); if (showOriginal) { GLES20.glUniform1f(shadowsHandle, 1); GLES20.glUniform1f(highlightsHandle, 1); GLES20.glUniform1f(exposureHandle, 0); GLES20.glUniform1f(contrastHandle, 1); GLES20.glUniform1f(saturationHandle, 1); GLES20.glUniform1f(warmthHandle, 0); GLES20.glUniform1f(vignetteHandle, 0); GLES20.glUniform1f(grainHandle, 0); GLES20.glUniform1f(fadeAmountHandle, 0); GLES20.glUniform3f(highlightsTintColorHandle, 0, 0, 0); GLES20.glUniform1f(highlightsTintIntensityHandle, 0); GLES20.glUniform3f(shadowsTintColorHandle, 0, 0, 0); GLES20.glUniform1f(shadowsTintIntensityHandle, 0); GLES20.glUniform1f(skipToneHandle, 1); } else { GLES20.glUniform1f(shadowsHandle, getShadowsValue()); GLES20.glUniform1f(highlightsHandle, getHighlightsValue()); GLES20.glUniform1f(exposureHandle, getExposureValue()); GLES20.glUniform1f(contrastHandle, getContrastValue()); GLES20.glUniform1f(saturationHandle, getSaturationValue()); GLES20.glUniform1f(warmthHandle, getWarmthValue()); GLES20.glUniform1f(vignetteHandle, getVignetteValue()); GLES20.glUniform1f(grainHandle, getGrainValue()); GLES20.glUniform1f(fadeAmountHandle, getFadeValue()); GLES20.glUniform3f(highlightsTintColorHandle, (tintHighlightsColor >> 16 & 0xff) / 255.0f, (tintHighlightsColor >> 8 & 0xff) / 255.0f, (tintHighlightsColor & 0xff) / 255.0f); GLES20.glUniform1f(highlightsTintIntensityHandle, getTintHighlightsIntensityValue()); GLES20.glUniform3f(shadowsTintColorHandle, (tintShadowsColor >> 16 & 0xff) / 255.0f, (tintShadowsColor >> 8 & 0xff) / 255.0f, (tintShadowsColor & 0xff) / 255.0f); GLES20.glUniform1f(shadowsTintIntensityHandle, getTintShadowsIntensityValue()); boolean skipTone = curvesToolValue.shouldBeSkipped(); GLES20.glUniform1f(skipToneHandle, skipTone ? 1.0f : 0.0f); if (!skipTone) { curvesToolValue.fillBuffer(); GLES20.glActiveTexture(GLES20.GL_TEXTURE1); GLES20.glBindTexture(GL10.GL_TEXTURE_2D, curveTextures[0]); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, 200, 1, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, curvesToolValue.curveBuffer); GLES20.glUniform1i(curvesImageHandle, 1); } } GLES20.glUniform1f(widthHandle, renderBufferWidth); GLES20.glUniform1f(heightHandle, renderBufferHeight); GLES20.glEnableVertexAttribArray(inputTexCoordHandle); GLES20.glVertexAttribPointer(inputTexCoordHandle, 2, GLES20.GL_FLOAT, false, 8, textureBuffer); GLES20.glEnableVertexAttribArray(positionHandle); GLES20.glVertexAttribPointer(positionHandle, 2, GLES20.GL_FLOAT, false, 8, vertexInvertBuffer); GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); }
Example 15
Source File: FrameBuffer.java From HokoBlur with Apache License 2.0 | 4 votes |
@Override public void bindSelf() { if (mFrameBufferId != 0) { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBufferId); } }
Example 16
Source File: FboTexture.java From PhotoMovie with Apache License 2.0 | 4 votes |
private void prepareFrameBuffer(int width, int height) { GlUtil.checkGlError("prepareFramebuffer start"); int[] values = new int[1]; // Create a texture object and bind it. This will be the color buffer. GLES20.glGenTextures(1, values, 0); GlUtil.checkGlError("glGenTextures"); int offscreenTexture = values[0]; // expected > 0 GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, offscreenTexture); GlUtil.checkGlError("glBindTexture " + offscreenTexture); // Create texture storage. GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); // Set parameters. We're probably using non-power-of-two dimensions, so // some values may not be available for use. GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GlUtil.checkGlError("glTexParameter"); // Create framebuffer object and bind it. GLES20.glGenFramebuffers(1, values, 0); GlUtil.checkGlError("glGenFramebuffers"); int framebuffer = values[0]; // expected > 0 GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, framebuffer); GlUtil.checkGlError("glBindFramebuffer " + framebuffer); // Create a depth buffer and bind it. GLES20.glGenRenderbuffers(1, values, 0); GlUtil.checkGlError("glGenRenderbuffers"); mRenderBuffer = values[0]; // expected > 0 GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, mRenderBuffer); GlUtil.checkGlError("glBindRenderbuffer " + mRenderBuffer); // Allocate storage for the depth buffer. GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16, width, height); GlUtil.checkGlError("glRenderbufferStorage"); // Attach the depth buffer and the texture (color buffer) to the framebuffer object. GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, mRenderBuffer); GlUtil.checkGlError("glFramebufferRenderbuffer"); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, offscreenTexture, 0); GlUtil.checkGlError("glFramebufferTexture2D"); // See if GLES is happy with all this. int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER); if (status != GLES20.GL_FRAMEBUFFER_COMPLETE) { throw new RuntimeException("Framebuffer not complete, status=" + status); } // Switch back to the default framebuffer. GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); GlUtil.checkGlError("prepareFramebuffer done"); mFrameBuffer = framebuffer; mId = offscreenTexture; }
Example 17
Source File: PhotoFilterView.java From TelePlus-Android with GNU General Public License v2.0 | 4 votes |
private void drawEnhancePass() { if (!hsvGenerated) { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, renderFrameBuffer[0]); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, renderTexture[0], 0); GLES20.glClear(0); GLES20.glUseProgram(rgbToHsvShaderProgram); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTexture[1]); GLES20.glUniform1i(rgbToHsvSourceImageHandle, 0); GLES20.glEnableVertexAttribArray(rgbToHsvInputTexCoordHandle); GLES20.glVertexAttribPointer(rgbToHsvInputTexCoordHandle, 2, GLES20.GL_FLOAT, false, 8, textureBuffer); GLES20.glEnableVertexAttribArray(rgbToHsvPositionHandle); GLES20.glVertexAttribPointer(rgbToHsvPositionHandle, 2, GLES20.GL_FLOAT, false, 8, vertexBuffer); GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); ByteBuffer hsvBuffer = ByteBuffer.allocateDirect(renderBufferWidth * renderBufferHeight * 4); GLES20.glReadPixels(0, 0, renderBufferWidth, renderBufferHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, hsvBuffer); GLES20.glBindTexture(GL10.GL_TEXTURE_2D, enhanceTextures[0]); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, hsvBuffer); ByteBuffer buffer = null; try { buffer = ByteBuffer.allocateDirect(PGPhotoEnhanceSegments * PGPhotoEnhanceSegments * PGPhotoEnhanceHistogramBins * 4); Utilities.calcCDT(hsvBuffer, renderBufferWidth, renderBufferHeight, buffer); } catch (Exception e) { FileLog.e(e); } GLES20.glBindTexture(GL10.GL_TEXTURE_2D, enhanceTextures[1]); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, 256, 16, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer); hsvGenerated = true; } GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, renderFrameBuffer[1]); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, renderTexture[1], 0); GLES20.glClear(0); GLES20.glUseProgram(enhanceShaderProgram); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, enhanceTextures[0]); GLES20.glUniform1i(enhanceSourceImageHandle, 0); GLES20.glActiveTexture(GLES20.GL_TEXTURE1); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, enhanceTextures[1]); GLES20.glUniform1i(enhanceInputImageTexture2Handle, 1); if (showOriginal) { GLES20.glUniform1f(enhanceIntensityHandle, 0); } else { GLES20.glUniform1f(enhanceIntensityHandle, getEnhanceValue()); } GLES20.glEnableVertexAttribArray(enhanceInputTexCoordHandle); GLES20.glVertexAttribPointer(enhanceInputTexCoordHandle, 2, GLES20.GL_FLOAT, false, 8, textureBuffer); GLES20.glEnableVertexAttribArray(enhancePositionHandle); GLES20.glVertexAttribPointer(enhancePositionHandle, 2, GLES20.GL_FLOAT, false, 8, vertexBuffer); GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); }
Example 18
Source File: GLTextureOutputRenderer.java From UltimateAndroid with Apache License 2.0 | votes |
private void initFBO() { if(frameBuffer != null) { GLES20.glDeleteFramebuffers(1, frameBuffer, 0); frameBuffer = null; } if(texture_out != null) { GLES20.glDeleteTextures(1, texture_out, 0); texture_out = null; } if(depthRenderBuffer != null) { GLES20.glDeleteRenderbuffers(1, depthRenderBuffer, 0); depthRenderBuffer = null; } frameBuffer = new int[1]; texture_out = new int[1]; depthRenderBuffer = new int[1]; GLES20.glGenFramebuffers(1, frameBuffer, 0); GLES20.glGenRenderbuffers(1, depthRenderBuffer, 0); GLES20.glGenTextures(1, texture_out, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBuffer[0]); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture_out[0]); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, getWidth(), getHeight(), 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, texture_out[0], 0); GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, depthRenderBuffer[0]); GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16, getWidth(), getHeight()); GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, depthRenderBuffer[0]); int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER); if (status != GLES20.GL_FRAMEBUFFER_COMPLETE) { throw new RuntimeException(this+": Failed to set up render buffer with status "+status+" and error "+GLES20.glGetError()); } }
Example 19
Source File: TwoPassFilter.java From AndroidFastImageProcessing with MIT License | votes |
private void initFBO() { if(firstPassFrameBuffer != null) { GLES20.glDeleteFramebuffers(1, firstPassFrameBuffer, 0); firstPassFrameBuffer = null; } if(firstPassTextureOut != null) { GLES20.glDeleteTextures(1, firstPassTextureOut, 0); firstPassTextureOut = null; } if(firstPassDepthRenderBuffer != null) { GLES20.glDeleteRenderbuffers(1, firstPassDepthRenderBuffer, 0); firstPassDepthRenderBuffer = null; } firstPassFrameBuffer = new int[1]; firstPassTextureOut = new int[1]; firstPassDepthRenderBuffer = new int[1]; GLES20.glGenFramebuffers(1, firstPassFrameBuffer, 0); GLES20.glGenRenderbuffers(1, firstPassDepthRenderBuffer, 0); GLES20.glGenTextures(1, firstPassTextureOut, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, firstPassFrameBuffer[0]); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, firstPassTextureOut[0]); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, getWidth(), getHeight(), 0, GLES20.GL_RGB, GLES20.GL_UNSIGNED_SHORT_5_6_5, null); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, firstPassTextureOut[0], 0); GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, firstPassDepthRenderBuffer[0]); GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16, getWidth(), getHeight()); GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, firstPassDepthRenderBuffer[0]); int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER); if (status != GLES20.GL_FRAMEBUFFER_COMPLETE) { throw new RuntimeException(this+": Failed to set up render buffer with status "+status+" and error "+GLES20.glGetError()); } }
Example 20
Source File: TwoPassFilter.java From UltimateAndroid with Apache License 2.0 | votes |
private void initFBO() { if(firstPassFrameBuffer != null) { GLES20.glDeleteFramebuffers(1, firstPassFrameBuffer, 0); firstPassFrameBuffer = null; } if(firstPassTextureOut != null) { GLES20.glDeleteTextures(1, firstPassTextureOut, 0); firstPassTextureOut = null; } if(firstPassDepthRenderBuffer != null) { GLES20.glDeleteRenderbuffers(1, firstPassDepthRenderBuffer, 0); firstPassDepthRenderBuffer = null; } firstPassFrameBuffer = new int[1]; firstPassTextureOut = new int[1]; firstPassDepthRenderBuffer = new int[1]; GLES20.glGenFramebuffers(1, firstPassFrameBuffer, 0); GLES20.glGenRenderbuffers(1, firstPassDepthRenderBuffer, 0); GLES20.glGenTextures(1, firstPassTextureOut, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, firstPassFrameBuffer[0]); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, firstPassTextureOut[0]); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, getWidth(), getHeight(), 0, GLES20.GL_RGB, GLES20.GL_UNSIGNED_SHORT_5_6_5, null); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, firstPassTextureOut[0], 0); GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, firstPassDepthRenderBuffer[0]); GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16, getWidth(), getHeight()); GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, firstPassDepthRenderBuffer[0]); int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER); if (status != GLES20.GL_FRAMEBUFFER_COMPLETE) { throw new RuntimeException(this+": Failed to set up render buffer with status "+status+" and error "+GLES20.glGetError()); } }