Android Java 版本的 MSAA OpenGL ES 多重采样
最近多次被小伙伴问到 OpenGL 多重采样,其实前面文章里多次讲过了,就是构建2个缓冲区,多重采样缓冲区和目标解析缓冲区。
代码流程
// Framebuffer IDs
private int msaaFBO;
private int msaaColorBuffer;
private int msaaDepthBuffer;private int resolveFBO;
private int resolveTexture;public void initFramebuffers(int width, int height) {// Step 1: Create MSAA FBOint[] fbo = new int[1];GLES30.glGenFramebuffers(1, fbo, 0);msaaFBO = fbo[0];GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, msaaFBO);// Create MSAA color bufferint[] renderbuffer = new int[1];GLES30.glGenRenderbuffers(1, renderbuffer, 0);msaaColorBuffer = renderbuffer[0];GLES30.glBindRenderbuffer(GLES30.GL_RENDERBUFFER, msaaColorBuffer);GLES30.glRenderbufferStorageMultisample(GLES30.GL_RENDERBUFFER, 4, GLES30.GL_RGBA8, width, height); // 4x MSAAGLES30.glFramebufferRenderbuffer(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_RENDERBUFFER, msaaColorBuffer);// Create MSAA depth bufferGLES30.glGenRenderbuffers(1, renderbuffer, 0);msaaDepthBuffer = renderbuffer[0];GLES30.glBindRenderbuffer(GLES30.GL_RENDERBUFFER, msaaDepthBuffer);GLES30.glRenderbufferStorageMultisample(GLES30.GL_RENDERBUFFER, 4, GLES30.GL_DEPTH_COMPONENT16, width, height);GLES30.glFramebufferRenderbuffer(GLES30.GL_FRAMEBUFFER, GLES30.GL_DEPTH_ATTACHMENT, GLES30.GL_RENDERBUFFER, msaaDepthBuffer);if (GLES30.glCheckFramebufferStatus(GLES30.GL_FRAMEBUFFER) != GLES30.GL_FRAMEBUFFER_COMPLETE) {throw new RuntimeException("MSAA Framebuffer is not complete!");}// Step 2: Create Resolve FBOGLES30.glGenFramebuffers(1, fbo, 0);resolveFBO = fbo[0];GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, resolveFBO);// Create texture for resolved resultint[] texture = new int[1];GLES30.glGenTextures(1, texture, 0);resolveTexture = texture[0];GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, resolveTexture);GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_RGBA, width, height, 0, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, null);GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_LINEAR);GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR);GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, resolveTexture, 0);if (GLES30.glCheckFramebufferStatus(GLES30.GL_FRAMEBUFFER) != GLES30.GL_FRAMEBUFFER_COMPLETE) {throw new RuntimeException("Resolve Framebuffer is not complete!");}// Unbind framebufferGLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0);
}public void renderScene() {// Step 3: Render to MSAA FBOGLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, msaaFBO);GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT | GLES30.GL_DEPTH_BUFFER_BIT);// Render your scene here...// Step 4: Resolve to textureGLES30.glBindFramebuffer(GLES30.GL_READ_FRAMEBUFFER, msaaFBO);GLES30.glBindFramebuffer(GLES30.GL_DRAW_FRAMEBUFFER, resolveFBO);GLES30.glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GLES30.GL_COLOR_BUFFER_BIT, GLES30.GL_NEAREST);// Step 5: Unbind framebuffersGLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0);// Step 6: Use resolveTexture for further processing (e.g., render to screen)renderQuadWithTexture(resolveTexture);
}
相关文章:
Android Java 版本的 MSAA OpenGL ES 多重采样
最近多次被小伙伴问到 OpenGL 多重采样,其实前面文章里多次讲过了,就是构建2个缓冲区,多重采样缓冲区和目标解析缓冲区。 代码流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…...
学习笔记之初识HALCON
目录 一、概要 二、数据结构 1、图像Image 2、Region区域 3、XLD 三、图像预处理 1、图像的变换与校正 2、图像增强 四、图像的形态学处理 1、边界提取 2、孔洞填充 3、骨架 五、图像金字塔 六、区域分割 1、区域生长 2、区域分裂与合并 七、边缘检测 1、Pre…...
嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别
引言:在现代嵌入式硬件设计中,开关元件作为电路中的重要组成部分,起着至关重要的作用。三种主要的开关元件——IGBT(绝缘栅双极型晶体管)、MOSFET(金属氧化物半导体场效应晶体管)和三极管&#…...
【Rust自学】7.1. Package、Crate和定义Module
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.1.1. Rust的代码组织 代码组织主要包括: 那些细节可以对外暴露,而哪些细节是私有的在作用域内哪些名称有效… …...
【已解决】pyinstaller打包ico图片报错:OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。
起因: pyinstaller加上 --icon 参数打包时报错。 命令如下: 解决: 关闭 Windows 的病毒防护即可,步骤如下。 点屏幕右下角通知栏,进入“病毒和威胁防护”: 打开: 关闭实时保护(…...
广东粤万润与时序数据库TDengine携手打造智慧酒店新未来:数据驱动智能化转型
在智能化转型浪潮席卷全球的当下,智慧酒店行业已然成为推进智能生活应用的先锋领域。从智能照明到环境监测,从安防系统到沉浸式影音娱乐,智慧酒店通过技术赋能为用户提供了更加舒适、高效且个性化的服务体验。然而,随着设备的增多…...
基于云计算的分布式文件存储系统设计与实现
基于云计算的分布式文件存储系统设计与实现 第一章 绪论 1.1 研究背景及意义 随着互联网技术的飞速发展,云计算作为一种新兴的计算模式,以其弹性伸缩、按需分配和成本效益高等特点,逐渐成为信息技术领域的研究热点。它为大数据处理、高性能…...
基于顺序表实现队列循环队列的处理
文章目录 1.假溢出的现象2.循环队列3.顺序表实现队列架构4.顺序表模拟实现队列5.设计循环队列(校招难度) 1.假溢出的现象 下面的这个就是我们的假溢出的这个现象的基本的来源: 我们的这个队列里面是有9个位置的,我们知道这个队列…...
leecode377.组合总和IV
本题其实是多重背包问题,对于价值和重量都是nums[i]的的物品,求装满这个容量为4的背包共有多少种排列方式 如果是组合问题,那么遍历顺序是先物品后背包,这样能保证物品按从小到大顺序依次放置,对于实例1求出来为4&…...
变量与数据类型 - 整型、浮点型、字符型等
引言 在编程中,变量和数据类型是基础中的基础。理解它们如何工作以及如何正确使用它们对于编写高效且无误的代码至关重要。本文将详细介绍 C 中的几种基本数据类型:整型、浮点型、字符型等,并通过实例帮助读者更好地理解和掌握这些概念。 一…...
selenium学习笔记(二)
文章目录 前言设计模式POMPOM概念POM优势POM设计原则POM的实现 selenium的常用操作处理动态元素截图操作勾选复选框多层框架/窗口定位操作下拉框上传文件操作处理弹窗切换窗口拖拽操作 如何处理浏览器驱动更新导致的问题selenium与网站监控监听网页内容变化监控网络请求 seleni…...
vue和uniapp中,点击按钮 传递当前item对象,并从selectData数组中删除该条item数据
在 Vue 中,可以通过点击按钮传递 item 对象,并从 selectData 数组中删除该条数据。可以使用 Array.prototype.filter() 方法来实现这一点。以下是一个示例: 说明 数据结构:selectData 是一个包含多个对象的数组,每个对象都有 id 和 name 属性。渲染列表:使用 v-for 指令…...
双柱渐变图背景图
option {backgroundColor: #1b2735,tooltip: {//提示框组件trigger: axis,//触发类型 柱状图axisPointer:{type:shadow} //触发效果 移动上去 背景效果}, xAxis: [//x轴{type: category,//坐标轴类型 离散data: [1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月],//数据axisTick:f…...
OpenHarmony怎么修改DPI密度值?RK3566鸿蒙开发板演示
本文介绍在开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新开源鸿蒙OpenHarmony5.0 Release系统,适…...
KylinOS V10 SP3下编译openGauss与dolphin插件
编译环境 KylinOS v10 sp3gcc 7.3.0make 4.3opengauss 5.0.0 mkdir -p /data/opengauss cd /data/opengauss git clone https://gitee.com/opengauss/openGauss-server.git git clone https://gitee.com/opengauss/Plugin.git wget -c https://opengauss.obs.cn-south-1.myhu…...
【入门】买杯子
描述 小明去商店买杯子,他想买价格在 10 到 20 元之间的杯子(含 10 元和 20 元),他看到货架上有 3 个不同价格的杯子,请问最终他买了几个杯子,总共花了多少钱? 比如:货架上有如下的…...
VIVO C++开发面试题及参考答案
面向过程与面向对象的区别,面向对象后的好处 面向过程编程主要关注的是程序的流程,它将一个问题分解为一系列的步骤,通过函数来实现这些步骤,数据和操作这些数据的函数是分离的。例如,在一个简单的计算学生成绩平均值的程序中,我们可能会有一些函数来输入成绩、计算总和、…...
虚拟化 | Proxmox VE 8.x 开源的虚拟化平台快速上手指南
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 简介说明 前言简述 描述:作为一个爱折腾的IT打工佬,时刻以学习各类新技术新知识为目标,这不正好有一台部署了VMware vSphere ESXi 虚拟化环境的服务器,由于正好安装其系统的磁盘有坏道,经常导致使用 ESXi 异…...
【原创学习笔记】近期项目中使用的西门子V20变频器总结(下篇)
上一篇我们简单介绍了下现场的变频器,现在我们来聊聊如何用手机控制变频器。 手机控制变频器的前提是变频器上必须安装智能模块,现场并为安装此模块,故不作考虑。 下面介绍一下如何实现手机或者电脑控制变频器 首先如果存在485通信&#x…...
idea 8年使用整理
文章目录 前言idea 8年使用整理1. 覆盖application配置2. 启动的时候设置编辑空间大小,并忽略最大空间3. 查询类的关系4. 查看这个方法的引用关系5. 查看方法的调用关系5.1. 查看被调用关系5.2. 查看调用关系 6. 方法分隔线7. 选择快捷键类型8. 代码预览插件9. JReb…...
Bluetooth Spec【0】蓝牙核心架构
蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件&a…...
PlantUML 入门使用指南
PlantUML 入门使用指南 一、PlantUML介绍二、PlantUML的用途三、PlantUML的语法及示例3.1 用例图(Use Case Diagram)3.2 类图(Class Diagram)3.3 对象图(Object Diagram)3.4 序列图(Sequence Di…...
QT:一个TCP客户端自动连接的测试模型
版本 1:没有取消按钮 测试效果: 缺陷: 无法手动停止 测试代码 CMakeLists.txt cmake_minimum_required(VERSION 3.19) project(AutoConnect LANGUAGES CXX)find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets Network)qt_standard_project_setup(…...
IOS safari 播放 mp4 遇到的坎儿
起因 事情的起因是调试 IOS 手机下播放服务器接口返回的 mp4 文件流失败。对于没调试过移动端和 Safari 的我来说着实费了些功夫,网上和AI也没有讲明白。好在最终大概理清楚了,在这里整理出来供有缘人参考。 问题 因为直接用 IOS 手机的浏览器打开页面…...
LLM常见面试题(26-30题)--langchain篇
26,什么是langchain? 一个局域语言模型的框架,用于构建聊天机器人、生成式回答、摘要等功能。 核心思想是将不同的组件“链”在一起,连接大语言模型和外部资源,以创建更高级的语言模型应用。使得开发人员可以快速开发原型系统和…...
【Python运维】构建基于Python的自动化运维平台:用Flask和Celery
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代IT运维中,自动化运维平台扮演着至关重要的角色,它能够显著提高运维效率,减少人为错误,并且增强系统的可维护性。本文将引导读者如…...
socket编程(C++/Windows)
相关文章推荐: Socket 编程基础 面试官,不要再问我三次握手和四次挥手 TCP的三次握手与四次挥手 参考视频: https://www.bilibili.com/video/BV1aW4y1w7Ui/?spm_id_from333.337.search-card.all.click TCP通信流程 服务端 #include<…...
Spring Boot介绍、入门案例、环境准备、POM文件解读
文章目录 1.Spring Boot(脚手架)2.微服务3.环境准备3.1创建SpringBoot项目3.2导入SpringBoot相关依赖3.3编写一个主程序;启动Spring Boot应用3.4编写相关的Controller、Service3.5运行主程序测试3.6简化部署 4.Hello World探究4.1POM文件4.1.1父项目4.1.2父项目的父…...
【hackmyvm】deba靶机wp
tags: HMVnodejs反序列化CVE-2017-5941wine命令定时任务 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描 3. nodejs反序列化 (CVE-2017-5941)4. www-data提权low用户5. 定时任务提权6. wine命令 提权root6.1. 利用CS获取root 靶机链接 http…...
新浪微博大数据面试题及参考答案(数据开发和数据分析)
介绍一下你所掌握的计算机网络和操作系统相关知识 计算机网络:计算机网络是将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。我掌握了网络协议…...
去除 el-input 输入框的边框(element-ui@2.15.13)
dgqdgqdeMac-mini spid-admin % yarn list --pattern element-ui yarn list v1.22.22 └─ element-ui2.15.13 ✨ Done in 0.23s.dgqdgqdeMac-mini spid-admin % yarn list vue yarn list v1.22.22 warning Filtering by arguments is deprecated. Please use the pattern opt…...
Qt 应用程序转换为服务
一、在 Windows 上将 Qt 应用程序转换为服务 方法1: 创建一个 Windows 服务应用程序: Windows 服务应用程序是一个没有用户界面的后台进程,通常由 Win32 Service 模板创建,或者直接编写 main() 函数以实现服务逻辑。 修改 Qt 应…...
C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码
一、树的存储结构 1)双亲表示法实现: 定义结构数组存放树的结点,每个结点含两个域: 数据域:存放结点本身信息。双亲域:指示本结点的双亲结点在数组中的位置。 特点:找双亲简单,找孩子难 C语…...
潇洒郎:部署Dify, 安装Ollama,Ollama下载模型,Dify配置模型
Ollama 1、安装ollama Windows版本下载:2024WindowsOllama最新0.5.4版本资源-CSDN文库, 下载速度超快,官网太慢了 双击安装,安装成功后,托盘区有Ollama图标 右键View logs打开目录 C:\Users\Administrator\AppData\Local\Oll…...
如何在 Linux 中设置 SSH 免密码登录
一般情况下,我们通过一台 Linux 服务器远程另外一台服务器时,每次远程都需要输入对端机器的密码。 ssh root192.168.21.20 有没有这样一种情况,我们不用输入密码就可以远程别的服务器呢? 答案是肯定的,如果我们在 Li…...
网络安全词云图与技术浅谈
网络安全词云图与技术浅谈 一、网络安全词云图生成 为了直观地展示网络安全领域的关键术语,我们可以通过词云图(Word Cloud)的形式来呈现。词云图是一种数据可视化工具,它通过字体大小和颜色的差异来突出显示文本中出现频率较高…...
Linux | Ubuntu零基础安装学习cURL文件传输工具
目录 介绍 检查安装包 下载安装 手册 介绍 cURL是一个利用URL语法在命令行下工作的文件传输工具,首次发行于1997年12。cURL支持多种协议,包括FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3…...
重启ubuntu服务器,如何让springboot服务自动运行
文章目录 1. 使用 systemd 服务步骤: 2. 使用 cron 的 reboot 任务步骤: 3. 使用 init.d 脚本(适用于较旧版本)步骤: 推荐方案 为了确保在重启Ubuntu服务器后,让springboot的服务test.jar象 nohup java -ja…...
MySQL 查询大偏移量(LIMIT)问题分析
大偏移量查询缓慢?LIMIT: 会进行两步操作 性能消耗在哪里了?OFFSET操作问题 2 LIMIT 操作 如何优化? 大偏移量查询缓慢? 示例:(假设age字段有索引) SELECT * FROM test WHERE age>18 LIMIT 10000000 ,10;分析MySQL的 LIMIT 10000000 , 10 LIMIT: 会进行两步操作 OFF…...
深入探究C++pow函数的优势和劣势 原理
优势 功能强大 支持多种数据类型: C 的pow()函数在<cmath>头文件中定义,它能够灵活地处理不同的数据类型。对于整数类型,如int、long long等,它能准确地计算幂次方。以计算棋盘上的麦粒数为例,传说国际象棋棋盘…...
Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶
1.直接借助Vue的动态绑定样式绑定 Vue动态样式绑定 在Vue中,动态样式绑定是一种强大的功能,它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解: 一、基础知识 Vue的动态样式绑定主要通过v-b…...
Linux 硬盘扩容 分区 挂载
Linux 硬盘扩容 分区 & 挂载 1. 添加分区 1.1. 查看新添加的硬盘 fdisk -l假设当前未挂载的盘符是/dev/sdb,后文中所有操作都按挂载/dev/sdb 操作 1.2. 分区管理 小硬盘 fdisk /dev/sdb大硬盘(2TB以上) gdisk /dev/sdb1.3. 编辑分…...
Microsoft word@【标题样式】应用不生效(主要表现为在导航窗格不显示)
背景 随笔。Microsoft word 2013基础使用,仅做参考和积累。 问题 Microsoft word 2013,对段落标题文字应用【标题样式】不生效(主要表现为在导航窗格不显示)。 图1 图2 观察图1和图2,发现图1的文字在应用【标题一】样…...
react中实现拖拽排序
效果图:如下 效果说明: 1. 点击“选择”按钮,打开弹窗 2. 左侧数据是调接口回显来的 3. 点击左侧某条数据,这条被点击的数据就会被添加到右侧 4. 右侧的数据可以上下拖动换位置 5. 右侧有数据时,点击"确定"…...
云效流水线自动化部署web静态网站
云效流水线部署静态网站 背景新建流水线配置流水线运行流水线总结 背景 配置流水线以前,每次更新导航网站都要登进去宝塔后台,删掉旧的目录和文件,再上传最新的文件,太麻烦啦 网上的博客基本都是分享vue项目,这一篇是…...
【Docker命令】如何使用 `docker cp` 命令拷贝容器文件到宿主机
在使用 Docker 时,我们经常需要将容器内的文件或目录复制到宿主机上。下面是使用 docker cp 命令进行操作的简要指南。 步骤一:定位容器内文件或目录 首先,确定你想要从容器中拷贝的文件或目录路径。 步骤二:选择宿主机目标路径…...
leetcode hot 100 二叉搜索
35. 搜索插入位置 已解答 简单 相关标签 相关企业 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solut…...
WebRTC服务质量(09)- Pacer机制(01) 流程概述
WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...
MIGRATE_ISOLATE浅析
在linux内核的migratetype中,有MIGRATE_ISOLATE这样一个内存迁移类型,注释里写着can’t allocate from here,这个是怎么做到的呢?他又有什么作用呢? 本文分析基于linux4.19.195 可以看到内核里,是函数set_…...
[bug]java导出csv用Microsoft Office Excel打开乱码解决
[bug]java导出csv用Microsoft Office Excel打开乱码 现象 首先这个csv文件用macbook自带的 "Numbers表格" 软件打开是不乱码的, 但是使用者是Windows系统,他的电脑没有"Numbers表格"工具, 他用Microsoft Office Excel打开之后出现乱码,如下图…...