8.6 OpenGL纹理和采样器:备用纹理图像规范命令

备用纹理图像规范命令 Alternate Texture Image Specification Commands

二维和一维纹理图像也可以使用直接从帧缓冲区获取的图像数据进行指定,并且可以重新指定现有纹理图像的矩形子区域。

定义一个二维纹理图像
void glCopyTexImage2D( enum target, int level, enum internalformat, int x, int y, sizei width, sizei height, int border );

定义一个二维纹理图像,其方式与TexImage2D完全相同,区别是图像数据来自帧缓冲区而不是客户端内存。

  • target必须是TEXTURE_2DTEXTURE_1D_ARRAYTEXTURE_RECTANGLE,或者来自表8.19中的立方体贴图面目标之一。
  • xywidthheight精确对应于ReadPixels的相应参数(参见第18.2节);它们指定图像的宽度和高度,以及要复制的帧缓冲区区域的左下角(x,y)坐标。

图像从帧缓冲区中被复制,就像这些参数被传递给CopyPixels函数(参见第18.3节),其中类型参数根据internalformat的不同设置为COLORDEPTHDEPTH_STENCILSTENCIL_INDEX

定义一维纹理图像
void glCopyTexImage1D( enum target, int level, enum internalformat, int x, int y, sizei width, int border );

以与TexImage1D完全相同的方式定义一维纹理图像,唯一的区别是图像数据来自帧缓冲区,而不是客户端内存。

  • target必须是TEXTURE_1D
要仅重新指定纹理对象的纹理图像的矩形子区域,使用以下命令:
void glTexSubImage3D( enum target, int level, int xoffset, int yoffset, int zoffset, sizei width, sizei height, sizei depth, enum format, enum type, const void *data );
void glTexSubImage2D( enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, enum type, const void *data );
void glTexSubImage1D( enum target, int level, int xoffset, sizei width, enum format, enum type, const void *data );
void glCopyTexSubImage3D( enum target, int level, int xoffset, int yoffset, int zoffset, int x, int y, sizei width, sizei height );
void glCopyTexSubImage2D( enum target, int level, int xoffset, int yoffset, int x, int y, sizei width, sizei height );
void glCopyTexSubImage1D( enum target, int level, int xoffset, int x, int y, sizei width );
void glTextureSubImage3D( uint texture, int level, int xoffset, int yoffset, int zoffset, sizei width, sizei height, sizei depth, enum format, enum type, const void *pixels );
void glTextureSubImage2D( uint texture, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, enum type, const void *pixels );
void glTextureSubImage1D( uint texture, int level, int xoffset, sizei width, enum format, enum type, const void *pixels );
void glCopyTextureSubImage3D( uint texture, int level, int xoffset, int yoffset, int zoffset, int x, int y, sizei width, sizei height );
void glCopyTextureSubImage2D( uint texture, int level, int xoffset, int yoffset, int x, int y, sizei width, sizei height );
void glCopyTextureSubImage1D( uint texture, int level, int xoffset, int x, int y, sizei width );

对于*TexSubImage*,纹理对象是指与target绑定的纹理对象;而对于*TextureSubImage*texture参数则是纹理对象的名称。在每个命令中,targettexture的实际目标(即TEXTURE_TARGET值,参见第8.11.2节内容)必须与Table 8.15中所示的对应命令匹配。

不会更改纹理图像的internalformatwidthheightdepthborder参数,也不会更改子区域外的texel值。

每个命令中的level参数指定了要修改的纹理图像的级别。

TexSubImage*DTextureSubImage*D 中的widthheightdepthformattypedata参数与对应的TexImage*D命令中的相应参数相匹配(如果这些参数存在),这意味着它们接受相同的值,并具有相同的意义。例外情况是,NULL数据指针不代表未指定的图像内容。

CopyTex*SubImage3DCopyTex*SubImage2D中的xywidthheight参数与CopyTexImage2D命令中的对应参数匹配。而CopyTex*SubImage1D中的xywidth参数则与CopyTexImage1D命令中的对应参数匹配。

这些命令均以与其对应的TexImage命令完全相同的方式解释和处理像素组,但不同之处在于,将R、G、B、A、深度和模板索引像素组值分配给纹理组件的过程由纹理图像的internalformat决定,而不是通过命令的参数决定。

Tex*SubImage3DCopyTex*SubImage3D命令中的xoffsetyoffsetzoffset参数指定了纹理图像中一个宽为width、高为height、深为depth矩形子区域左下后侧texel坐标。对于立方体贴图数组纹理,zoffset表示要更新的第一个面层编号,而depth表示要更新的面层数量。仅针对TextureSubImage3DCopyTextureSubImage3D命令,texture可以是一个立方体贴图纹理。在这种情况下,zoffset被解释为指定Table 9.3中相应层面对应的立方体贴图面,并且depth表示连续更新的贴图面数量。

