8.9 OpenGL纹理和采样器:缓冲纹理

缓冲纹理 Buffer Textures

除了在前面的章节中描述的一维、二维和三维、一维和二维数组以及立方体贴图纹理之外,还支持一种额外的纹理类型。缓冲纹理类似于一维纹理。然而,与其他纹理类型不同,纹理图像不作为纹理的一部分存储。相反,缓冲对象附加到缓冲纹理上,并且纹理图像来自于该缓冲对象的数据存储。当缓冲对象的数据存储内容被修改时,这些更改会反映在任何附加到该缓冲对象的缓冲纹理的内容中。缓冲纹理没有多个图像级别;只有一个数据存储可用。

以下命令

void glTexBufferRange(enum target, enum internalformat, uint buffer, intptr offset, sizeiptr size);
void glTextureBufferRange(uint texture, enum internalformat, uint buffer, intptr offset, sizeiptr size);

将缓冲对象命名为buffer的存储范围附加到缓冲纹理上,大小为size个基本机器单元,从offset(也是基本机器单元)开始。对于glTexBufferRange,缓冲纹理是当前绑定到目标的纹理。对于glTextureBufferRangetexture是缓冲纹理的名称。目标或纹理的有效目标必须为TEXTURE_BUFFER

如果buffer为零,则分离附加到缓冲纹理的任何缓冲对象,忽略offsetsize的值,并将缓冲纹理的offsetsize状态重置为零。internalformat指定在附加的缓冲对象范围内找到的纹理图像的存储格式,并且必须是Table 8.16中找到的大小内部格式之一。

这两个命令

void glTexBuffer( enum target, enum internalformat, uint buffer );
void glTextureBuffer( uint texture, enum internalformat, uint buffer );

分别等同于:

glTexBufferRange(target, internalformat, buffer, 0, size);
glTextureBufferRange(texture, internalformat, buffer, 0, size);

其中,size 是缓冲对象 bufferBUFFER_SIZE 值。

当一个缓冲对象的存储范围被附加到缓冲纹理时,该缓冲的数据存储区范围被视为纹理的纹理图像。缓冲纹理中纹理图像中的纹理单元(texel)数量计算方式为:

size / (components * sizeof(base type))

这里的 components 和 base type 分别是Table 8.16中指定的元素计数和基础类型。

然后,纹理图像中的纹理单元数量会被限制在实现依赖的上限内,这个上限值为 MAX_TEXTURE_BUFFER_SIZE

在着色器中访问缓冲纹理时,会提供一个整数来表示正在访问的纹理坐标。如果没有任何缓冲对象绑定到缓冲纹理上,纹理访问的结果未定义。否则,将解释所附加的缓冲对象数据存储区作为一个与 internalformat 对应的 GL 数据类型的数组。每个纹理单元由一到四个元素组成,这些元素映射到纹理组件(R、G、B、A)。编号为 n 的纹理单元的第 m 个元素来自所附加缓冲对象数据存储区中的 n × components + m 位置处的元素。元素和纹理单元都是从零开始编号。对于具有带符号或无符号归一化定点组件的纹理格式,提取的值会分别使用公式2.2或2.1转换为浮点数。然后根据Table 8.16将纹理的组件转换为(R, G, B, A)向量,并根据纹理内部格式适当的数据类型,将结果作为四组件向量返回给着色器。基础数据类型、组件计数、归一化组件信息以及数据存储区元素到纹理组件的映射都在Table 8.16中指定。

除了将缓冲对象附加到纹理外,还可以通过将缓冲对象绑定到名为 TEXTURE_BUFFER 的缓冲对象目标,以便指定、修改或读取缓冲对象的数据存储区。绑定到 TEXTURE_BUFFER 的缓冲对象不会影响渲染效果。要将缓冲对象绑定到 TEXTURE_BUFFER,可以调用 BindBuffer 函数,将 target 设置为 TEXTURE_BUFFER,如第6节所述。


