C ++ - 将多个图像放在数组指针中

时间:2014-01-31 04:23:48

标签: c++ c opengl

我一直在尝试使用SOIL库将存储在磁盘上的10个图像读入数组指针。我想使用3D纹理在OpenGL中渲染结果数据。

我编写的用于从磁盘读取图像并将其存储在缓冲区中的代码会引发Access violation reading location 0x00000000错误。

这是使用SOIL将多个图像存储到数组指针中的正确方法吗?

unsigned char *tex;
int imSize = h*w;

unsigned char *buff = new unsigned char[h * w * slices];

for(int i = 1; i<=10; i++)
{
    for(int j = 0; j<imSize; j++)
    { 
        if (i==1)
        {   
            tex = (unsigned char*) SOIL_load_OGL_texture("Data/PA_170090.png",
                    SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,SOIL_FLAG_INVERT_Y);

            buff[((i-1)*imSize) + j] = tex[j]; }

        if (i==2)
        {   tex = (unsigned char*)SOIL_load_OGL_texture("Data/PA_170091.png",
                    SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,  SOIL_FLAG_INVERT_Y);
            buff[(i-1)*imSize + j] =  tex[j]; }

        if (i==3)
        {   tex = (unsigned char*)SOIL_load_OGL_texture("Data/PA_170092.png",
                    SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,  SOIL_FLAG_INVERT_Y);
            buff[(i-1)*imSize + j] =  tex[j];}

        ....
        .... // up to 10 images

    }
}

1 个答案:

答案 0 :(得分:2)

似乎SOIL_load_OGL_texture,没有返回任何缓冲区。相反,它返回一个Id(类型为GLuint,即unsigned int)。如果函数失败,则id将为零。您正在将该整数值转换为指针并取消引用它,这会导致访问冲突。