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四轴飞行器 小…...
亚马逊云科技海外服务器初体验
目录 前言亚马逊云科技海外服务器概述注册使用流程实例创建性能表现用户体验服务支持初体验总结 前言 随着云原生技术的飞速发展,越来越多的企业和开发者选择云服务器来作为自己的使用工具,云原生技术的发展也促进了云服务厂商的产品发展,所…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
