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 来调整点的大小。
相关文章:
Android OpenGL ES踩坑记录
因为项目中的一个自定义绘图控件性能不行,改用OpenGL实现,也是第一次使用OpenGL,由于只是绘制2D图形,参考官方以及网上的教程,实现起来还是比较顺畅的,开发时只用了两个手机测试,运行良好&#…...
Vue3 项目完整配置
目录 一、配置简述二、创建项目1、使用包管理工具 pnpm2、新增目录 三、配置 ESLint1、添加代码2、修改 VSCode 配置 四、husky 工具配置五、暂存区 eslint 校验六、axios 配置1、安装创建2、测试 七、导入 Element Plus八、Pinia 持久化实现九、其他导入 .scss 文件需要安装 s…...
二十三种设计模式全面解析-从线程安全到创新应用:探索享元模式的进阶之路
在软件开发领域,线程安全和设计模式都是我们经常遇到的话题。线程安全保证了多线程环境下的数据一致性和可靠性,而设计模式则提供了一套经验丰富的解决方案。在前文中,我们已经了解了线程安全的处理和享元模式的基本概念。但是,如…...
Qt之qobject_cast使用
描述 qobject_cast是Qt中的一个转换函数,主要用于在QObject子类之间进行转换,实现父类指针向子类指针的转换。其语法为: qobject_cast<T>(object);其中,T表示目标类型,object表示要转换的QObject对象指针。 q…...
如何实现云端开发能力快速提升?【DevRun】云上开发创新实践带你实现
随着企业数字化的转型趋势,软件成为数字化转型的关键驱动力,在云计算越来越普及且作用愈发重要的今天,现代应用正以难以想象的速度在增长,同时对软件开发工具提出了新的要求。 华为云CodeArts作为一站式云上开发创新工具…...
猫头虎博主第7期赠书活动:《计算机考研精炼1000题》
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
Linux常见指令:从基础到理论
前言 目录 前言 1. find指令 拓展 2. grep指令 拓展 sort指令 uniq指令 wc指令 3. zip/unzip指令 4. tar指令 5. uname指令 拓展 6. Linux常用热键 7. 关机 8. rz指令 拓展 scp指令 9. shell命令以及运行原理 Linux常见指令是使用Linux系统时必不可少的一部分。通过掌握…...
ARM---CAN2.0B读取 汽车BMS报文
Qt CAN编程1- CAN总线整体介绍 - 简书 STM32---CAN2.0B读取新能源汽车BMS报文-CSDN博客 CAN通信标准帧和扩展帧介绍_can扩展帧-CSDN博客 【精选】详解CAN 2.0协议_can2.0-CSDN博客 QT实现CAN通信_五个板栗的技术博客_51CTO博客 linux CAN通讯基于Qt代码编写_pf_can-CSDN博客…...
第十一章 JSP开发模型
文章目录 一. 单选题(共5题,50分)二. 判断题(共5题,50分) 一. 单选题(共5题,50分) (单选题) JSPModel2开发的系统中,实现视图的是() A…...
Java面试题-Redis-第四天(线程模型一)
目录 一、Redis为何选择单线程? 二、Redis真的是单线程吗? 三、Redis6.0为何引入多线程 四、Redis6.0引入多线程之后,性能的提升效果如何? 一、Redis为何选择单线程? 通常对于一个数据库来说,CPU通常不…...
逐次变分模态分解(Sequential Variational Mode Decomposition,SVMD)(附代码)
代码原理 逐次变分模态分解(Sequential Variational Mode Decomposition,SVMD)是一种用于信号处理和数据分析的方法。它可以将复杂的信号分解为一系列模态函数,每个模态函数代表了信号中的一个特定频率成分。SVMD的主要目标是提取…...
Spring Boot(一)
Spring Boot是一个开源的Java框架,旨在简化基于Java的应用程序的开发和部署过程。它提供了许多开箱即用的功能和工具,使开发者能够快速构建独立、可执行的、生产级别的应用程序。 以下是Spring Boot的一些主要特点和优势: 简化的配置&#x…...
秩为1的矩阵的性质
...
酷安官网下载页前端自适应源码
酷安官网下载页前端自适应源码,自己拿走玩玩 站长只打开看了一眼,感觉风格还不错,纯html,自己魔改 转载自 https://www.qnziyw.cn/wysc/qdmb/24470.html...
Docker实战
一、Docker安装 以下均以CentOS 7为例 1、安装Docker yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2、启动和校验 # 启动Docker systemctl start docker# 停止Docker systemctl stop docker# 重启 systemctl resta…...
什么是代理IP池?如何判断IP代理商的IP池是否真实优质?
代理池充当多个代理服务器的存储库,提供在线安全和匿名层。代理池允许用户抓取数据、访问受限制的内容以及执行其他在线任务,而无需担心被检测或阻止的风险。代理池为各种在线活动(例如网页抓取、安全浏览等)提高后勤保障。 读完…...
嵌入式养成计划-51----ARM--ARM汇编指令--内存读写指令--程序状态寄存器传输指令--软中断指令--混合编程
一百二十七、内存读写指令 通过内存读写指令可以实现向内存中写入指定数据或者读取指定内存地址的数据 127.1 单寄存器内存读写指令 将一个寄存器中的数值写入到内存,或者从内存中读取数据放在某一个指定寄存器中 127.1.1 指令码和功能 1. 向内存中写ÿ…...
RSA 2048位算法的主要参数N,E,P,Q,DP,DQ,Qinv,D分别是什么意思 哪个是通常所说的公钥与私钥 -安全行业基础篇5
非对称加密算法RSA 在RSA 2048位算法中,常见的参数N、E、P、Q、DP、DQ、Qinv和D代表以下含义: N(Modulus):模数,是两个大素数P和Q的乘积。N的长度决定了RSA算法的安全性。 E(Public Exponent&a…...
开发知识点-stm32/ESP32/Mega2560嵌入式设计
嵌入式设计 STM32四轴飞行器原理图解析小马哥 DragonFly四轴软件开发 13 STM32 SPI总线通讯SPI 总线协议简介SPI 物理层SPI 协议层SPI 通信时序 STM32硬件SPI接口简介SPI接口 利用库函数初始化配置 ESP32 “F:\res\marlin-2.0.x” “F:\res\Marlin-2.1.2” STM32四轴飞行器 小…...
亚马逊云科技海外服务器初体验
目录 前言亚马逊云科技海外服务器概述注册使用流程实例创建性能表现用户体验服务支持初体验总结 前言 随着云原生技术的飞速发展,越来越多的企业和开发者选择云服务器来作为自己的使用工具,云原生技术的发展也促进了云服务厂商的产品发展,所…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
