怎么检查计算机是否安装了支持OpenGL的ICD驱动??

时间:2021-12-02 04:59:57
怎么检查计算机是否安装了支持OpenGL的ICD驱动??
手工查看或者
编写查询程序代码均可.

6 个解决方案

#1


下个everest看opengl那一项有icd信息

#2


    #include <GL/gl.h>
    #include <string.h>

    int isExtensionSupported(const char *extension)
    {
      const GLubyte *extensions = NULL;
      const GLubyte *start;
      GLubyte *where, *terminator;

      /* Extension names should not have spaces. */
      where = (GLubyte *) strchr(extension, ' ');
      if (where || *extension == '\0')
        return 0;
      extensions = glGetString(GL_EXTENSIONS);
      /* It takes a bit of care to be fool-proof about parsing the
         OpenGL extensions string. Don't be fooled by sub-strings,
         etc. */
      start = extensions;
      for (;;) {
        where = (GLubyte *) strstr((const char *) start, extension);
        if (!where)
          break;
        terminator = where + strlen(extension);
        if (where == start || *(where - 1) == ' ')
          if (*terminator == ' ' || *terminator == '\0')
            return 1;
        start = terminator;
      }
      return 0;
    }

int hasBGRA = isExtensionSupported("GL_EXT_bgra");
............


#3


可以看看这个网页,提示如何查看当前机器opengl版本的扩展支持的:)
http://www.opengl.org/resources/features/OGLextensions/

#4


总结
GL本身并没有提供查询是否安装了ICD的方法,
我估计可以通过WMI得到,但是没找到方法.

我决定用下面的方法来大致猜测是否安装了ICD
(1)用 glGetString(GL_VERSION); 获得GL版本,由于MS的软件实现只有 1.1, 故版本大于 1.1 可以认为有 ICD(或MCD)
(2)用 glGetString(GL_EXTENSIONS); 检查扩展, MS的实现并没有提供太多扩展(猜测), 如果有扩展,则认为有ICD(或MCD).

缺点: (1)(2)都 有可能因为MS增强对GL的支持而得出错误结论.

#5


有个软件 OpenGL Extensions Viewer
甚至列出了ICD驱动的版本号, 但我不知道他是怎么作到的.

#6


如果你想列出extension,getstring还是能够胜任的, 你只要准备一套完备的扩展串,分离这些串,再和你的串一一对比得到

而ICD版本是两回事,他是以来系统的,系统又是依赖驱动信息的,驱动信息依赖硬件。。。。最方便的方法:WIN32的就读注册表, 其他系统的。。。俺不知道~~

当然肯定还有其他的方法, 不过和读注册表不会有什么本质的不同  因为同样依赖你为当前系统安装了什么驱动(相关的inf和驱动文件)
这些信息整理号之后放到了注册表里以备查询, 就算是OS本身也多数是在用注册表来查询硬件信息

除非你对端口访问感兴趣

#1


下个everest看opengl那一项有icd信息

#2


    #include <GL/gl.h>
    #include <string.h>

    int isExtensionSupported(const char *extension)
    {
      const GLubyte *extensions = NULL;
      const GLubyte *start;
      GLubyte *where, *terminator;

      /* Extension names should not have spaces. */
      where = (GLubyte *) strchr(extension, ' ');
      if (where || *extension == '\0')
        return 0;
      extensions = glGetString(GL_EXTENSIONS);
      /* It takes a bit of care to be fool-proof about parsing the
         OpenGL extensions string. Don't be fooled by sub-strings,
         etc. */
      start = extensions;
      for (;;) {
        where = (GLubyte *) strstr((const char *) start, extension);
        if (!where)
          break;
        terminator = where + strlen(extension);
        if (where == start || *(where - 1) == ' ')
          if (*terminator == ' ' || *terminator == '\0')
            return 1;
        start = terminator;
      }
      return 0;
    }

int hasBGRA = isExtensionSupported("GL_EXT_bgra");
............


#3


可以看看这个网页,提示如何查看当前机器opengl版本的扩展支持的:)
http://www.opengl.org/resources/features/OGLextensions/

#4


总结
GL本身并没有提供查询是否安装了ICD的方法,
我估计可以通过WMI得到,但是没找到方法.

我决定用下面的方法来大致猜测是否安装了ICD
(1)用 glGetString(GL_VERSION); 获得GL版本,由于MS的软件实现只有 1.1, 故版本大于 1.1 可以认为有 ICD(或MCD)
(2)用 glGetString(GL_EXTENSIONS); 检查扩展, MS的实现并没有提供太多扩展(猜测), 如果有扩展,则认为有ICD(或MCD).

缺点: (1)(2)都 有可能因为MS增强对GL的支持而得出错误结论.

#5


有个软件 OpenGL Extensions Viewer
甚至列出了ICD驱动的版本号, 但我不知道他是怎么作到的.

#6


如果你想列出extension,getstring还是能够胜任的, 你只要准备一套完备的扩展串,分离这些串,再和你的串一一对比得到

而ICD版本是两回事,他是以来系统的,系统又是依赖驱动信息的,驱动信息依赖硬件。。。。最方便的方法:WIN32的就读注册表, 其他系统的。。。俺不知道~~

当然肯定还有其他的方法, 不过和读注册表不会有什么本质的不同  因为同样依赖你为当前系统安装了什么驱动(相关的inf和驱动文件)
这些信息整理号之后放到了注册表里以备查询, 就算是OS本身也多数是在用注册表来查询硬件信息

除非你对端口访问感兴趣