2015-07-06 2 views
0

ОТВЕТSOIL_load_image() возвращает нуль

После использования SOIL_last_result() как dcook предложил, я обнаружил две вещи:

1) Не удалось найти изображение, так как PaulMcKenzie сказал, так что я рабочий каталог действительно был неверным, как указано в genpfault.

2) После того, как я установил полный путь, он упомянул, что мой формат jpeg (прогрессивный) не поддерживается. Я установил изображение в стандартный формат jpeg, и он сработал.

Спасибо за помощь!


ORIGINAL ВОПРОС

Я в настоящее время пытается загрузить изображение с помощью ПОЧВУ для использования с OpenGL. Тем не менее, кажется, что он не смог правильно загрузить изображение, поскольку назначенная ему переменная заканчивается нулевым. Я пробовал смотреть на this, но кажется, что парень просто поместил неправильную позицию макета, когда установил атрибут. У меня есть проверка ошибок (glGetError()) после каждой строки, но я пропустил это здесь для удобочитаемости.

Ошибка OpenGL возникает после glTexImage2D() с GL_INVALID_VALUE. Это более чем вероятно, потому что imgWidth/imgHeight больше, чем GL_MAX_TEXTURE_SIZE из-за нулевого изображения.

Выход:

null: 1 
Max size: 3379 
Width: 4298563 
Height: 2686488 
Obj: 1 
GL_INVALID_VALUE - ../src/polygon.cpp:222 

Код:

// Generate the texture object and binds it. 
    glGenTextures(1, &m_texture); 
    glBindTexture(GL_TEXTURE_2D, m_texture); 

    // Texture image data 
    int imgWidth, imgHeight; 

    // Load the texture image. 
    unsigned char* image = SOIL_load_image("potato.jpg", 
        &imgWidth, 
        &imgHeight, 
        0, 
        SOIL_LOAD_RGB); 


    std::cout << "null: " << !image << std::endl; 
    std::cout << "Max size: " << GL_MAX_TEXTURE_SIZE << std::endl; 
    std::cout << "Width: " << imgWidth << std::endl; 
    std::cout << "Height: " << imgHeight << std::endl; 
    std::cout << "Obj: " << m_texture << std::endl; 

    // Generate the texture to the currently bound texture object. 
    glTexImage2D(GL_TEXTURE_2D, 
     0, 
     GL_RGB, 
     imgWidth, 
     imgHeight, 
     0, 
     GL_RGB, 
     GL_UNSIGNED_BYTE, 
     image); 

    // Generate the mipmap to the currently bound texture object. 
    glGenerateMipmap(GL_TEXTURE_2D); 

    // Unbind and free image data. 
    SOIL_free_image_data(image); 
    glBindTexture(GL_TEXTURE_2D, 0); 

Позвольте мне знать, если требуется больше данных. Благодаря!

EDIT 1: Да, изображение находится в правильном месте: bin directory

Кроме того, я попытался с помощью полного пути, это не помогло.

+1

Является ли ваш ['pwd'] (https://en.wikipedia.org/wiki/Working_directory), где ваша программа предполагает это? – genpfault

+1

Возможно, файл 'potato.jpg' не найден? Дайте полный путь и повторите попытку. – PaulMcKenzie

+0

@PaulMcKenzie Я пробовал использовать полный путь, это было бесполезно. – MrSnappingTurtle

ответ

1

Поскольку, похоже, проблема с SOIL, а не GL, проверьте последнюю ошибку SOIL с помощью SOIL_last_result после звонка SOIL_load_image. Это должно дать вам более четкое представление о том, что на самом деле происходит неправильно.

+0

Я проверю это завтра, и я вернусь к вам. – MrSnappingTurtle

Смежные вопросы