gpt4 book ai didi

c++ - glGetTexImage() 在 ATI 卡上不能正常工作?当 mip 级别 > 0 时失败

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

我使用该函数从显卡获取我的纹理,但出于某种原因,如果 miplevel > 0

,它不会在某些卡上返回任何内容

这是我用来获取图像的代码:

glGetTexImage(GL_TEXTURE_2D, miplevel, GL_RGB, GL_UNSIGNED_BYTE, data);

这是我用来检查使用哪种方法进行 mipmapping 的代码:

ext = (char*)glGetString(GL_EXTENSIONS);

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

到目前为止它工作正常,所以它说下面的那些 ATI 卡支持 GL_GENERATE_MIPMAP。

以下是经过测试的卡片:

  1. ATI Radeon 9550/X1050 系列
  2. ATI Mobility Radeon HD 3470
  3. ATI Radeon X700
  4. ATI Radeon HD 4870
  5. ATI Radeon HD 3450

此时我正在使用 miplevel 0 并通过自己的代码生成 mipmap。有更好的解决方法吗?

此外,对于所有卡片,glGetError() 返回 0,因此不会发生错误。它只是不起作用。可能是驱动问题?

我仍在寻找比自己在 CPU 上调整大小更好的修复方法...

最佳答案

检查 glGetTexImage 报告的错误。它很可能会告诉您错误是什么。

编辑:听起来像是使用 ATI 编写糟糕的 OpenGL 驱动程序的乐趣。假设您的驱动程序是最新的,请使用 nVidia 卡,解决它或接受它不会工作。那几乎是您唯一的选择。可能值得为此麻烦 ATI,但他们很可能什么都不做,唉。

Edit2:在问题卡片上,您使用的是 GL_GENERATE_MIPMAP 吗?除非明确构建,否则您可能无法获取 mip 级别......?即尝试 gluBuild2DMipmaps() 的一切。

编辑 3:虽然如此。它“可能”是您出现问题的原因。 ATI 卡从本地拷贝抓取纹理对我来说听起来不太可能,但是如果您使用自动生成的 mip 贴图,那么它会完全在卡上完成并且永远不会将它们复制回来。明确尝试在本地构建 mip 贴图,看看是否能解决您的问题。它可能不会,但是您确实需要尝试这些事情,否则您将永远无法找出问题所在。唉,反复试验是解决此类问题的全部方法。这就是为什么有相当多的游戏拥有包含驱动程序名称、卡名称和驱动程序版本的大型数据库,以决定某个功能是否有效。

关于c++ - glGetTexImage() 在 ATI 卡上不能正常工作?当 mip 级别 > 0 时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2188074/

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