gpt4 book ai didi

c++ - OpenGL:如何自动选择正确的 mipmapping 方法?

转载 作者:可可西里 更新时间:2023-11-01 10:09:29 26 4
gpt4 key购买 nike

我在对不同硬件上的纹理进行纹理映射时遇到问题。我使用以下代码:

char *exts = (char *)glGetString(GL_EXTENSIONS);

if(strstr(exts, "SGIS_generate_mipmap") == NULL){
// use gluBuild2DMipmaps()
}else{
// use GL_GENERATE_MIPMAP
}

但在某些卡上,它说 GL_GENERATE_MIPMAP 受支持,而实际上它不支持,因此 gfx 卡试图从 mipamp 应该所在的位置读取内存,因此卡将其他纹理渲染到那些 miplevels。​​

我试过 glGenerateMipmapEXT(GL_TEXTURE_2D) 但它使我所有的纹理变白,我在使用该函数之前启用了 GL_TEXTURE_2D(正如它被告知的那样)。

我也可以为每个人使用 gluBuild2DMipmaps(),因为它有效。但我不想让新卡的加载速度慢 10 倍,因为有 2 个用户拥有非常旧的卡。

那么如何正确选择mipmap方式呢?

最佳答案

glGenerateMipmap至少 OpenGL 3.3 作为功能的一部分而不是扩展支持。

您有以下选择:

  1. 检查 OpenGL 版本,如果它比第一个支持 glGenerateMipmap 的版本更新,则使用 glGenerateMipmap。
  2. (我推荐这个)OpenGL 1.4..2.1 支持 texParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE)(参见 this )这将从基础级别生成 mipmap。这在 OpenGL 3 中可能已被“弃用”,但您应该能够使用它。
  3. 使用GLEEGLEW ans 使用 glewIsSupported/gleeIsSupported 调用来检查扩展。

此外,我认为坚持 OpenGL 规范应该更容易,而不是使用扩展。许多硬件都支持 OpenGL 3,因此您应该能够将大部分所需功能(着色器、mipmap、帧缓冲区对象、几何着色器)作为 OpenGL 规范的一部分,而不是作为扩展。

关于c++ - OpenGL:如何自动选择正确的 mipmapping 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3551362/

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