glGetTexImage()在ATI卡上无法正常工作?当miplevel>时失败0

时间:2010-02-02 22:07:06

标签: c++ opengl textures

我使用该功能从显卡中获取纹理, 但由于某些原因,如果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
  6. 此时我正在使用miplevel 0并通过自己的代码生成mipmap。对此有更好的解决方法吗?

    glGetError()也为所有卡返回0,因此不会发生错误。它只是不起作用。可能是司机问题?

    我仍在寻找更好的解决方案而不是自己在CPU上调整它...

1 个答案:

答案 0 :(得分:1)

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

编辑:听起来像是使用ATI写得不好的OpenGL驱动程序的乐趣。假设您的驱动程序是最新的,使用nVidia卡,解决它或接受它将无法正常工作。这几乎是你唯一的选择。可能值得为ATI讨厌,但他们很可能什么都不做,唉。

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

编辑3:事情就是这样。它“可能”是你的问题的原因。 ATI卡从本地副本中抓取纹理对我来说听起来不太可能,但是如果你使用自动生成的mip贴图,那么它完全在卡片上完成,并且永远不会将它们复制回来。明确尝试在本地构建mip映射,看看是否能解决问题。它可能不会,但你确实需要尝试这些东西,否则你永远不会发现问题。试验和错误都可以解决这个问题。这就是为什么公平的几款游戏都有大型数据库,其中包含驱动程序名称,卡名称和驱动程序版本,以决定某项功能是否有效。