美文网首页
记OpenGL开发中一个低级错误

记OpenGL开发中一个低级错误

作者: Damon_He | 来源:发表于2021-05-24 15:13 被阅读0次

OpenGL ES程序运行报错:

A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 21994 (GLThread 5518)

Debug定位问题是在Renderer 的onSurfaceCreated方法中,创建Program代码块。

override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
        GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f)
        createProgram(vertexShaderCode, fragmentShaderCode)
        ……
}

进一步定位具体调用代码处为编译着色器代码时,调用GLES20.glCreateShader()发生崩溃:

private fun compileShader(shaderType: Int, shaderCode: String): Int {
        val shaderObjectId = GLES20.glCreateShader(shaderType)
        checkGlError("glCreateShader")
        if (shaderObjectId == 0) {
            return 0
        }
        ……
}

难道是不在GLThread中?显然经过反复确认代码调用链,是在onSurfaceCreated中调用的glCreateShader,这就很诡异了。。。

先排除createProgram 函数中代码块是否有鬼。将glCreateShader单独拎出来调用试一试:

override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
        GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f)
        GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER)
       // createProgram(vertexShaderCode, fragmentShaderCode)
        ……
}

程序运行,崩溃依旧,还是鲜红的 libc: Fatal signal 11 。那问题到底出在哪呢?
只能将OpenGL 相关代码逐行排查了,然后从初始化Renderer的代码处发现下面代码:

override fun initData() {
    ……
    mRender = ImageRender(
        context = this,
        vertexSourceId = R.raw.image_vert,
        fragmentSourceId = R.raw.image_frag
    )
    binding.glSurfaceView.setRenderer(mRender)
    ……
}

仔细一看,漏调用了关键函数setEGLContextClientVersion
补上后,程序运行正常。

相关文章

  • 记OpenGL开发中一个低级错误

    OpenGL ES程序运行报错: Debug定位问题是在Renderer 的onSurfaceCreated方法中...

  • 软件测试面试

    1、开发犯低级错误怎么办?开发首先要规范好编码,出低级错时不要指责,内心指出错误。让他们自己进行测试,反思找出错误...

  • 软件测试面试题集

    1、开发犯低级错误怎么办? 开发首先要规范好编码,出低级错时不要职责,内心指出错误。让他们自己进行测试,反思...

  • 测试面试题

    1、开发犯低级错误怎么办? 开发首先要规范好编码,出低级错时不要指责,内心指出错误。让他们自己进行测试,反思找出错...

  • 记一个低级的错误

    现象 一个简单的App,在测试机iPhone6S上正常运行,准备打包了。临时发现需要iPhone5尺寸的应用截图,...

  • 犯了个低级错误

    今天为了找一张税票的存根联,浪费了好多时间。 平时开完税票,都是直接将存根联放在专门的文件袋里。那天开完票后,不知...

  • 低级错误

    2018年2月10日晚上,我最亲爱的奶奶不幸与世长辞。 悼念持续18天。按照家乡的风俗习惯,期间要做道场,...

  • 低级错误

    今天写了一天的选择框...刚刚才算真正的完成, 开始有四个下拉选择 城市和 排序本来可以共用一个界面 一个下拉Vi...

  • 低级错误

    人难免犯错。有的是人的智力、能力所不能及,有的是不可抗力的因素,有点则是因为人的疏忽大意不经意间犯下本不应...

  • 低级错误

    我们到底是谁?首先我们是人,那应该是高级动物,但你信吗?我们每天都在犯低级错误。比如说想健康长寿的人很多,每天早晨...

网友评论

      本文标题:记OpenGL开发中一个低级错误

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