我使用该功能从显卡中获取纹理, 但由于某些原因,如果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。
以下是经过测试的卡片:
此时我正在使用miplevel 0并通过自己的代码生成mipmap。对此有更好的解决方法吗?
glGetError()也为所有卡返回0,因此不会发生错误。它只是不起作用。可能是司机问题?
我仍在寻找更好的解决方案而不是自己在CPU上调整它...
答案 0 :(得分:1)
检查glGetTexImage报告的错误。它很可能会告诉你错误是什么。
编辑:听起来像是使用ATI写得不好的OpenGL驱动程序的乐趣。假设您的驱动程序是最新的,使用nVidia卡,解决它或接受它将无法正常工作。这几乎是你唯一的选择。可能值得为ATI讨厌,但他们很可能什么都不做,唉。
Edit2:问题卡上你使用的是GL_GENERATE_MIPMAP吗?除非明确构建,否则你可能无法获取mip级别......?即尝试使用gluBuild2DMipmaps()。
编辑3:事情就是这样。它“可能”是你的问题的原因。 ATI卡从本地副本中抓取纹理对我来说听起来不太可能,但是如果你使用自动生成的mip贴图,那么它完全在卡片上完成,并且永远不会将它们复制回来。明确尝试在本地构建mip映射,看看是否能解决问题。它可能不会,但你确实需要尝试这些东西,否则你永远不会发现问题。试验和错误都可以解决这个问题。这就是为什么公平的几款游戏都有大型数据库,其中包含驱动程序名称,卡名称和驱动程序版本,以决定某项功能是否有效。