当前位置:  开发笔记 > 开发工具 > 正文

如何编写检查openGL支持的安装程序?

如何解决《如何编写检查openGL支持的安装程序?》经验,为你挑选了1个好方法。

我们有一个使用OpenGL的3D查看器,但我们的客户有时会抱怨它"不工作".我们怀疑大多数这些问题源于他们试图在businiss笔记本电脑上使用,实际上是现代3D实时游戏.

我们如何在我们使用的windows msi安装程序中检查对openGL的支持?

作为旁注,如果你能回答"OpenGL支持的图形卡列表?",那也很有意思.奇怪,谷歌在这里没有帮助..



1> NeARAZ..:

取决于客户的意思是"不工作".它可能是以下之一:

    它根本没有安装/启动,因为缺少一些OpenGL支持.

    它会启动,但会进一步崩溃.

    它启动,不会崩溃,但渲染是腐败的.

    它启动并正确渲染所有内容,但性能极差.

所有Windows版本(自95年起)都内置了OpenGL支持.因此,除非您的应用程序需要更高的OpenGL版本,否则不太可能导致上述情况1).

但是,默认的OpenGL实现是带有软件渲染的 OpenGL 1.1 .如果用户没有手动安装具有OpenGL支持的驱动程序(从NVIDIA/AMD/Intel站点下载的任何驱动程序将具有OpenGL),则他们将默认使用这种缓慢而旧的实现.这很可能导致上述情况3)和4).

即使OpenGL可用,在Windows上OpenGL驱动程序也不是很强大,温和地说.驱动程序中的各种错误很可能导致情况2),执行有效的操作会导致驱动程序崩溃.

这是一个C++/WinAPI代码片段,它创建一个虚拟OpenGL上下文并检索信息(GL版本,图形卡名称,扩展等):

// setup minimal required GL
HWND wnd = CreateWindow(
    "STATIC",
    "GL",
    WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
    0, 0, 16, 16,
    NULL, NULL,
    AfxGetInstanceHandle(), NULL );
HDC dc = GetDC( wnd );

PIXELFORMATDESCRIPTOR pfd = {
    sizeof(PIXELFORMATDESCRIPTOR), 1,
    PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL,
    PFD_TYPE_RGBA, 32,
    0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0,
    16, 0,
    0, PFD_MAIN_PLANE, 0, 0, 0, 0
};

int fmt = ChoosePixelFormat( dc, &pfd );
SetPixelFormat( dc, fmt, &pfd );

HGLRC rc = wglCreateContext( dc );
wglMakeCurrent( dc, rc );

// get information
const char* vendor = (const char*)glGetString(GL_VENDOR);
const char* renderer = (const char*)glGetString(GL_RENDERER);
const char* extensions = (const char*)glGetString(GL_EXTENSIONS);
const char* version = (const char*)glGetString(GL_VERSION);

// DO SOMETHING WITH THOSE STRINGS HERE!

// cleanup
wglDeleteContext( rc );
ReleaseDC( wnd, dc );
DestroyWindow( wnd );

您可以以某种方式将该代码插入您的安装程序或应用程序,并至少检查GL版本为1.1; 这将检测"驱动程序未安装"的情况.要解决实际的OpenGL驱动程序错误,你必须弄清楚它们并解决它们.很多工作.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有