OpenGL可以处理哪些纹理尺寸

时间:2014-01-12 20:19:19

标签: c++ opengl textures

我听说你需要两个纹理尺寸的力量才能在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);
}

1 个答案:

答案 0 :(得分:0)

有一些消息来源可以说是最大值,或者至少可以解决这个问题,你的第一步应该是OpenGL规范,但是要知道你所针对的是哪个OpenGL会很好。据我所知,OpenGl有一个最小的最大纹理大小,硬编码为64x64,实际负责通过GL_MAX_TEXTURE_SIZE告诉你的实际最大值,你可以使用glGet *函数,这将告诉你实现可以处理的两个纹理的最大功率。

除此之外,OpenGL本身从不提及两种纹理的非强大功能,除非它是较新的opengl版本的核心功能,或者它是一个扩展。

如果您想知道实际支持哪些组合,请参阅相应的规范,它将告诉您如何获取该信息。