glTexImage2D 中 format internalformat type 参数的含义

在OpenGL中初始化一个纹理时,glTexImage2D()函数中指定纹理格式数据有三个参数,如下面的红字:

 
 
void glTexImage2D(GLenum target,
 GLint level,
GLint internalFormat,
 GLsizei width,
 GLsizei height,
 GLint border,
GLenum format,
GLenum type,
 const GLvoid * data);
这里关系到OpenGL中的 pixel transfer 操作,pixel transfer 表示从内存到显存(unpack)或者从显存到内存(pack)的过程。显然glTexIamge2D是unpack操作。
 
internalformat是指OpenGL内部存储这个纹理时所用的格式,同时指定了哪些分量以及每个分量对应的bit数,可以理解为显存中存储的格式,形如GL_RGB, GL_RGB32F, GL_COMPRESSED_RGB。格式形如GL_R32F,表示这个纹理只有一个分量,分量为32位浮点数,OpenGL网站上有详细说明。值得注意的是,如果该格式为GL_RGB,GL_RGBA,GL_DEPTH_COMPONENT等这种只指定分量个数的,那么OpenGL中会自动对每个分量进行截断(clamp),保证其范围为[0, 1]。因此如果不需要OpenGL自动截断,则应指定internalformat为GL_RGB16F类似的格式。
 
 
format 和 type 指定的是client内存中存储的格式,也就是data指针中的所存放的texture的格式。

format形如GL_RG, GL_RED等,即指定哪些颜色分量。

type是像素数据的bit depth,包括GL_UNSIGNED_BYTE,GL_FLOAT,GL_UNSIGNED_SHORT_5_6_5等。
类似的,glReadPixels()函数中也有一个format和type,和上述的type,format含义相同,即按照指定的格式从OpenGL显存内部读出到buffer中,也就是 pack 操作的格式。

查看原文:http://wangyudong.xyz/?p=266
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值