2015-03-25 3 views
0

Итак, я пытаюсь использовать SOIL для загрузки файла .png, находящегося в папке «текстуры». Папка текстур находится в том же каталоге, что и код. Я перешел в настройки схемы проекта XCode и изменил рабочий каталог на тот, где находится папка. Однако, когда я делаю этот простой тест, он всегда указывает, что текстура GLUint имеет значение NULL.SOIL_load_OGL_texture возвращает NULL, возможно, проблему с рабочим каталогом (XCode 6)

GLuint texture = SOIL_load_OGL_texture 
(
"textures/image.png", 
SOIL_LOAD_AUTO, 
SOIL_CREATE_NEW_ID, 
SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT 
); 

if (texture == 0){ 
    std::cout << "Texture not found!\n"; 
    return 0; 
} 

Я не уверен, если я делаю что-то неправильно в отношении к ПОЧВАМ, но я подозреваю, что файл просто не читать. Как я уже сказал, я изменил рабочий каталог в XCode, но это ничего не меняет.

+0

Вызов 'SOIL_last_result', чтобы получить сообщение об ошибке, и распечатать его. –

+0

@ColonelThirtyTwo Он говорит: «PNG не поддерживается: только 8 бит». Хорошо, так что он находит файл. Однако, если я попытаюсь изменить изображение на 8-битный PNG или 8-битный JPG, он даст мне ошибку EXC_BAD_ACCESS в строке, где я назначаю переменную «текстура». –

+0

Можете ли вы получить трассировку в том месте, где в SOIL он сработает? Также убедитесь, что перед загрузкой текстуры настроен контекст OpenGL. –

ответ

0

ОК, выяснилось. Проблема заключалась в том, что файл PNG был 16-битным, а не 8-битным. Кроме того, функцию SOIL_load_OGL_texture необходимо было вызвать после glfwCreateWindow() и glfwMakeContextCurrent().

Вот ответ, который помог мне: SOIL: 'Unable to open file' in C++ and OpenGL with Xcode

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