【发布时间】:2015-01-05 20:16:02
【问题描述】:
我想对绑定到我的 opengl 上下文的相机预览的表面纹理进行加法混合。
如果我调用 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);预览是正确的,但由于我已经清除了缓冲区,所以我失去了我的添加剂混合!
使用 glClear 调用
没有 glClear 调用
我不知道问题是什么,我是opengl-es的新手,有什么建议吗? 如果需要任何代码,我可以提供以更好地理解问题。
只放相关代码。如有必要,请询问代码的任何其他部分。
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
//compile shader, link program.... etc omitted for brevity
//enable additive blending
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE);
GLES20.glBlendEquation(GLES30.GL_MAX);
}
public void onDrawFrame(GL10 unused) {
// Do not want to do this, but if i do preview is normal but i lose my blending
//GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
surfaceTexture.updateTexImage();
GLES20.glUseProgram(_onscreenShader);
int th = GLES20.glGetUniformLocation(_onscreenShader, "sTexture");
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, _rawVideoTexture);
GLES20.glUniform1i(th, 0);
GLES20.glVertexAttribPointer(_onscreenPositionAttribute, 2, GLES20.GL_FLOAT, false, 4 * 2, pVertex);
GLES20.glVertexAttribPointer(_onscreenUVAttribute, 2, GLES20.GL_FLOAT, false, 4 * 2, pTexCoord);
GLES20.glEnableVertexAttribArray(_onscreenPositionAttribute);
GLES20.glEnableVertexAttribArray(_onscreenUVAttribute);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
}
【问题讨论】:
-
我想知道甚至没有一个Android开发者尝试一下!
-
如果你再给我们看一些代码……
标签: android performance opengl-es