问题标签 [wgl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1311 浏览

c++ - wglGetProcAddress 返回 NULL

我正在使用wlgGetProcAddress使用创建的上下文来获取函数wglCreateContext。我已经设置了上下文wglMakeCurrent。我得到了一个有效的函数指针glGetStringi,但我得到NULLglGetString. 我认为glGetStringglGetStringi在同一版本的 OpenGL (1.0) 中引入。任何想法为什么我得到这个NULL

万一这很重要,我有一个驱动程序版本为 13.251.0.0 的 Radeon HD 7950。

0 投票
1 回答
483 浏览

opengl - 即使使用 LoadLibrary 和 GetProcAddress,ChoosePixelFormat 也会崩溃

在单台计算机上,我的应用程序在 OpenGL 初始化期间崩溃,尤其是对 ChoosePixelFormat 的调用。我找到了这个:

C# 中的 wglCreateContext 失败但在托管 C++ 中没有

在应用程序开始时调用 GL 函数(除任何 DC 函数)根本没有帮助。所以我手动加载了opengl32.dll并获得了wglChoosePixelFormat指针。在计算机上,它工作的地方,它仍然工作,但它根本没有帮助那台特定计算机上的问题。

有任何想法吗? 作为记录,那台计算机运行的是 Win7 64。我无法访问它,但我会请那个人告诉我,它有哪个 GPU。好的,电脑是 ACER Aspire 7740 和 ATI Mobility Radeon HD 5650

0 投票
1 回答
3160 浏览

c++ - wglCreateContextAttribsARB returns NULL on capable hardware

I have a program which creates an OpenGL 4.0 context on a Windows machine. On my own computer, this code works - however, on my friend's computer, it does not. wglCreateContextAttribsARB returns NULL, even though my friend's Nvidia card supports OpenGL 4.4 and should be able to return a backwards-compatible context. Every other call does as expected.

This is the context creation code:

Another person had a similar problem and posted this question here. However, the thing that fixed the problem for them is not fixing the problem for me. I'm completely stumped.

0 投票
1 回答
1386 浏览

winapi - 具有共享上下文的多个窗口

我目前有一个适用于除 Mobile Intel GM45 之外的所有视频卡的实现。不幸的是,当我尝试调用wglMakeCurrent(sDC, sRC);所述视频卡时,它完全崩溃了。我没有对该视频卡的物理访问权限。

在我的方法中,我sRC基于第一个sDC.

现在,我读到“如果两个窗口都使用相同的像素格式,则为两个窗口使用 1 个 GL 上下文”(http://www.opengl.org/wiki/Platform_specifics:_Windows#Multiple_Windows),您可以使用单个上下文和多个窗口(DC),如前所述,我的实现在所有其他视频卡上都可以正常工作。

我知道我可以使用多个上下文并使用wglShareLists. 我不想走这条路,因为必须重构很多关于资产加载和诸如此类的代码。

有没有办法使用单个上下文在 OpenGL 中实现多个窗口,以大大简化纹理创建。否则,我必须了解应用程序中的所有窗口,并wglShareLists在开始加载纹理之前预先应用这些窗口,对吗?

编辑:我还尝试wglCreateContextAttribsARB通过以下方式实现:http ://www.opengl.org/wiki/Tutorial%3a_OpenGL_3.1_The_First_Triangle_%28C%2B%2B/Win%29但是,驱动程序在调用本身时崩溃。

0 投票
1 回答
251 浏览

windows - WGL 的潜在滥用,glDrawArrays 中的崩溃

下面的代码创建一个窗口,使用 wglGetProcAddress 加载一些 OpenGL 进程,然后在绿色背景的中心绘制一个红色方块。在我的机器上,程序运行良好,但在朋友的笔记本电脑上,它在调用 xglDrawArrays() 时崩溃,并抱怨该函数试图取消引用 0x00000000。请注意,我朋友的机器上的 xglDrawArrays 指针本身是非空的,正如我在调试器中验证的那样。让我再次强调,错误不是由于 xglDrawArrays 为 NULL,而是由于 xglDrawArrays 在内部访问 NULL 数据。

现在,最奇怪的是,当我在他的机器上将“xglDrawArrays”更改为“glDrawArrays”时,代码突然起作用了。这使我怀疑该错误是由于对 WGL 的某些滥用造成的。

相关的顶点和片段着色器非常简单:

相关代码在这里:

最后,我使用的 glext.h 文件是这个:glxext.h

0 投票
1 回答
525 浏览

windows - Windows 上的 OpenGL 1.0 和 1.1 函数指针

我对 Windows 上 OpenGL 1.0 和 1.1 函数指针的性质有点困惑。我想我已经记下来了,但我不是 100% 确定,所以我希望有人能够确认或评论我目前的理解:

我目前的理解是,您应该使用 加载 1.2+ 函数wglGetProcAddress(),但必须使用 加载 1.0 和 1.1GetProcAddress()函数opengl32.dll。然而,引起我注意的是,它可能会根据当前的上下文wglGetProcAddress()返回不同的函数指针。HGLRC然而,大概 1.0 和 1.1 的指针GetProcAddress()总是相同的。这种行为上的差异感觉很不寻常。

所以,假设我有多个HGLRC对象,我们将它们称为Aand B。我调用wglGetProcAddress()并将结果保存在单独的指针池中,一个A用于B. A然而,我还必须将 1.0 和 1.1 函数加载到这些指针池中,在这种情况下,和的指针似乎B总是相同的。

令我惊讶的是 1.0 和 1.1 函数因此必须是瘦包装器,它将 OpenGL 调用重定向到与当前HGLRC. 然而,如果 Windows 上已经存在这样的重定向机制,那么我想知道为什么wglGetProcAddress()不能也使用它,因为这样做会减轻它返回依赖于上下文的指针的危险。我什至不一定需要知道这个问题的答案,但这个问题的存在让我怀疑我是否一开始就理解正确。

0 投票
1 回答
253 浏览

c - wglCreateContextAttribsARB() gives me 4.4 when I ask for 2.0

On my machine when I call wglCreateContextAttribsARB() asking for a 2.0 context, I get back 2.1.2.

That seems seems close enough to correct, so it doesn't worry me. Yet, the same exact code when called on a friend's machine gives a 4.4 context. Does that make sense, or should I be looking for a bug somewhere? The code is given below. GKGLLoader and GKGLContext modules are ones that I wrote myself, and you'll probably be able to figure out how they work just by looking at their usage, so I won't post their source files (unless someone thinks it might be relevant).

0 投票
1 回答
1294 浏览

c++ - 使用 GLEW 和 WGL 的 OpenGL 抗锯齿

我对 OpenGL 比较陌生,我想在我的 C++ Win32 项目中添加抗锯齿功能。我目前在收到 WM_CREATE 消息时在窗口过程中获取设备上下文,然后使用像素格式描述符创建 OpenGL 上下文,如下所示:

为了让抗锯齿功能发挥作用,我知道我需要使用 WGL_ARB_multisample 之类的扩展。似乎很少有如何实际使用它的例子,尤其是在 GLEW 中。我将如何修改我的代码以使其正常工作?谢谢。

0 投票
0 回答
895 浏览

opengl - [ARB/]WGL 错误的 GetLastError

似乎某些特定于 API 的调用设置了返回的错误GetLastError()。例如,wglCreateContextAttribsARB(...)可以返回(来自规范的信息):

然而,在调试时,我得到了不同的结果。例如,尝试使用wglCreateContextAttribsARB(...)设置 GL 4.5 上下文(我的 GPU 不支持)会导致错误值为0xC0072095. 低 16 位匹配无效版本错误(这是有道理的,因为这一个版本问题),但高 16 位对我来说没有意义。

我浏览了 GetLastError 文档,其中说应该为应用程序错误代码设置第 29 位。但是,我找不到任何理由说明为什么要设置其他位,并且无论如何这与 ARB 规范相冲突,即返回某某值。

这是怎么回事?

0 投票
0 回答
76 浏览

opengl - GLEW 未检测到 OpenGL 扩展?

我正在使用“ DirectStateAccess ”功能编写一些模块。如果不支持,我做了必要的东西。

在客户笔记本电脑上,我能够创建 OpenGL 3.3 Core Profile 上下文。在第一次调用时glGetString(GL_EXTENSIONS)GL_EXT_direct_state_access可用。

但是,GLEW_EXT_direct_state_access 变量绝对等于 false。但是,随后的调用wglGetProcAddress("glTextureParameteriEXT")返回一个非空值。这些功能glTextureParameterxx()似乎也可用......

在这一点上,我想知道我是否可以依靠 GLEW 变量来检查是否确实支持扩展。

哦,顺便说一句,我用“激活了有效的 OpenGL 上下文”进行了测试......