gpt4 book ai didi

c++ - 客户端程序中的 glewInit() 和 GLEW_ARB_xxx_ 失败

转载 作者:行者123 更新时间:2023-11-28 02:36:30 27 4
gpt4 key购买 nike

我编写了一个使用 glew 初始化 OpenGL 上下文的 DLL。首先,我创建了一个虚拟窗口来创建适当的上下文。其次,创建最终的上下文和窗口。glewInit() 函数调用成功,一些 bool 变量如 GLEW_ARB_texture_storage 设置为 1(我有一个与 opengl 3.3 兼容的视频适配器)。

注意

glewExperimental=GL_TRUE 

不过。

但是,当我使用上面的 DLL 编写客户端程序时,相同的 GLEW_ARB_texture_storage 变量等于 GL_FALSE

因此,我想知道最终应该在哪里调用 glewInit()?似乎从 DLL 中调用它是不够的。我是否也应该从客户端程序端调用它?

最佳答案

我实际上不会从您的虚拟上下文中初始化 GLEW。考虑手动加载手动创建最终上下文所需的一两个扩展(例如 WGL_ARB_create_contextWGL_ARB_pixel_format)。当您创建两个不同的上下文时,您不能保证在 Windows 上获得相同的 ICD 实现。这就是创建 GLEW MX 的原因。

现在,我怀疑您的情况实际上并不是您得到了两个不同的 ICD(这在现实世界中极为罕见),而是实际上您创建的第一个上下文是兼容性配置文件,第二个是兼容性配置文件是一个核心配置文件。

GLEW 使用扩展字符串初始化变量,例如 GLEW_ARB_texture_storage,但在核心配置文件中,GLEW 不够智能,无法以正确的方式解析该字符串(多次调用 glGetStringi (.. .)).这就是您必须使用 GLEW_EXPERIMENTAL 的原因。

GLEW_EXPERIMNETAL 告诉 GLEW 尝试加载它知道的每个扩展的每个函数指针,而无需首先解析任何扩展字符串来检查可用性。这在核心配置文件中是一个必要的邪恶,但在兼容性方面却不是(因为旧的扩展字符串机制在兼容性方面仍然有效)。 GLEW 的任何依赖于解析扩展字符串的部分都不会在核心配置文件中正常工作。

关于c++ - 客户端程序中的 glewInit() 和 GLEW_ARB_xxx_ 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27236906/

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