我有一个使用 SOIL 从 JPEG 图像加载纹理的功能。
到目前为止,我一直在使用该SOIL_load_image()
函数加载纹理,然后使用glTexImage2D
(参见下面的代码)将图像提供给 OpenGL。然而!我的纹理是颠倒的,所以我想SOIL_load_OGL_texture()
改用 并提供SOIL_FLAG_INVERT_Y
来翻转图像。不过,我的问题是,我在SOIL_load_OGL_texture()
函数中遇到了未处理的异常。
代码几乎是文档中的复制粘贴,所以我不明白为什么会出现这个错误?
(注意:我可以在顶点着色器中反转纹理,但我想使用 SOIL。)
老办法
int width;
int height;
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textures[0]);
image = SOIL_load_image(filename, &width, &height, 0, SOIL_LOAD_RGB);
if (image == NULL) {
std::cout << "An error occurred while loading image." << std::endl;
exit(EXIT_FAILURE);
}
std::cout << "Loaded first texture image" << std::endl;
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
SOIL_free_image_data(image);
我现在正在尝试什么
GLuint image;
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textures[0]);
image = SOIL_load_OGL_texture(
filename,
SOIL_LOAD_RGB,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y
);
if (image == 0)
cerr << "SOIL loading error: '" << SOIL_last_result() << "' (" << "res_texture.png" << ")" << endl;
和错误
Unhandled exception at 0x0F5427FF (msvcr110d.dll) in AnotherTutorial.exe: 0xC0000005: Access violation reading location 0x00000000.