【发布时间】:2011-01-24 09:24:16
【问题描述】:
我的问题是,当使用 glutInitContextProfile(GLUT_CORE_PROFILE) 而不是 glutInitContextProfile(GLUT_COMPATIBILITY_PROFILE) 纹理区域保持黑色。 (只是强调一点:使用兼容性配置文件,一切都按我期望的方式工作)
我正在使用 DevIL 加载我的纹理,通常使用 ilutGLLoadImage(filename),因为我不确定 DevIL 是否正确设置了 tex 参数,我还使用该代码加载了一些纹理:
ILuint img;
ilGenImages(1, &img);
ilBindImage(img);
ILboolean ret = false;
if((ret = ilLoadImage("...jpg"))){
ret = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
if(!ret){
std::cout << "image conversion failed" << std::endl;
}
glGenTextures(1, &texture[20]);
glBindTexture(GL_TEXTURE_2D, texture[20]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
/*char imageData[27] = {
127, 127, 127,
127, 127, 127,
127, 127, 127,
127, 127, 127,
127, 127, 127,
127, 127, 127,
127, 127, 127,
127, 127, 127,
127, 127, 127,
};*/
//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
ilGetData());
}
else{
std::cout << "image file not found" << std::endl;
}
ilDeleteImages(1, &img);
我测试了不同的 tex 参数,但没有成功,使用这些参数,至少应该不涉及 mipmapping 相关的问题。 当我将注释部分与 imagedata-array 一起使用时,一切正常,所以我想绑定、绘图和着色没有问题。如果您认为该签名可能会出现问题,我会发布更多代码。
我知道,对于核心配置文件,由于某些原因,纹理可以被视为“不完整”,但我就是不知道为什么会发生这种情况。我没有收到任何错误,无论是来自 DevIL 还是来自 OpenGL。
感谢您的帮助。
【问题讨论】:
标签: opengl profile core textures