Android OpenGL ES踩坑记录

因为项目中的一个自定义绘图控件性能不行,改用OpenGL实现,也是第一次使用OpenGL,由于只是绘制2D图形,参考官方以及网上的教程,实现起来还是比较顺畅的,开发时只用了两个手机测试,运行良好,性能达标,结果换其他手机测试,闪退!!!各种搜索,也没有搜到有相关经验的文章,懵了,后面修复这个闪退花费了10天,看闪退日志像是骁龙处理器驱动问题,APP调用 glDrawArrays 就闪退:

2023-11-07 17:45:20.469 17944-17944 DEBUG                    A  signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A  Cause: null pointer dereference
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      x0  00000071d37180e0  x1  0000000000000000  x2  0000000000000040  x3  00000071e2d8a790
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      x4  0000000000000040  x5  00000071d3718120  x6  0000000000000010  x7  0000000000000000
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      x8  0000000000000000  x9  000000000000003f  x10 0000000000000040  x11 0000000000000004
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      x12 0000000000000010  x13 b400007352c12fb8  x14 0000000000000040  x15 b400007432b52050
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      x16 000000723c16caf0  x17 000000752c86a820  x18 00000071daa72000  x19 b40000728eb73290
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      x20 0000000000000004  x21 000000000000002c  x22 0000000000000001  x23 00000071d37180c0
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      x24 b4000072d4b4d640  x25 0000000000000020  x26 b40000728eb732ac  x27 b400007360b3d370
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      x28 b400007352c12fd8  x29 00000071e2d8a9b0
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A      lr  000000723c1250b4  sp  00000071e2d8a6c0  pc  000000752c86a6d0  pst 0000000080001000
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A  backtrace:
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A        #00 pc 000000000004d6d0  /apex/com.android.runtime/lib64/bionic/libc.so (__memcpy+32) (BuildId: 0ae8741b5e25fc676164a0da53a77631)
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A        #01 pc 00000000003d60b0  /vendor/lib64/egl/libGLESv2_adreno.so (!!!0000!f56be09eb88f86833124f1df42e945!8699000cd8!+11640) (BuildId: e877ac50f8aa780773379056a8a6fc9e)
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A        #02 pc 00000000001bb454  /vendor/lib64/egl/libGLESv2_adreno.so (!!!0000!6b200851123c7898055fe62ff9f71f!8699000cd8!+2388) (BuildId: e877ac50f8aa780773379056a8a6fc9e)
2023-11-07 17:45:20.469 17944-17944 DEBUG                    A        #03 pc 00000000001a0c14  /vendor/lib64/egl/libGLESv2_adreno.so (!!!0000!28254c066fd778faffa7894b1bd8b1!8699000cd8!+196) (BuildId: e877ac50f8aa780773379056a8a6fc9e)

看到这些log,差点以为无解了,后面改用VAO VBO去加载顶点数据,哎呀!好了!

具体实施方式就是把

GLES30.glVertexAttribPointer(positionHandle, 2, GLES30.GL_FLOAT, false, 0, vertexBuffer)

替换成

GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, buffer)
GLES30.glBufferData(GLES30.GL_ARRAY_BUFFER, vertexBuffer.capacity() * 4, vertexBuffer, GLES30.GL_STATIC_DRAW)
GLES30.glVertexAttribPointer(positionHandle, 2, GLES30.GL_FLOAT, false, 0, 0)

还有个小插曲,就是画点的时候有些手机设置 glLineWidth 可以调整点的大小,有些手机不行,以至于本人以为这些手机画不出点来,这种情况得在着色器代码中使用专用的 gl_PointSize 来调整点的大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/136091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day45 力扣动态规划 : 1143.最长公共子序列 |1035.不相交的线 | 53. 最大子序和

Day45 力扣动态规划 : 1143.最长公共子序列 |1035.不相交的线 | 53. 最大子序和 1143.最长公共子序列第一印象看完题解的思路实现中的困难感悟代码 1035.不相交的线第一印象感悟代码 53. 最大子序和第一印象dp递推公式初始化遍历顺序 实现中的困难感悟代…

数字政府!3DCAT实时云渲染助推上海湾区数字孪生平台

数字孪生,是一种利用物理模型、传感器数据、运行历史等信息,在虚拟空间中构建实体对象或系统的精确映射,从而实现对其全生命周期的仿真、优化和管理的技术。数字孪生可以应用于各个领域,如工业制造、智慧城市、医疗健康、教育培训…

原厂可调漏电继电器 LLJ-125F Φ45导轨安装可选面板安装

LLJ-F(S)系列漏电继电器 原厂漏电继电器 LLJ-125F Φ45 导轨安装 系列型号: LLJ-10F(S)漏电继电器LLJ-15F(S)漏电继电器LLJ-16F(S)漏电继电器 LLJ-25F(S)漏电继电器LLJ-30F(S)漏电继电器LLJ-32F(S)漏电继电器 LLJ-60F(S)漏电继电器LLJ-63F(S)漏电继电器LLJ-80F(S)…

渲染管线详解

