我正在跟踪一些gl调用,并希望记录传递到glTexImage3D()中的数据。我需要知道数据有多少字节长。
一开始很容易:
size_t num_pixels = width*height*depth;
但我不确定在给定internalformat
、format
和type
的情况下,确定每个像素字节的正确方法是什么?
format
给我颜色成分吗?和CCD_ 5给了我每个颜色分量的比特数?
internalformat参数与计算像素传输操作中存储的数据无关;只有格式和类型重要。
实际上,不是"唯一"。请参阅,format和type组合可确定像素数据的大小(form告诉数据中有多少个通道、这些通道的顺序以及数据是浮点还是整数;type告诉您如何存储通道或像素值)。但是,要确定如何从一个像素移动到另一个像素,从一行移动到一行,从2D图像移动到2D图像,还需要更多。
您需要的是所有GL_UNPACK_*
状态,其值由glPixelStore
设置。GL_UNPACK_ALIGNMENT
告诉每行像素数据的排列。你需要这样才能从一行跳到另一行。还有其他UNPACK
状态,允许用户选择一个子矩形进行上传。如果您想解释在所有情况下上传的内容,则必须使用glGetIntegerv
获取这些UNPACK
参数中的所有,并按照标准指定进行解释。