OpenGL超级第11章学习笔记:高级数据管理

news2024/11/22 15:30:03
前言
本篇在讲什么

OpenGL蓝宝书第十一章学习笔记之高级数据管理
本篇适合什么

适合初学OpenGL的小白
本篇需要什么

C++语法有简单认知
OpenGL有简单认知
最好是有OpenGL超级宝典蓝宝书
依赖Visual Studio编辑器

本篇的特色

具有全流程的图文教学
重实践,轻理论,快速上手
提供全流程的源码内容


★提高阅读体验★

👉 ♠ 一级标题 👈

👉 ♥ 二级标题 👈

👉 ♣ 三级标题 👈

👉 ♦ 四级标题 👈


目录

  • ♠ 本章的学习要点
  • ♠ 取消绑定
  • ♠ 稀疏纹理
  • ♠ 纹理压缩
  • ♠ 压缩数据格式
  • ♠ 高质量纹理过滤
  • ♠ 推送
  • ♠ 结语


♠ 本章的学习要点

  • 如何将数据从着色器中直接写入缓冲与纹理
  • 如何使用OpenGL更灵活地解读数据
  • CPU与GPU如何直接共享数据

♠ 取消绑定

在着色器中绑定纹理到统一变量会有副作用

  • OpenGL驱动程序支持的纹理单元数量有限
  • 绑定与解绑各图像之间的纹理很费时

应对方法可以使用一种名为无绑定纹理的功能

通过GL_ARB_bindless_texture扩展,可以获得一个纹理控制柄,然后在着色器中直接使用该控制柄指代底层纹理而无须将纹理与纹理单元绑定

通过以下函数可以获取控制柄

GLuint64 glGetTextureHandleARB(GLuint texture);
GLuint64 glGetTextureSampleHandleARB(GLuint texture, GLuint sampler);

使用纹理前,需要告知OpenGL可使用,下面函数告知OpenGL纹理可使用

void glMakeTextureHandleResidentARB(GLuint64 handle);

下面函数从可使用清单清除

void glMakeTextureHandleNoResidentARB(GLuint64 handle);

♠ 稀疏纹理

通过GL_ARB_sparse_texture扩展,纹理可以稀疏分布
稀疏纹理可分成许多方形或矩形区域,称为页面
未调拨页面时,OpenGL不会使用任何内存储存页面数据

注意:OpenGL需要支持GL_ARB_sparse_texture扩展,才可以使用稀疏纹理

创建稀疏纹理可以使用下面函数

glTexturestorage2D(tex,14,GL_RGBA8,1638416384);

创建稀疏纹理时,在为纹理分配内存前,需要调用下面函数

glTextureParameteri(tex,GL_TEXTURE_SPARSE_ARB,GL_TRUE)

可调拨和释放纹理中已提供名称的稀疏纹理,使用下面函数

glTexPageCommitmentARB()

可通过下面函数确定页面大小和找出特定格式所支持的虚拟页面大小数量

glGetInternalformativ()

♠ 纹理压缩

介绍OpenGL支持的其中一种更为简单的纹理压缩格式,并展示如何为此类数据编写压缩程序

OpenGL支持的大部分纹理压缩格式是数据块

RGTC纹理压缩格式是OpenGL所支持的其中一种较简单的格式

  • 数据块存储
  • 每个数据块代表4x4纹素区域

RGTC格式仅支持二维图像

RGTC规范包括有符号类型和无符号类型,单分量和双分量格式

  • GL_COMPRESSED_RED_RGTC1代表无符号类型单通道数据
  • GL_COMPRESSED_SIGNED_RED_RGTC1代表有符号类型单通道数据
  • GL_COMPRESSED_RG_RGTC2代表无符号类型双通道数据
  • GL_COMPRESSED_SIGNED_RG_RGTC2代表有符号类型双通道数据

后续单开一篇介绍一下常用的压缩纹理,例如ETC、PVR等等


♠ 压缩数据格式

OpenGL所使用的类型几乎直接对应于C语言和其他高阶语言所使用的类型

OpenGL还支持一些不用C语言直接表示的数据类型,包括特殊数据类型GLHALE_FLOAT 和大量压缩数据类型

