gpt4 book ai didi

c++ - wglCreateContextAttribsARB 在有能力的硬件上返回 NULL

转载 作者:可可西里 更新时间:2023-11-01 10:05:58 34 4
gpt4 key购买 nike

我有一个程序可以在 Windows 机器上创建 OpenGL 4.0 上下文。在我自己的电脑上,这段代码可以工作——但是,在我 friend 的电脑上,它就不行了。 wglCreateContextAttribsARB 返回 NULL,即使我 friend 的 Nvidia 卡支持 OpenGL 4.4 并且应该能够返回向后兼容的上下文。其他所有调用都按预期进行。

这是上下文创建代码:

dc = GetDC(window::get());

PIXELFORMATDESCRIPTOR pfd = { 0 };
pfd.nSize = sizeof(pfd);
pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cDepthBits = 32;

int nPixelFormat = ChoosePixelFormat(dc, &pfd);
SetPixelFormat(dc, nPixelFormat, &pfd);
HGLRC tempRC = wglCreateContext(dc);
wglMakeCurrent(dc, tempRC);
glewInit();

static const int attributes[] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, 4,
WGL_CONTEXT_MINOR_VERSION_ARB, 0,
NULL
};

rc = wglCreateContextAttribsARB(dc, NULL, attributes);

if (rc == NULL) {
abort();
}

wglMakeCurrent(NULL, NULL);
wglDeleteContext(tempRC);
wglMakeCurrent(dc, rc);

glClearColor(0.2, 0.4, 0.6, 1.0);
glEnable(GL_DEPTH_TEST);
wglSwapIntervalEXT(1);

另一个人有类似的问题并发布了this question here .但是,为他们解决问题的事情并没有为我解决问题。我完全被难住了。

最佳答案

检查您的基本上下文的供应商字符串。还要检查其他 OpenGL 程序是否正常运行。

有一些东西可以完全禁用图形加速,主要与镜像驱动程序(远程桌面、屏幕录制等)有关。

此外,一些笔记本电脑同时集成了 Intel1 显卡 (iGPU) 和独立的 nVidia 或 AMD 显卡 (dGPU)。在驱动程序检测到游戏或基准测试运行之前,dGPU 将断电以延长电池生命周期。

在 C 或 C++ 中,对于 nVidia,有一种相对简单的方法来为您的应用程序请求 dGPU:

extern "C" { _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; }

不幸的是people are still searching for ways to do this for other hybrids, like AMD .


1 AMD 也制造带有 iGPU 的处理器,但它们的功能更完整(如果速度较慢),并且如果还存在 dGPU,它们将以不平衡的 CrossFire 形式协同工作。因此,我假设在这种情况下没有必要明确启用 dGPU。如果您有 AMD APU(组合 CPU + iGPU)和 nVidia dGPU,我不知道会发生什么。

关于c++ - wglCreateContextAttribsARB 在有能力的硬件上返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746089/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com