美文网首页OpenGLOpenGL ES图形处理Android知识
Android OpenGL 渲染黑屏调试技巧

Android OpenGL 渲染黑屏调试技巧

作者: 古月XYZ | 来源:发表于2017-08-25 15:21 被阅读146次

关键词: android, opengl, glsl, shader

调试过程中积累了不少 bug 案例看这里.

由于 shader 脚本的编译和 android java 代码的编译运行是分离的, 所以 shader 脚本的无法断点调试或输出 log.
这里再分享一个定位 shader 编译 bug 的方法, 通常这也是造成渲染黑屏的主要原因.

1 编译错误

解法来自于 android-gpuimage 源码:

    public static int loadShader(final String strSource, final int iType) {
        int[] compiled = new int[1];
        int iShader = GLES20.glCreateShader(iType);
        GLES20.glShaderSource(iShader, strSource);
        GLES20.glCompileShader(iShader);
        GLES20.glGetShaderiv(iShader, GLES20.GL_COMPILE_STATUS, compiled, 0);
        if (compiled[0] == 0) {
            Log.d("Load Shader Failed", "Compilation\n" + GLES20.glGetShaderInfoLog(iShader));
            return 0;
        }
        return iShader;
    }

在加载 shader 脚本的时候会返回 shader 的编译错误信息, 只需要过滤这里的 log 即可知道 shader 脚本出了什么语法错误.

看看 OpenGL 参考文档, 发现有这么2个可用的 log 输出接口:

glGetShaderInfoLog — Returns the information log for a shader object
glGetProgramInfoLog — Returns the information log for a program object

2 运行输出

如果想把运行结果以日志的形式输出到图像里, 在 StackOverFlow 上找了一圈发现也是可以做到的, 参考如下脚本:

void output(int x, int y, float r, float g, float b, int font, char *string)
{
  glColor3f( r, g, b );
  glRasterPos2f(x, y);
  int len, i;
  len = (int)strlen(string);
  for (i = 0; i < len; i++) {
    glutBitmapCharacter(font, string[i]);
  }
}

这里 有篇文章甚至能让其显示中文字符, 666

相关文章

  • Android OpenGL 渲染黑屏调试技巧

    关键词: android, opengl, glsl, shader 调试过程中积累了不少 bug 案例看这里. ...

  • [Android] Opengl ES 机型适配 bug 汇总

    标签 : glsl, shader, opengl, android, 黑屏 自己写的 opengl shader...

  • 六、OpenGL 渲染技巧:深度测试、多边形偏移、 混合

    OpenGL + OpenGL ES +Metal 系列文章汇总 深度测试 在上一篇五、OpenGL 渲染技巧:正...

  • OpenGl ES 3.0基础(kotlin)

    OpenGL ES 3.0 基础 OpenGL ES 对于Android来说是渲染在GLSurfaceView上 ...

  • OpenGL渲染技巧

      在OpenGL渲染中, 我们会碰到各种各样的问题,所以也会对应的产生各种各样的渲染技巧,接下来就介绍我们最经常...

  • OpenGL渲染技巧

    1、渲染过程产⽣的问题 在绘制3D场景的时候,我们需要决定哪些部分是对观察者 可见的,或者哪些部分是对观察者不可⻅...

  • OpenGL渲染技巧

    1、隐藏面消除 在渲染3D场景过程中可能会产生以下问题 我们需要决定哪些部分是对观察者可⻅的,或者哪些部分是对观察...

  • OpenGL渲染技巧

    OpenGL渲染技巧 了解了OpenGL的渲染流程和常用API后,就可以简单的绘制出图形了。但是在绘制中可能会碰到...

  • OpenGL渲染技巧

    首先,我们来绘制一个3D图形“甜甜圈”,示例程序运行效果如下: 咋看,似乎没什么问题。但当我们试着向右旋转它的时候...

  • OpenGL渲染技巧

    深度测试 在之前我们已经讲过深度测试的大部分内容,这次就完善一下之前的内容。首先深度测试解决的问题:当我们绘制的图...

网友评论

    本文标题:Android OpenGL 渲染黑屏调试技巧

    本文链接:https://www.haomeiwen.com/subject/eabudxtx.html