压缩数据正常C语言对此排列无表示方法

以下是OpenGL支持的压缩数据格式

格式位元分配R位元分配G位元分配B位元分配A
GL_UNSIGNED_BYTE_3_3_27:54:21:0——
GL_UNSIGNED_BYTE_2_3_3_REV2:05:37:6——
GL_UNSIGNED_SHORT_5_6_515:1110:54:0——
GL_UNSIGNED_SHORT_5_6_5_REV4:010:515:11——
GL_UNSIGNED_SHORT_4_4_4_415:1211:87:43:0
GL_UNSIGNED_SHORT_4_4_4_4_REV3:07:411:815:12
GL_UNSIGNED_SHORT_5_5_5_115:1110:65:10
GL_UNSIGNED_SHORT_1_5_5_5_REV4:09:514:1015
GL_UNSIGNED_INT_8_8_8_831:2423:1615:87:0
GL_UNSIGNED_INT_8_8_8_8_REV7:015:823:1631:24
GL_UNSIGNED_INT_10_10_10_231:2221:1211:21:0
GL_UNSIGNED_INT_210_10_10_REV9:019:1029:2031:30
GL_UNSIGNED_INT_24_831:87:0————
GL_UNSIGNED_INT_10F_11F_11F_REV10:021:1131:22——

♠ 高质量纹理过滤

最接近模式:表示点采样,仅选择中心最接近指定纹理坐标的纹素

线性过滤模式:混合至少两种纹素,生成着色器所需要的最终颜色


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

👉 本文属于原创文章,转载请评论留言,并在转载文章头部著名作者出处👈

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

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

相关文章

export 和 export default 的区别

一、铺垫 ES6模块化主要包含以下3种用法: ① 默认导出和默认导入---export default ② 按需导出和按需导入---export ③ 直接导入并执行模块中的代码 二、默认导出 语法:export default 需要共享的成员 创建一个共享的数据 order.js let name…

云服务器上的数据库莫名被删除?

云服务器上的数据库莫名被删除? 前言排查问题及解决后续 前言 如题,之前,自己买了一个云服务器,用来练手,然后搭了一个自己的网站部署了上去。本来也就是练练手,没想到前几天去用的时候发现死活登录不上去…

SSTI——java里的ssti

1.Velocity 2.FreeMarker 因为从来没接触过java语言 所以对这些也是基本上一窍不通 这里只简单的提及 不做具体介绍 会找一下题来做 但是没有找到有关java ssti的题目 confusion1 看一下描述 打开题目 没发现什么东西 但是 login register页面显示访问不成功 查看源代码找到…

【转载】陆奇最新演讲全文实录:大模型带来的新范式(附下载文档)

《新范式 新时代 新机会》为主题的分享活动,陆奇博士以“新范式”为核心,分享了他对当前技术变革的观点,基于演讲整理了文字稿,也同步分享完整的PPT和视频,欢迎大家一起交流。 下载PDF文件: 《ChatGPT研究…

yolov8 人体姿态关键点检测

参考: https://github.com/ultralytics/ultralytics https://github.com/TommyZihao/Train_Custom_Dataset/tree/main/%E5%85%B3%E9%94%AE%E7%82%B9%E6%A3%80%E6%B5%8B ##安装 pip install ultralytics -i https://pypi.douban.com/simple1、命令行运行 pip安装好…

图像金字塔

​ 图像金字塔是由一幅图像的多个不同分辨率的子图构成的图像集合。是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点。下图是一个图像金子塔的示例。从图中可以看到,图像金字塔是一系列以金字塔形状排列的、自底向上分辨率逐渐降低…

静电监控系统选购策略:有效提高系统可靠性与性价比

随着工业自动化和信息化程度的提高,静电在工业生产中的影响越来越显著。静电的存在会对电子设备、传输介质等产生不良影响,甚至会导致产品损坏和火灾事故的发生。因此,静电监控系统的选购对于工业生产的稳定具有重要意义。 一、功能需求 静…

Java实训日志06

文章目录 八、项目开发实现步骤(八)创建服务接口1、创建学校服务接口2、创建状态服务接口3、创建学生服务接口4、创建用户服务接口 (九)创建服务接口实现类1、创建学校服务接口实现类2、创建状态服务接口实现类3、创建学生服务接口…