CopyTex*SubImage3D相关的depth参数始终为1,因为帧缓冲区内存是二维的,这些命令仅替换三维纹理的一个(s, t)切片部分。

子区域必须位于纹理图像的边界内。

纹理压缩内部格式存储方式可能使得无法在不进行解压和重新压缩的情况下用子图像命令修改图像。即使以这种方式修改了图像,也可能无法保留待修改区域外部某些texel的内容。为了避免这些复杂性,GL不支持对具有压缩内部格式的纹理图像进行任意修改。如果xoffsetyoffsetzoffset不等于零,则调用任何Tex*SubImage*CopyTex*SubImage*命令将生成INVALID_OPERATION错误。此外,此类调用所修改区域之外的任何texel的内容未定义。

如果正在修改的纹理图像的内部格式属于Table 8.14中描述的具体压缩格式之一,则该纹理采用相应的压缩纹理图像编码方式进行存储(参见附录D)。由于这类图像易于沿4 × 4 texel边界编辑,因此对于Tex*SubImage2DTex*SubImage3DCopyTex*SubImage2DCopyTex*SubImage3D命令放宽了子图像位置和大小的限制。当满足以下条件之一时,这些命令将生成INVALID_OPERATION错误:

  • width不是4的倍数,且width + xoffset 不等于 TEXTURE_WIDTH 的值,同时xoffsetyoffset不为零;
  • height不是4的倍数,且height + yoffset 不等于 TEXTURE_HEIGHT 的值,同时xoffsetyoffset不为零;
  • xoffsetyoffset不是4的倍数。

在有效的Tex*SubImage*Copy*TexSubImage*调用期间,此类压缩纹理图像中与正在修改区域不相交的任何4 × 4 texel块的内容都将得到保留。

纹理复制反馈循环 Texture Copying Feedback Loops

如果目标纹理图像级别同时也绑定到了读取帧缓冲区的选定读取缓冲区(参见第18.2.1节),则调用任何CopyTex*SubImage*CopyTexImage*命令将导致未定义的行为。这种情况在关于9.3.2节中的反馈循环描述中有更详细的讨论。


Command NamesValid targets or effective texture targets
TexSubImage1D
CopyTexSubImage1D
TextureSubImage1D
CopyTextureSubImage1D
TEXTURE_1D
TexSubImage2D
CopyTexSubImage2D
TEXTURE_2D
TEXTURE_1D_ARRAY
TEXTURE_RECTANGLE
one of the cube map face targets from table 8.19
TextureSubImage2D
CopyTextureSubImage2D
TEXTURE_2D
TEXTURE_1D_ARRAY
TEXTURE_RECTANGLE
TexSubImage3D
CopyTexSubImage3D
TEXTURE_3D
TEXTURE_2D_ARRAY
TEXTURE_CUBE_MAP_ARRAY
TextureSubImage3D
CopyTextureSubImage3D
TEXTURE_3D
TEXTURE_2D_ARRAY
TEXTURE_CUBE_MAP_ARRAY
TEXTURE_CUBE_MAP

Table 8.15: Valid texture target parameters or effective texture targets for texture subimage commands

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

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

相关文章

03|count(*)查询优化

count(*) count(1) count(字段) count(主键 id) 字段有索引:count(*)≈count(1)>count(字段)>count(主键 id) 字段有索引,count(字段)统计走二级索引,二级索引存储数据比主键索引少,所以count(字段)>count(主键 id) 字段…

网购商城系统源码 积分兑换商城系统源码 独立后台附教程

应用介绍 本文来自:网购商城系统源码 积分兑换商城系统源码 独立后台附教程 - 源码1688 简介: 网购商城系统源码 积分兑换商城系统源码 独立后台附教程 测试环境:NginxPHP7.0MySQL5.6thinkphp伪静态 图片:

软件实际应用实例,茶楼收银软件管理系统操作流程,茶室计时计费会员管理系统软件试用版教程

软件实际应用实例,茶楼收银软件管理系统操作流程,茶室计时计费会员管理系统软件试用版教程 一、前言 以下软件以 佳易王茶社计时计费管理系统软件V17.9为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、计时计费&…

JavaWeb——007MYSQL(DQL多表设计)

# 数据库开发-MySQL 一级目录二级目录三级目录 1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案…

遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时…