Sized Internal FormatBase TypeComponentsNorm0123
R8ubyte1YesR001
R16ushort1YesR001
R16Fhalf1NoR001
R32Ffloat1NoR001
R8Ibyte1NoR001
R16Ishort1NoR001
R32Iint1NoR001
R8UIubyte1NoR001
R16UIushort1NoR001
R32UIuint1NoR001
RG8ubyte2YesRG01
RG16ushort2YesRG01
RG16Fhalf2NoRG01
RG32Ffloat2NoRG01
RG8Ibyte2NoRG01
RG16Ishort2NoRG01
RG32Iint2NoRG01
RG8UIubyte2NoRG01
RG16UIushort2NoRG01
RG32UIuint2NoRG01
RGB32Ffloat3NoRGB1
RGB32Iint3NoRGB1
RGB32UIuint3NoRGB1
RGBA8ubyte4YesRGBA
RGBA16ushort4YesRGBA
RGBA16Fhalf4NoRGBA
RGBA32Ffloat4NoRGBA
RGBA8Ibyte4NoRGBA
RGBA16Ishort4NoRGBA
RGBA32Iint4NoRGBA
RGBA8UIubyte4NoRGBA
RGBA16UIushort4NoRGBA
RGBA32UIuint4NoRGBA

Table 8.16: Internal formats for buffer textures. For each format, the data type of each element is indicated in the “Base Type” column and the element count is in the “Components” column. The “Norm” column indicates whether components should be treated as normalized floating-point values. The “Component 0, 1, 2, and 3” columns indicate the mapping of each element of a texel to texture components

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

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

相关文章

C语言--杨氏矩阵