【CMake 入门与进阶(10)】 CMakeLists.txt 语法规则_循环语句(附使用代码)

cmake 中除了 if 条件判断之外,还支持循环语句,包括 foreach()循环、while()循环。 foreach 循环 1、foreach 基本用法 foreach 循环的基本用法如下所示: foreach(loop_var arg1 arg2 ...)command1(args ...)command2(args ...)... endfore…

chatgpt赋能python:Python编写计算器的方法

Python编写计算器的方法 介绍 计算器是一款常见的实用工具,它能够进行基本的算数运算,如加减乘除等。在Python中,我们可以利用各种库和函数来实现计算器的功能,从而方便地进行数值计算。 怎么编写计算器 在Python中&#xff0…

WINS服务的作用和效率

WINS服务的作用和效率 目录 WINS服务的作用和效率 一、WINS服务 二、配置 2.1、服务端 2.2、客户端 2.3、配置方法 三、效果 3.1、计算机-网络(过去的“网上邻居”) 3.2、局域网打印机共享 3.3、基于NetBios名称的数据库客户端连接 一、WINS服…

爆肝万字带你超级详细全面了解Linux命令大全

🍁前言 👑作者主页:👉CSDN丨博客园 🏆学习交流:👉在下周周ovoの社区 对这篇万字博客目录总结如下: 关机命令、重启命令,创建用户、删除用户、修改密码、切换用户、切换到…

Centos8 如何给磁盘扩容

今天发现 在home目录下无法写入文件,经过查看磁盘空间,发现/dev/mapper/cl-home空间满了。于是乎,给磁盘进行扩容,扩充成功,下面将操作步骤分享出来。 查看空间 [rootasrcent8 ~]# df -k 文件系统 1K…

jsp与java bean

软件开发应具有较高的可维护性,以方便后续的代码维护,而实现高可维护性的有效途径是要实现软件的低耦合、高内聚。软件设计分层的概念主要就是将软件各部分进行解耦合设计,对于JSP动态开发技术而言, JavaBean是最基础的分层技术。…

Java集合框架:栈、Stack详解

目录 一、栈 二、栈的使用 1. Stack类 2. 栈的模拟实现 三、栈的应用场景 1. 改变元素的序列 2. 将递归转化为循环(如:逆序打印链表) 3. 栈的oj题练习(oj题中都用到了栈这种数据结构) 四、栈,虚拟机…

Stable diffusion webui 本地安装教学

Stable diffusion AI的绘图工具,这是一种扩散模型,可以通过不断去噪来获得最终的艺术作品。这款工具是当前最受欢迎的AI绘图工具之一,不仅是还是开源的,而且其中的AUTOMATIC111 Stable-diffusion-webui版本深受AI绘图玩家的喜爱&a…

三、Docker的基本组成和常用命令(一)

文章目录 Docker的基本组成镜像(image)容器(container)仓库(repository)总结 Docker的常用命令帮助命令镜像命令docker imagesdocker searchdocker pulldocker rmi Docker的基本组成 镜像(image) Docker 镜像(Image)就是一个只读的模板。镜像可以用来创…

用Netty自己实现Dubbo RPC

1.RPC基本介绍 1>.RPC(Remote Procedure Call)— 远程过程调用,是一个计算机通信协议.该协议允许运行在一台计算机中的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程; 2>.两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法…

跟着《代码随想录》练习代码

更新中。。。有错误请指正 数组 二分查找704 class Solution:def search(self,nums:list,target:int)->int:left 0right len(nums)-1while left<right:mid (leftright)//2guess nums[mid]if guess target:return midbreakelif guess > target:right mid -1els…

浅析浏览器的缓存

随着浏览器功能的日益强大&#xff0c;在工作中&#xff0c;浏览器是前端工程师们最重要的战友和开发调试工具&#xff0c;它承载着用户最舒适的用户体验&#xff0c;ui最佳的设计成果展示&#xff0c;后台数据最直观的展示。因此&#xff0c;对浏览器的认识和理解起到举足轻重…