问题标签 [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 投票
0 回答
55 浏览

windows - Windows 上的 OpenGL ICD 如何加载 OpenGL 1.0 和 1.1 函数?

最近我一直在研究OpenGL图形驱动程序(ICD)如何在Windows上实现OpenGL运行时(opengl32.dll)调用的OpenGL函数。

我知道我可以使用GetProcAddress来获取 OpenGL 1.0 和 1.1 函数公开的函数指针opengl32.dll,并且我必须调用wglGetProcAddress返回GetProcAddress来获取 OpenGL 1.2+ 函数的上下文相关函数指针。

为了查看 ICD 是否执行 OpenGL 函数,我编写了 opengl32.dll 和 ICD 的包装程序,并让它们在调用函数时打印函数名称。对于 OpenGL 1.2+ 函数,我看到我的测试程序首先调用了wglGetProcAddress从 opengl32.dll 返回的函数指针,然后我看到它调用了DrvGetProcAddress从 ICD 返回的函数指针(我为其中一些函数编写了钩子函数)。所以证明这些功能是由显卡驱动实现的。但是对于 OpenGL 1.0 和 1.1 函数,它们具有由 opengl32.dll 公开的 API 符号,当它们尝试通过函数名加载它们时wglGetProcAddress,opengl32.dll 和ICD 都返回 NULL。DrvGetProcAddress

我也了解到,这两个 GetProcAddress 函数都只用于获取 OpenGL 扩展(OpenGL 1.2 或更高版本)函数的函数指针,但我不确定图形驱动程序现在是否实现了 OpenGL 1.0 和 1.1 函数。如果是这样,opengl32.dll 如何调用 ICD 中的这些函数?

0 投票
2 回答
557 浏览

opengl - 请求最新版本的 OpenGL 上下文

我正在开发一个应用程序,它可以通过逐渐禁用一些功能和优化来使用从 4.6 到 2.0 的任何 OpenGL 版本。这意味着它可以使用 2.0,但更喜欢最新的受支持版本,以便能够使用 OpenGL 3.x-4.x 中的所有可用功能。此外,它处理核心和兼容性上下文之间的所有差异,因此它应该适用于任何配置文件。

似乎在 Windows 上不会有问题,因为我可以省略版本和配置文件并自动获取与最新支持版本的兼容性上下文。

但在 macOS 和 Mesa 上,情况有所不同。在那里,我必须请求某个特定版本的核心前向兼容上下文,即使我不想要特定版本,我也想要最新版本。

我该如何处理这个问题?是否必须循环尝试所有版本 4.6、4.5、4.4、4.3、4.2、4.1、4.0、3.3、3.2、3.1、3.0、2.1、2.0 直到成功创建上下文?还是有更好的解决方案?

如果没有更好的通用解决方案,我想知道它在不同平台上的不同驱动程序在实践中是如何工作的。

0 投票
0 回答
115 浏览

c++ - QT 非 GUI 线程上的 WGL 窗口

我开始尝试使用 QT 的 OpenGL 资源在非 GUI 线程上创建 OpenGL 渲染窗口,如该线程中所述:

https://forum.qt.io/topic/123151/qwindow-on-a-non-gui-thread

我尝试这样做的原因是因为我的 GUI 线程非常忙于处理大量事件和小部件,当我使用 QWindow 时这会导致卡顿和丢帧。

目前,我已经创建了一个用于创建QOpenGLContext的本机 WGL 上下文/窗口:这是该项目的 github 链接:https ://github.com/rtavakko/WinGL

所有资源,包括本机窗口,都可以毫无问题地创建,并且我能够在单独的线程上使 QT 上下文成为当前的,并且 OpenGL 渲染也不会产生错误,但 Hello Triangle 不会在我的窗口上渲染。似乎原生 WGL 上下文和 QT 上下文仍然是独立的实体。

如果我进行直接 WGL 调用以使上下文成为当前/交换缓冲区,我似乎能够在本机窗口上进行 OpenGL 调用,但似乎我仍然无法访问 QT 上下文呈现的资源(例如 FBO 输出纹理)。

有什么想法可能是错的吗?

干杯!

0 投票
1 回答
62 浏览

c++ - 如何计算给定文本的高度和宽度?OpenGL

我使用这两个函数绘制文本:https ://pastebin.com/JVc5xFFT

我绘制文本 - GlText(dc, "Test", ERGB{ 155, 179, 0 }, 5, 220);

我用这个函数构建了一个字体

如何找出给定文本的高度和宽度?

0 投票
1 回答
83 浏览

c# - OpenGL 加载在看似随机的点失败

我正在使用 LoadLibrary/GetProcAddress/wglGetProcAddress 在 C# 中加载 OpenGL。由于某种原因,它无法加载 的指针glBlendFunc,以及在那之后的其他随机指针。我已经浏览了我的代码一个小时的大部分时间,所有这些失败的部分看起来完全正常吗?

加载函数指针并将其转换为委托的代码。

调用GetFunction.

委托代码示例。

我正在使用的 DllImports

所有的枚举都是非常标准的,不需要上下文。我像往常一样加载库:LoadLibrary(opengl32.dll);. 谁能向我解释我哪里出错了?

0 投票
2 回答
67 浏览

c++ - 为什么这个 OpenGL + WIN32 代码会产生垂直线?

需要明确的是,我已经广泛测试了这段代码,发现问题出在 WGL 代码之前编写的代码的某个地方。正是在 WIN32 代码中。现在我认为这可能部分是由调用 gluOrth2D 引起的,但即便如此,据我所知,这不应该是主要原因。我可能会自己弄乱一些东西来解决这个问题,但考虑到这个问题(发生在一个更大的项目中)已经占用了我很多时间,我认为值得发布这个包裹,以防其他人遇到同样的问题。我希望得到解释以及修复/更正。

0 投票
0 回答
33 浏览

c - 使用 wgl 加载 OpenGL

我一直在传递函数“gladLoadGLLoader”时遇到问题(GLADloadproc)wglGetProcAddress。我了解到这是因为 wglGetProcAddress 仅执行来自 OpenGL 1.1+ 的功能,而 GetProcAddress 执行来自 OpenGL 1.0 和 1.1 的功能。一个人将如何使用 Glad 加载所有内容。而且,请不要建议像 glfw 这样的东西,因为我喜欢自己管理窗口和输入。从创建上下文到加载 Glad,一切都有效。而且,是的,我已经绑定了上下文。

0 投票
1 回答
23 浏览

opengl - WGL - 选择像素格式和 sRGB 帧缓冲区

我有一个遗留的 OpenGL 应用程序,它设置一个像素格式,ChoosePixelFormat而不是wglChoosePixelFormatARBwglGetPixelFormatAttribivARB/wglGetPixelFormatAttribfvARBChoosePixelFormat不允许使用显式设置帧缓冲区颜色空间WGL_EXT_colorspace尽管我注意到glEnable(GL_FRAMEBUFFER_SRB)在渲染测试纹理时调用提供了颜色空间转换。它是如何工作的 ?默认情况下是否ChoosePixelFormat设置 sRGB 颜色空间?