ОТВЕТ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: Да, изображение находится в правильном месте:
Кроме того, я попытался с помощью полного пути, это не помогло.
Является ли ваш ['pwd'] (https://en.wikipedia.org/wiki/Working_directory), где ваша программа предполагает это? – genpfault
Возможно, файл 'potato.jpg' не найден? Дайте полный путь и повторите попытку. – PaulMcKenzie
@PaulMcKenzie Я пробовал использовать полный путь, это было бесполезно. – MrSnappingTurtle