如何确定调用 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;
但我不确定在给定 internalformat
、format
和 type
的情况下确定每像素字节数的正确方法?
format
能给我颜色分量吗? type
给我每个颜色分量的位数?
internalformat 参数与确定像素传输操作中存储的数据无关;只有 格式 和 类型 重要。
嗯,实际上不是 "only"。看,format 和 type 结合起来决定一个像素数据价值的大小(format 告诉你数据中有多少个通道、这些通道的顺序以及数据是浮点数还是整数;type 告诉您通道或像素值的存储方式)。但是要确定如何从一个像素移动到另一个像素、从一行移动到另一行以及从 2D 图像到 2D 图像,您需要更多。
您需要的是 GL_UNPACK_*
state, whose values are set by the glPixelStore
的全部。 GL_UNPACK_ALIGNMENT
告诉你每行像素数据的对齐方式。你需要这个才能从一行跳到另一行。还有其他 UNPACK
状态,允许用户从 select 子矩形上传。如果您想解释在所有情况下上传的内容,您必须使用 glGetIntegerv
获取这些 UNPACK
参数中的 所有 并按照标准指定的方式解释它们。
我正在跟踪一些 gl 调用并想记录传递到 glTexImage3D() 的数据。我需要知道数据有多少字节长。
开始很容易:
size_t num_pixels = width*height*depth;
但我不确定在给定 internalformat
、format
和 type
的情况下确定每像素字节数的正确方法?
format
能给我颜色分量吗? type
给我每个颜色分量的位数?
internalformat 参数与确定像素传输操作中存储的数据无关;只有 格式 和 类型 重要。
嗯,实际上不是 "only"。看,format 和 type 结合起来决定一个像素数据价值的大小(format 告诉你数据中有多少个通道、这些通道的顺序以及数据是浮点数还是整数;type 告诉您通道或像素值的存储方式)。但是要确定如何从一个像素移动到另一个像素、从一行移动到另一行以及从 2D 图像到 2D 图像,您需要更多。
您需要的是 GL_UNPACK_*
state, whose values are set by the glPixelStore
的全部。 GL_UNPACK_ALIGNMENT
告诉你每行像素数据的对齐方式。你需要这个才能从一行跳到另一行。还有其他 UNPACK
状态,允许用户从 select 子矩形上传。如果您想解释在所有情况下上传的内容,您必须使用 glGetIntegerv
获取这些 UNPACK
参数中的 所有 并按照标准指定的方式解释它们。