【发布时间】:2010-02-02 22:07:06
【问题描述】:
我使用该函数从显卡获取纹理, 但由于某种原因,如果 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。
这是经过测试的卡片:
- 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 上调整大小更好的解决方法...
【问题讨论】:
-
glGetError() 是否返回任何有用的信息? “旧卡”到底是什么意思? 1998 年左右曾经有不完整的 OpenGL 实现(例如 Matrox G200 OpenGL MCD),但如果你不告诉我们更多关于它们的信息(包括驱动程序和操作系统版本),很难说这是否适用于你的显卡。
-
您是如何生成 mipmap 的? gluBuild2DMipmaps() 或 glTexParameteri(..., GL_GENERATE_MIPMAP, ...)?
-
gluBuild2DMipmaps() 如果不支持 GL_GENERATE_MIPMAP。并且所有这些卡片都可以看到 mipmap 的地形,所以它不会丢失 mipmap。
-
纹理是用 GL_RGB 格式创建的吗?此外,当 miplevel = 0 时它是否有效? “我注意到该功能确实有效”似乎意味着如此,但我不太确定。
-
它适用于 miplevel 0 是的。并且格式没有区别,我也尝试过使用 GL_RGBA,同样的问题。纹理是用 GL_RGBA 格式创建的。