gpt4 book ai didi

c++ - OpenGL 可以处理哪些纹理尺寸

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:49 24 4
gpt4 key购买 nike

我听说您需要两个纹理维度的幂才能在 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);
}

最佳答案

有一些来源确实说明了最大值或至少是如何计算出来的,您的第一步应该是 OpenGL 规范,但为此最好知道您的目标是哪个 OpenGL。据我所知,OpenGl 有一个最小的 ma​​ximum 硬编码纹理大小,即 64x64,对于实际的最大值,实现负责通过 GL_MAX_TEXTURE_SIZE 告诉你,你可以将它与 glGet* 函数一起使用,这会告诉你实现可以处理的两个纹理的最大功率。

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

如果您想知道实际支持哪些组合,请再次引用相应的规范,它会让您知道如何获取该信息。

关于c++ - OpenGL 可以处理哪些纹理尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com