Я пытаюсь прочитать десять изображений, хранящихся на диске, в указатель массива, используя библиотеку SOIL. Я хотел бы затем обработать полученные данные в OpenGL, используя 3D-текстуры.
Код, который я написал, чтобы читать изображения с диска и хранить их в буфере, вызывает ошибки обнаружения 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
). Если функция не работает, идентификатор будет равен нулю. Вы передаете это целочисленное значение указателю и разыгрываете его, что приводит к нарушению доступа.