如何确定调用 glTexImage3D() 的数据长度(以字节为单位)?

How can I determine the length of data in bytes for the call to glTexImage3D()?

我正在跟踪一些 gl 调用并想记录传递到 glTexImage3D() 的数据。我需要知道数据有多少字节长。

开始很容易:

size_t num_pixels = width*height*depth;

但我不确定在给定 internalformatformattype 的情况下确定每像素字节数的正确方法?

format 能给我颜色分量吗? type 给我每个颜色分量的位数?

internalformat 参数与确定像素传输操作中存储的数据无关;只有 格式类型 重要。

嗯,实际上不是 "only"。看,formattype 结合起来决定一个像素数据价值的大小(format 告诉你数据中有多少个通道、这些通道的顺序以及数据是浮点数还是整数;type 告诉您通道或像素值的存储方式)。但是要确定如何从一个像素移动到另一个像素、从一行移动到另一行以及从 2D 图像到 2D 图像,您需要更多。

您需要的是 GL_UNPACK_* state, whose values are set by the glPixelStore 的全部。 GL_UNPACK_ALIGNMENT告诉你每行像素数据的对齐方式。你需要这个才能从一行跳到另一行。还有其他 UNPACK 状态,允许用户从 select 子矩形上传。如果您想解释在所有情况下上传的内容,您必须使用 glGetIntegerv 获取这些 UNPACK 参数中的 所有 并按照标准指定的方式解释它们。