小编Myl*_*wed的帖子

Android 上的 Gles2.0 覆盖

我正在尝试为使用 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)

c++ android opengl-es android-ndk

7
推荐指数
1
解决办法
226
查看次数

标签 统计

android ×1

android-ndk ×1

c++ ×1

opengl-es ×1