我听说你需要两个纹理尺寸的力量才能在OpenGL中工作。但是,我已经能够加载200x200和300x300(不是2的幂)的纹理。同时,当我尝试使用相同的代码加载512x512(2的幂)的纹理但数据不会加载(顺便说一句,我使用DevIL来加载这些png)。我找不到能告诉我什么类型的尺寸会加载的东西。我也知道你可以剪辑纹理并添加边框,但我不知道结果尺寸应该是什么。
这是加载功能:
void tex::load(std::string file)
{
ILuint img_id = 0;
ilGenImages(1,&img_id);
ilBindImage(img_id);
ilLoadImage(file.c_str());
ilConvertImage(IL_RGBA,IL_UNSIGNED_BYTE);
pix_data = (GLuint*)ilGetData();
tex_width = (GLuint)ilGetInteger(IL_IMAGE_WIDTH);
tex_height = (GLuint)ilGetInteger(IL_IMAGE_HEIGHT);
ilDeleteImages(1,&img_id);
//create
glGenTextures(1,&tex_id);
glBindTexture(GL_TEXTURE_2D,tex_id);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,tex_width,tex_height,0,GL_RGBA,GL_UNSIGNED_BYTE,pix_data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D,NULL);
}
答案 0 :(得分:0)
有一些消息来源可以说是最大值,或者至少可以解决这个问题,你的第一步应该是OpenGL规范,但是要知道你所针对的是哪个OpenGL会很好。据我所知,OpenGl有一个最小的最大纹理大小,硬编码为64x64,实际负责通过GL_MAX_TEXTURE_SIZE告诉你的实际最大值,你可以使用glGet *函数,这将告诉你实现可以处理的两个纹理的最大功率。
除此之外,OpenGL本身从不提及两种纹理的非强大功能,除非它是较新的opengl版本的核心功能,或者它是一个扩展。
如果您想知道实际支持哪些组合,请参阅相应的规范,它将告诉您如何获取该信息。