我使用该功能从显卡获取纹理,
但是由于某些原因,如果miplevel> 0,它不会在某些卡上返回任何内容

这是im用于获取图像的代码:

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。

这是经过测试的卡:
  • ATI Radeon 9550 / X1050系列
  • ATI Mobility Radeon HD 3470
  • ATI Radeon X700
  • ATI Radeon HD 4870
  • 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 map ,看看是否可以解决您的问题。可能没有,但是您确实需要尝试这些方法,否则您将永远无法解决问题。遗憾的是,反复尝试才能解决此类问题。这就是为什么很少有游戏会使用大型数据库(其中包含驱动程序名称,卡名称和驱动程序版本)来决定某个功能是否起作用的原因。

    09-25 21:58