这道题目就是判断一个数字是否在杨氏矩阵里面 1. int main() {int arr[3][3] { 1,2,3,4,5,6,7,8,9 };int k 0;scanf("%d", &k);int x 0;int y 2;int flag 0;while (x < 2 && y > 0){if (arr[x][y] > k){y--;}else if (arr[x][y] < k)…

WLAN 无线局域网、802.11

目录 1 无线局域网的组成 1.1 IEEE 802.11 关联 (association) 建立关联的两种方法 1.2 移动自组网络 无线传感器网络 WSN 无线传感器网络主要的应用领域 2 802.11 局域网的物理层 802.11 的物理层的几种实现方法 1 无线局域网的组成 无线局域网 WLAN (Wireless Lo…

Java+SpringBoot+Vue+MySQL:疫情隔离酒店管理的全面技术解决方案

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

断电延时继电器 电源监视继电器 导轨安装 HJZS-E002 AC220V 2S

HJZS-E系列断电延时继电器 系列型号&#xff1a; HJZS-E202断电延时继电器 HJZS-E002断电延时继电器 一 应用 用于直流或交流操作的各种保护和自动控制的装置中&#xff0c;用以增加触点数量。 二 安装结构 导轨安装9壳体结构&#xff0c;具体尺寸参阅外型尺寸图。 三 主要…

Python及Pydev调试程序传递参数方法的实践

在Python中&#xff0c;可以使用sys.argv来获取命令行参数。下面是一个示例的Python脚本&#xff0c;展示了如何通过命令行传递参数并打印输出&#xff1a; import sys# 判断是否有传入参数 if len(sys.argv) > 1:# 获取第二个参数&#xff08;索引为1&#xff09;param s…

【机器人学导论笔记】三、操作臂正运动学

3.1 概述 操作臂正运动学研究操作臂的运动特性&#xff0c;主要涉及与运动有关的几何参数和时间参数。本章中&#xff0c;只研究静止状态下操作臂连杆的位置和姿态。 处理这些复杂的几何参数需要一些步骤&#xff1a;首先需要在操作臂的每个连杆上分别固接一个连杆坐标系&…

js获取屏幕的宽和高

<script type"text/javascript">window.onload function() {// 获取元素 let div1 document.getElementById(div1);console.log(window);// 获取计算后的样式 let Style window.getComputedStyle(div1);console.log(Style);// 获取元素的矩形对象 let re…

SQL注入之order by脚本盲注

一、环境 还是用上次搭建的sql-labs靶机环境 搭建sql注入环境 二、什么是order by盲注 在有的时候我们进行sql注入时&#xff0c;源码的查询语句后面为order by&#xff1b; 众所周知&#xff0c;order by 后面接的字段或者数字不一样&#xff0c;那么这个数据表的排序就会…

【python】学习笔记03-循环语句

3.1 whlie循环的基础语法 - while循环的语法格式 - while循环的注意事项 条件需提供布尔类型结果&#xff0c;True继续&#xff0c;False停止 空格缩进不能忘 请规划好循环终止条件&#xff0c;否则将无限循环 """ 演示while循环基础练习题&#xff1a;求1-10…

计算机组成原理 — 存储器(2)

高速缓冲存储器 大家好呀&#xff01;我是小笙&#xff0c;由于存储器这部分章节内容较多&#xff0c;我分成二部分进行总结&#xff0c;以下是第二部分&#xff0c;希望内容对你有所帮助&#xff01; 概述 目的&#xff1a;避免CPU空等现象 原理&#xff1a;程序访问的局部…

基于Springboot的旅游网管理系统设计与实现(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的旅游网管理系统设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层…

【java】13:饿汉式和懒汉式

单例(单个的实例) 1&#xff0e;所谓类的单例设计模式&#xff0c;就是采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法2单例模式有两种方式:1)饿汉式2)懒汉式 单例模式应用实例&#xff…

力扣爆刷第80天--动态规划一网打尽子序列一维二维连续不连续变体

力扣爆刷第80天–动态规划一网打尽子序列一维二维连续不连续变体 文章目录 力扣爆刷第80天--动态规划一网打尽子序列一维二维连续不连续变体零、总结一、1035.不相交的线二、53. 最大子序和三、392.判断子序列四、115.不同的子序列 零、总结 今天也是子序列的一天&#xff0c;…

NLP 使用Word2vec实现文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/…

【算法小讲堂】#1 贪心算法

引入——关于贪心算法 我们先来做一个小游戏——现在假设自己是一个小偷&#xff0c;桌上有一些物品&#xff0c;包括一台iPhone15、一个充电宝、一个眼罩和一个溜溜梅。此时&#xff0c;你听说警察即将到来&#xff0c;那么你会先带走哪个东西呢&#xff1f; 一般来讲&#xf…

「Python系列」Python JSON数据解析

文章目录 一、JSON数据解析1. 读取和解析JSON文件2. 字符串到Python对象的解析3. Python对象到JSON字符串的转换4. 错误处理5. JSON数据的格式化输出 二、Python 编码为 JSON 类型转换对应表三、JSON简介四、相关链接 一、JSON数据解析 在Python中解析JSON数据通常使用json模块…

VUE中引入外部jquery.min.js文件

jquery官网&#xff1a;https://jquery.com/ cdn链接&#xff1a;https://code.jquery.com/jquery-3.7.1.js <template><div class"">测试jq<div id"jq">这是一个盒子</div></div> </template><script> import…

再次委托|工科背景老师赴美国斯坦福大学自费访学

工科背景的I老师&#xff0c;几年前曾通过我们获得美国哈佛大学医学院的无薪博士后职位&#xff0c;从事医工交叉学科研究。回国完成2年服务期后&#xff0c;I老师再次委托并仍希望去美国顶尖高校&#xff0c;最终我们落实了世界名校斯坦福大学的访问学者职位&#xff0c;满足了…

网络安全的重要性及SASE在企业中的应用

在信息技术日益发展的今天&#xff0c;网络安全已经成为企业不可忽视的重要议题。然而&#xff0c;仍有部分企业对网络安全的重视程度不够&#xff0c;这种疏忽可能会给企业带来严重的后果。 1. 数据泄露的风险 数据是现代企业的核心资产之一。如果企业不重视网络安全&#x…

跨境外贸自动评论脚本开发常用代码!

随着跨境电商的兴起&#xff0c;自动化评论成为了提升销售和客户满意度的重要工具&#xff0c;通过编写自动评论脚本&#xff0c;商家可以快速地在各个平台留下正面评价&#xff0c;提高产品的曝光率和信誉度。 本文将介绍跨境外贸自动评论脚本开发的一些常用代码&#xff0c;…