C ++ - поместить несколько изображений в указатель массива

0

Я пытаюсь прочитать десять изображений, хранящихся на диске, в указатель массива, используя библиотеку 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

    }
}
  • 0
    Заметьте, поместите имена текстур в массив и получите их по индексу массива, почему вы так усердно работаете?
  • 0
    Это правда. Я просто работал с библиотекой SOIL, и онлайн-документация предоставила способ перезаписи существующей переменной / указателя. lonesock.net/soil.html
Теги:
opengl

1 ответ

2
Лучший ответ

Кажется, SOIL_load_OGL_texture не возвращает никакого буфера. Вместо этого он возвращает Id (типа GLuint, который является unsigned int). Если функция не работает, идентификатор будет равен нулю. Вы передаете это целочисленное значение указателю и разыгрываете его, что приводит к нарушению доступа.

  • 0
    Интересно. Я не знал этого. Я предполагал, что это напрямую загрузит данные изображения в указатель. Есть ли способ загрузить файл изображения в указатель массива? Код, однако, выглядит разумным, верно? У меня сложилось впечатление, что это может быть неправильно.
  • 1
    @Eagle Попробуйте использовать метод SOIL_load_image, чтобы загрузить изображение в unsigned char *. en.wikibooks.org/wiki/OpenGL_Programming/...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню