Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ glGetTexImage()在ATI卡上无法正常工作?当MIPFLEVEL>;0_C++_Opengl_Textures - Fatal编程技术网

C++ glGetTexImage()在ATI卡上无法正常工作?当MIPFLEVEL>;0

C++ glGetTexImage()在ATI卡上无法正常工作?当MIPFLEVEL>;0,c++,opengl,textures,C++,Opengl,Textures,我使用该功能从图形卡获取纹理, 但是由于某些原因,如果MIPFlevel>0,它不会在某些卡上返回任何内容 以下是我用来获取图像的代码: glGetTexImage(GL_TEXTURE_2D, miplevel, GL_RGB, GL_UNSIGNED_BYTE, data); 下面是我用来检查mipmapping使用哪种方法的代码: ext = (char*)glGetString(GL_EXTENSIONS); if(strstr(ext, "SGIS_generate_mipmap"

我使用该功能从图形卡获取纹理, 但是由于某些原因,如果MIPFlevel>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上调整大小更好的修复方法…

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

    编辑:听起来像是使用ATI糟糕的OpenGL驱动程序的乐趣。假设您的驱动程序是最新的,使用nVidia卡,解决它,或者接受它不起作用。这几乎是你唯一的选择。这可能值得与ATI争论,但他们很可能什么也不做,唉

    Edit2:在问题卡上,您是否使用GL\u GENERATE\u MIPMAP?这可能是因为你无法获取mip级别,除非它们是显式构建的。。。?ie请尝试使用gluBuild2DMipmaps()进行所有操作


    编辑3:事情是这样的。这“可能”是你的问题的原因。在我看来,ATI卡从本地副本获取纹理的可能性不大,但是如果您使用自动生成mip贴图,则它会完全在卡上执行,并且永远不会将其复制回来。显式地尝试在本地构建mip映射,看看这是否解决了您的问题。它可能不会,但是你确实需要尝试这些东西,否则你将永远无法解决问题。唉,试错法是解决此类问题的唯一方法。这就是为什么很多游戏都有大型数据库,其中包含驱动程序名、卡名和驱动程序版本,以决定某项功能是否有效。

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

    编辑:听起来像是使用ATI糟糕的OpenGL驱动程序的乐趣。假设您的驱动程序是最新的,使用nVidia卡,解决它,或者接受它不起作用。这几乎是你唯一的选择。这可能值得与ATI争论,但他们很可能什么也不做,唉

    Edit2:在问题卡上,您是否使用GL\u GENERATE\u MIPMAP?这可能是因为你无法获取mip级别,除非它们是显式构建的。。。?ie请尝试使用gluBuild2DMipmaps()进行所有操作


    编辑3:事情是这样的。这“可能”是你的问题的原因。在我看来,ATI卡从本地副本获取纹理的可能性不大,但是如果您使用自动生成mip贴图,则它会完全在卡上执行,并且永远不会将其复制回来。显式地尝试在本地构建mip映射,看看这是否解决了您的问题。它可能不会,但是你确实需要尝试这些东西,否则你将永远无法解决问题。唉,试错法是解决此类问题的唯一方法。这就是为什么很多游戏都有包含驱动程序名称、卡名和驱动程序版本的大型数据库来决定某项功能是否有效。

    答案不是为了要求澄清,这就是评论的目的。是否有办法检查它们是否支持miplevel>0纹理抓取?因此,我不必告诉用户手动更改某些设置。我让它根据支持与否来选择使用哪种方法。所以我看不出有任何理由去尝试(那些不是我的电脑),因为它不会解决任何问题。如果你认为有解决办法,那就让我听听可能性。看我的编辑,我展示了用于检查支持的代码。但是有问题卡的用户可以看到MIP级别!因此,这并不是缺少MIP级别的问题…响应速度慢,但您可以尝试一下,看看是否能够找出错误所在,或者您可以假设一切正常(事实并非如此…驱动程序通常不完整或有错误)答案不需要问清,这就是评论的目的。有没有办法检查它们是否支持miplevel>0纹理抓取?因此,我不必告诉用户手动更改某些设置。我让它根据支持与否来选择使用哪种方法。所以我看不出有任何理由去尝试(那些不是我的电脑),因为它不会解决任何问题。如果你认为有解决办法,那就让我听听可能性。看我的编辑,我展示了用于检查支持的代码。但是有问题卡的用户可以看到MIP级别!因此,它并不是缺少miplevel的问题…响应速度慢,但您可以尝试一下,看看是否能够找出错误所在,或者您可以假设一切正常工作(事实并非如此…驱动程序通常不完整或有错误)。glGetError()是否返回任何有用的信息?你说的“旧牌”到底是什么意思?在1998年前后,OpenGL的实现是不完整的(例如Matrox G200 OpenGL MCD),但是如果你不告诉我们更多关于你的卡的信息(包括驱动程序和操作系统版本),很难说这是否适用于你的卡。你是如何生成你的mipmap的?GLUBILD2DMIPMAPS()或glTexParameteri(…,GL_GENERATE_MIPMAP…)?如果不支持GL_GENERATE_MIPMAP,则GLUBILD2DMIPMAPS()。所有这些卡都可以看到mipmap地形,所以它不缺少mipmap。纹理是用GL_RGB格式创建的吗?另外,当miplevel=0时它是否工作?“我注意到该函数确实有效”似乎暗示了这一点,但我不太确定。它与miplevel 0一起工作是的。格式也没什么不同,我也试过使用GL_RGBA,同样的问题。将创建纹理