ANSWER
使用SOIL_last_result()
后,正如dcook
建议的那样,我发现了两件事:
1)它无法找到图像,如PaulMcKenzie
所述,因此我的工作目录确实不正确,因为genpfault
提到了。
2)在我设置完整路径后,它提到我的jpeg格式(渐进式)不受支持。我将图像设置为标准的jpeg格式并且有效。
感谢您的帮助!
原始问题
我目前正在尝试使用SOIL加载图像以与OpenGL一起使用。但是,它似乎无法正确加载图像,因为它被分配的变量最终为空。我试过看this但看起来这个人在设置属性时只是放错了布局位置。我在每一行之后检查错误(glGetError()
),但为了便于阅读,我省略了这一点。
在glTexImage2D()
之后GL_INVALID_VALUE
发生OpenGL错误。这很可能是因为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);
如果需要更多数据,请与我们联系。谢谢!
编辑1:是的,图片位于正确的位置:
另外,我尝试使用完整路径,但没有帮助。
答案 0 :(得分:1)
由于SOIL而不是GL似乎存在问题,因此请在调用SOIL_last_result
后使用SOIL_load_image
检查上一次SOIL错误。这应该可以让你更好地了解实际出现的问题。
答案 1 :(得分:0)
我有同样的问题。解决方案是设置文件的完整路径,例如
C:/TestProjectsCPP/OpenGLTutorials/OpenGLTutorials/res/images/image1.jpg
加载并显示此图像后。