来自QFile的QByteArray

时间:2015-10-10 09:23:03

标签: c++ c qt opengl

我想将一个字节数组读入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()

是违规行为

1 个答案:

答案 0 :(得分:3)

您的data变量包含指向存储QByteArray对象的内存中的位置的指针,但它封装的实际数据存储在其他位置。当glTexImage3D尝试从data指针开始读取大块内存时,它会运行到未映射的内存中。

要获取指向实际数据的指针,请改用data-> constData()。 QByteArray::constData