我正在尝试为使用 GLESv2 的 Android 应用程序构建覆盖。我已经迷上了eglSwapBuffers,以便在帧完成之前插入我的渲染代码。
我可以做一些简单的事情,比如用剪刀测试画一个正方形:
glEnable(GL_SCISSOR_TEST);
glScissor(0, 0, 200, 200);
glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_SCISSOR_TEST);
Run Code Online (Sandbox Code Playgroud)
我还成功地使用以下代码绘制了简单的形状,但是一旦我开始使用顶点属性指针,应用程序就会停止正确渲染并显示一个大部分为黑色的屏幕,其中一小部分仍然可以正确显示。我确信我在这里破坏了一些 open-gl 状态,但我不确定它是什么。为了让应用程序继续使用我的叠加层正确渲染,我需要在绘制调用之前/之后保存/恢复什么?
// Save application state
GLint prev_program;
glGetIntegerv(GL_CURRENT_PROGRAM, &prev_program);
// Do overlay drawing
glUseProgram(program);
glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0, RectangleVertices);
glEnableVertexAttribArray(vPosition);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
glDisableVertexAttribArray(vPosition);
// Trying to restore application state here - there are probably more things that I'm missing.
glUseProgram(prevProgram);
Run Code Online (Sandbox Code Playgroud)