我想将一个字节数组读入3D纹理。
QFile file(filename);
if(!file.open(QIODevice::ReadOnly))
{
return false;
}
QByteArray* data = new QByteArray(file.readAll(), m_ImageWidth*m_ImageHeight*m_ImageCount );
glGenTextures(1, m_textures);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_3D, m_textures[0]);
glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, m_ImageWidth, m_ImageHeight, m_ImageCount,
0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
我可以这样做吗?我在项目中遇到访问冲突,我想检查它们是否可以来自这里。
glTexImage3D()
答案 0 :(得分:3)
您的data
变量包含指向存储QByteArray对象的内存中的位置的指针,但它封装的实际数据存储在其他位置。当glTexImage3D
尝试从data
指针开始读取大块内存时,它会运行到未映射的内存中。
要获取指向实际数据的指针,请改用data-> constData()。 QByteArray::constData