8.26 OpenGL纹理和采样器:纹理图像加载和存储

本文详细介绍了如何在OpenGL中使用GL实现将纹理绑定到图像单元进行加载和存储,包括纹理级别、分层、格式、访问控制等关键概念,以及纹理坐标映射和格式转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

纹理图像加载和存储 Texture Image Loads and Store

通过将纹理绑定到一组图像单元之一,可以使纹理的内容可供着色器读取和写入。GL实现提供了从零开始编号的图像单元数组,图像单元的总数由实现相关的MAX_IMAGE_UNITS的值确定。与纹理图像单元不同,图像单元没有每个纹理目标的单独绑定点;每个图像单元一次只能绑定一个纹理。

将纹理绑定到图像单元以供图像加载和存储使用

void glBindImageTexture( uint unit, uint texture, int level, boolean layered, int layer, enum access, enum format );

其中,unit标识图像单元,texture是纹理的名称,level选择纹理的单个级别。如果texture为零,则会解除当前绑定到图像单元unit 上的任何纹理。

如果由texture标识的纹理是一维数组、二维数组、三维、立方体贴图、立方体贴图数组或二维多重采样数组纹理,则可以绑定整个纹理级别或纹理级别的单个层或面。如果layeredTRUE,则绑定整个级别。如果layeredFALSE,则只绑定由layer标识的单个层。当layeredFALSE时,单个绑定的层将被视为图像访问的不同纹理目标。

  • 一维数组纹理层被视为一维纹理;
  • 二维数组、三维、立方体贴图和立方体贴图数组纹理层被视为二维纹理;
  • 二维多重采样数组纹理被视为二维多重采样纹理。

对于layered为FALSE的立方体贴图纹理,通过将层编号映射到面,根据Table 9.3映射面。
对于layered为FALSE的立方体贴图数组纹理,通过以下方程和将面映射到面,根据Table 9.3映射面:

layer = floor(layerorig / 6)
face = layerorig − (layer × 6)

如果由texture标识的纹理没有多个层或面,无论layeredlayer指定的值如何,都将绑定整个纹理级别。

format指定在进行格式化存储时将图像元素视为的格式,稍后在本节中描述。这被称为图像单元格式。

access指定绑定到图像的纹理将被视为READ_ONLYWRITE_ONLY还是READ_WRITE。如果着色器从绑定为WRITE_ONLY的图像单元读取,或者向绑定为READ_ONLY的图像单元写入,则该着色器操作的结果是未定义的,可能导致应用程序终止。

如果一个绑定到一个或多个图像单元的纹理对象被DeleteTextures删除,它将从每个图像单元中分离,就像调用BindImageTextureunit标识的图像单元和texture设置为零一样。


将纹理绑定到多个图像单元

void glBindImageTextures(uint first, sizei count, const uint *textures);

count个现有纹理对象绑定到从firstfirst + count − 1编号的图像单元。如果textures不为NULL,则它指定了一个包含count个值的数组,每个值必须为零或现有纹理对象的名称。如果texturesNULL,则从firstfirst + count − 1的每个受影响的图像单元将重置为没有绑定的纹理对象。

当将非零纹理对象绑定到图像单元时,图像单元的级别(level&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值