《The Art of InnoDB》第二部分|第4章:深入结构-磁盘结构-撕裂的页面(doublewrite buffer)

4.5 撕裂的页面 目录 4.5 撕裂的页面 4.5.1 双写缓冲区的作用 4.5.2 双写缓冲区的结构 4.5.3 双写缓冲区与Redolog的协同工作流程 4.5.2 双写缓冲区写入时机 4.5.3 禁用双写缓冲区 4.5.4 小结 未完待续... 上文我们学习了redo log的结构和其工作原理,它是一个…

vue或webpack加载highcharts与highcharts-3d

highcharts与highcharts-3d下载 https://jshare.com.cn/demos/hhhhiG 点击对应的文件可打开,复制代码到(创建一个同名文件)里面;放到项目对应目录下 引入 两种引入 highcharts.js 方法皆可用;注意 highcharts-3d 引入…

超全整理,自动化测试-YAML 配置文件深入解析(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、YAML详情 YAM…

求解算式666

题目描述 现在有这样一个算式:2*xyn,x和y均为非负数,其中x是奇数,y是偶数,现在给你整数n,请你求出所有符合条件的x,y的数值,从小到大。若无符合条件的数值,则输出"…

Dear ImGui的UE5.3集成实践

Dear ImGui一直较为火热,这是一个调试使用并且可以响应快速迭代的Gui库,甚至可以做到在任何代码块中调用API即显示。如果你想更多的了解一下可访问其官方网站:https://www.dearimgui.org/ 那么本文就来在UE5中尝试踩坑使用它。 UE4.26版本 …

[引擎开发] 深入C++模板编程

[本文大纲] 引言 模板实例化 隐式实例化 显式实例化 模板具体化 显式具体化 部分具体化 函数重载和具体化 类型推断 隐式类型转换 支持的类型转换 引用和const 通用引用、引用折叠和完美转发 …

探索LightGBM:异常值处理与鲁棒建模

导言 异常值是数据中的特殊点,可能导致模型的不准确性和不稳定性。在使用LightGBM进行建模时,处理异常值是非常重要的一步,以确保模型的鲁棒性和可靠性。本教程将详细介绍如何在Python中使用LightGBM进行异常值处理和鲁棒建模,并…

RDMA内核态函数ib_post_recv()源码分析

接上文,上文分析了内核rdma向发送队列添加发送请求的函数ib_post_send,本文分析一下向接收队列添加接收请求的函数ib_post_recv。其实函数调用流程与上文类似,不再重复说明,可参考链接。 函数调用过程 最终会调用到这个函数 下面…

pytorch -- DataLoader

定义 提供了给定数据集的迭代器 torch.utils.data.DataLoader(dataset, batch_size1, 每次拿多少数据 shuffleNone, 是否打乱 samplerNone, batch_samplerNone, num_workers0, 多进程(加载数据时采用)默认是0,使用主进程加载数据 collate_fnNone, p…

【SpringBoot3】Spring Security使用mybatis-plus存储用户角色权限,实现动态权限处理

注:本文基于Spring Boot 3.2.1 以及 Spring Security 6.2.1 相关文章 【SpringBoot3】Spring Security 核心概念 【SpringBoot3】Spring Security 常用注解 【SpringBoot3】Spring Security 详细使用实例(简单使用、JWT模式) 一、使用mybat…

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-LDPC编码介绍(一)

概述 低密度校验码(LDPC码)是一种前向纠错码,LDPC码最早在20世纪60年代由Gallager在他的博士论文中提出,但限于当时的技术条件,缺乏可行的译码算法,此后的35年间基本上被人们忽略,其间由Tanner…

轻松玩转树莓派Pico之九、RP2040-SMP自定义工程创建

[toc]## 1、工程创建 运行完 FreeRTOS-SMP-Demos 后,我们对 SMP 运行有了一定的了解,接下来我们自己创建工程编译运行。 按照前文 轻松玩转树莓派Pico之二、创建自己的pico工程项目 一文创建 pico_smp 项目。 创建 pico_smp.c,并输入&#x…

浅谈数据分析工具在智慧城市中的作用

随着城市化、技术进步和人口不断增长,智慧城市已成为当今世界主要技术发展之一。 智慧城市设备依靠描述模型对城市环境产生的大量数据进行数据分析。 在这种城市景观中,智慧城市是技术和可持续的城市地区,利用信息和通信技术(ICT)来改善城市…

C语言每日一题(61)盛最多水的容器

题目链接 力扣 11 盛最多水的容器 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水…

Eureka服务搭建

1️⃣搭建服务 引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>启动类加注解 EnableEurekaServer SpringBootApplication public…