我已经成功设置了OpenGL上下文,并且可以在屏幕上绘制纹理,但是一旦初始化CGEFrameRenderer(来自gpu-image-library-仅实例化并调用init),就无法在屏幕上渲染其他任何内容。知道我可能会缺少什么吗?
EGL14.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
if (frameRenderer == null) {
frameRenderer = new CGEFrameRenderer();
frameRenderer.init(width, height, width, height);
}
我要做的是使用此frameRenderer在多个纹理上应用滤镜,然后使用结果在屏幕上绘制多个图像。我弄清楚了第二部分,所有内容都可以很好地渲染,但是一旦初始化了frameRenderer,就无法在屏幕上渲染其他任何内容。
在渲染之前,请确保使用相同的eglContext(已编译的着色器程序),重置视口并绑定默认的帧缓冲区。
EGLContext currentContext = EGL14.eglGetCurrentContext();
if (currentContext.equals(eglContext)) {
EGL14.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
}
GLES20.glUseProgram(shaderProgram);
GLES20.glViewport(0, 0, w.width, w.height);
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
每帧清除每个帧深度和颜色缓冲区。
编辑:从我收集到的信息来看,我过去通过动态发送顶点,纹理坐标以及库在屏幕上进行渲染的方式在on scree quad上渲染的方式似乎存在问题通过设置STATIC_DRAW vertexBuffer,我也动态查询了属性位置,并且我注意到该库将顶点属性位置设置为0(我想这是很常见的做法)。从那时起,我过渡到仅使用库类进行渲染,问题不再存在