-
Notifications
You must be signed in to change notification settings - Fork 11
Open
Description
使用 极米 Z6X,生成 release 版本游戏,打开大厅(启动摄像头服务),摄像头开始预览后,打开调试界面,会导致 程序崩溃,错误日志如下:
#00 pc 00018e44 /system/lib/libc.so (memcpy+100)
#01 pc 002828d8 /vendor/lib/egl/libGLES_mali.so
#02 pc cfc7e21c <unknown/absolute>
如果从大厅中打开一个空面板,或者进入 Loading 界面,会导致面板显示花屏。其他情况(例如 debug 包,先进入游戏再打开调试界面,使用别的投影设备)下不会出现异常。
错误定位:
Java 端 帧缓冲 中获取图像,使用了 fragment_ext.glsl 的 shader 文件。执行 Texture2DExt 的 draw() 函数, glEnableVertexAttribArray (顶点属性)使用后没有关闭,打开界面 / 切换场景时会写入新的数据会导致错误。
思考方案:
使用 PBO 的 glReadPixel 获取颜色数据后,直接使用 Unity 的 LoadRawTextureData 读取,绕过 Texture2DExt 部分。
已做尝试:
直接关闭 Texture2DExt 部分后,glReadPixel 获取颜色数据为空。推测 FBO 应该是需要渲染纹理的。
直接使用 glDisableVertexAttribArray,开发板上显示正常,但 极米 Z6X 显示黑屏。
在文章中,找到了类似的情况:
这里遇到一个坑就是,如果在glDrawElements或glDrawArrays后调用以下的方法:
GLES20.glDisableVertexAttribArray(positionHandle); GLES20.glDisableVertexAttribArray(maTextureHandle);那么就会出现
validate_vertex_attrib_state: no vertex attrib is enabled in a draw call错误!!!
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels