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

标签 c++ c opengl

我一直在尝试使用 SOIL 库将磁盘上存储的十张图像读入数组指针。然后我想使用 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

    }
}

最佳答案

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

关于C++ - 将多个图像放在数组指针中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472364/

相关文章:

c# - 简单的 OpenTK 着色器不工作

c++ - GLFW/glfw3.h 包含失败

c++ - 在顶点着色器中将法线转换为 View 空间

c++ - boost::none_t 实现的基本原理是什么?

c - 与 STM32f1xx 的 USART 通信

objective-c - 如何获取 Mac 操作系统的实际名称而不是版本?

C 编程 - 使用 TCHAR 枚举 switch case

c++ - 为什么可以连接到未声明为 Q_SLOTS 的函数?

C++ 套接字 256 字节缓冲区

c++ - 浮点运算 : why would order of addition matter?