光栅化的渲染管线一般分为三大阶段:应用程序阶段->几何阶段->光栅化阶段 也可以四大阶段: 应用程序阶段->几何阶段->光栅化阶段->逐片元操作阶段 更详细的流程如下: Vertex Specification(顶点规范化&#xff09…

一文搞定多端开发,做全栈大牛 附三大企业实战项目

一个功能三套代码 一改需求就是加不完的班? 不存在的,告别改改改 拥抱多端开发 一套代码搞定多个平台 高效开发:一套代码,多端通用 根据统计数据,全球移动设备用户数已经超过了50亿。随着智能手机、平板电脑等移动…

【开题报告】基于微信小程序的校园订餐平台的设计与实现

1.选题背景 基于微信小程序的校园订餐平台选题背景可以从以下几个方面展开阐述: (1)校园订餐现状:介绍当前大学校园内学生和教职工的就餐情况,包括饭堂就餐、外卖订餐等方式,以及存在的问题,如…

JSON——数组语法

一段JSON可能是以 ”{“ 开头 也可能仅包含一段JSON数组 如下 [ { "name" : "hello,world"}, {"name" : "SB JSON”}, {“name” : "SB互联网房地产CNM“}, ] 瞧,蛋疼不...CJSON过来还是得搜下网…

【ES专题】Logstash与FileBeat详解以及ELK整合详解

目录 前言阅读对象阅读导航前置知识笔记正文一、ELK架构1.1 经典的ELK1.2 整合消息队列Nginx架构 二、LogStash介绍2.1 Logstash核心概念2.1.1 Pipeline2.1.2 Event2.1.3 Codec (Code / Decode)2.1.4 Queue 2.2 Logstash数据传输原理2.3 Logstash的安装(以windows为…

Python tkinter用iconphoto方法修改窗口标题的图片

修改Python Tkinter窗口的标题图片,可以使用PhotoImage、iconphoto方法。这个方法允许你设置窗口的图标。 运行结果 代码示例如下: import tkinter as tkroot Tk()# 加载图片,记住一定是要PNG图片 icon tk.PhotoImage(filephoto\\图片.pn…

python的format函数的用法及实例

目录 1.format函数的语法及用法 (1)语法:{}.format() (2)用法:用于格式化字符串。可以接受无限个参数,可以指定顺序。返回结果为字符串。 2.实例 (1)不设置位置&…

ChatGPT - 在ChatGPT中设置通用提示模板

文章目录 Prompt设置验证 Prompt VERBOSITY: 我可能会使用 V[0-3] 来定义代码的详细程度:V0 简洁明了 V1 简练 V2 详细 V3 非常详细,附有例子助理回应 您是用户问题背景下的主题专家。我们一步一步来:除非您只是回答一个简短的问题&#xff…

探索环保葡萄酒之生物动力

根据生物动力农业和园艺协会的说法,生物动力农业是“一种精神-伦理-生态的农业、园艺、食品生产和营养方法。”生物动力农民将他们的农场或葡萄园视为一个坚固的有机体,一个自我维持的生态系统。这些农业哲学和实践在整个农业周期中应用了一种整体方法。…

【使用python写一段代码将pdf文件转换为word文件】

突然有一个需求 就是将一份老板发的PDF文件,转换为Word文档,发现要么收费,要么就是有水印,更有甚者需要将转换收费(美其名曰就是需要开会员),那能惯着他吗 开整! 1.使用python写一段…

计算机毕业设计基于springboot+java+vue的健身房课程预约信息网站

运行环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven 项目介绍 本健身网…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发005:守护进程与进程监控

文章目录 1 守护进程1.1 进程组和会话1.2 会话的相关概念1.3 守护进程的概念1.4 守护线程的特点1.5 守护进程创建的基本步骤1.6 本项目守护进程的实现 2 进程监控2.1 进程监控的实现 1 守护进程 1.1 进程组和会话 进程除了有进程的PID之外还有一个进程组,进程组是…

AD9371 Crossbar

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

uni-app实现扫码功能

实现扫码功能,我们需要调用uni-app的scanCode saoma(){//调用scanCode实现扫码功能uni.scanCode({//是否只能从相机扫码,不能从相册扫码onlyFromCamera:false,//规定扫码类型 字节跳动小程序不支持此参数// barcode就是一维码(条形码) qrcode就是(er)维码 // datamatrix就是…

Ubuntu18.04安装pcl-1.12.1,make时报错:/usr/bin/ld: cannot find -lvtkIOMPIImage

解决方案: 在vtk安装包中,重新打开cmake-gui,然后勾选上VTK_Group_MPI和VTK_Group_Imaging。 cd VTK-8.2.0 cd build cmake-gui然后重新编译生成。 make -j8 # 或者j4,量力而行。 sudo make install 就可以解决了。 然后重新回到pcl安装…

web3 从redux中拿出所有已完成订单 并渲染到对应的Table列表中

上文web3 React dapp项目通过事件从区块链中拿到 已取消 已完成 和所有的订单数据 并存入redux中 中 我们已经从 区块中拿到了自己的订单 然后 我们恢复一下上文的环境 ganache ganache -d然后 登一下 MetaMask 然后 用我们的项目 发布一下合约 truffle migrate --reset然后…

vue:写一个数组box和list数组,在保留box数组中原有对象的同时,将list数组中每一个对象插入到box数组后面

前言:由于源码涉及到后端调用数据和一些无关的功能所以我就专门针对这个功能的代码,这样好方便理解。 1、在data中定义两个数组:box和list,并给它们初始化值 data() {return {box: [/*初始的box数组对象*/],list: [/*初始的list…