问题标签 [glad]

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 回答
546 浏览

c++ - 如何在 DLL 和 exe 中使用 Glad

有没有办法在 DLL 和 exe 中使用 Glad?我觉得可能存在问题,因为 DLL 有自己的与 exe 分开的内存空间,但我不确定我将如何重构我的代码来表示这一点。

我的情况是我有一个游戏引擎,其中包含许多使用由glad 加载的OpenGL 函数的方法,例如着色器、纹理和其他与渲染相关的内容。但是,我将引擎导出为 dll(出于各种其他原因),并且运行时编辑器链接到该 dll。这个运行时编辑器也需要访问glad函数,因为它静态链接到imgui,它需要相同的窗口上下文和所有内容,我假设如果我在dll和exe中调用gladLoadGL()我会得到不同的功能指针,这意味着它们不会对相同的数据进行操作。有没有办法做到这一点?我也尝试将 GLFW 链接为 DLL,但这无济于事(这是有道理的,因为这是一个令人高兴的问题)。如果我不 在我的 exe 中执行gladLoadGL() 尝试执行 gl 函数时出现 nullptr 异常(因为只有少数情况下我在运行时编辑器中使用 glFunctions)。但是,如果我确实在我的 exe 中运行了gladLoadGL(),它会加载新的函数指针,这会抛出所有问题,并且我会在 ImGui 中遇到错误,我假设这是因为glad 在 DLL 和 exe 中加载了不同的函数指针。

这可以做到吗,还是我需要重新考虑我的整体架构?

编辑:所以我最初的问题得到了回答,你不必做任何特别的事情(除了在 DLL 和 exe 中加载高兴的函数)。然而,这在我的代码中引发了一个新问题,这似乎是实际问题所在。现在我在 DLL 中有一个类,看起来像这样:

编辑 2:原来我只是错过了一个构建步骤,并且从未将我的 dll 复制到 exe 所在的位置。再次感谢所有的帮助

0 投票
2 回答
311 浏览

c++ - #include 找不到文件,而 Visual Studio 自动完成建议可以找到文件

我正在尝试包含 Glad(使用 GL3.3 api 从此处生成(GLFW 也有类似的包含问题))

我觉得这应该可以工作,因为我在项目中为文件添加了额外的包含目录

我的 VS 解决方案的文件结构为

通过将文件包含为

但是当我这样做时,我得到一个错误(“C1083”“无法打开包含文件:'KHR/khrplatform.h':没有这样的文件或目录”),因为glad.h中的包含在它时找不到khrplatform.h包括这样

我可以在glad.h 中更改该行,但我真的不想更改库的代码来使我的工作。

这也发生在 GLFW 上,它镜像了额外的包含目录和文件路径,但很高兴在适用的情况下替换为 GLFW。

此外,Visual Studio 将提供

当我在 projectName.h 中输入包含行时建议使用文件路径,但我仍然收到错误“C1083”“无法打开包含文件:'glad/glad.h':没有这样的文件或目录”。

另一个怪癖是我使用 spdlog 文件的附加包含目录

并且能够在 src 目录中包含标题,如下所示:

哪个有效,不会抛出问题。

这个文件结构是

这让人感觉只有一些额外的包含目录实际上在工作,我不确定为什么会发生这种情况,或者在花了几个小时进行猜测和检查后如何修复它。我想包括像

我怎样才能使这项工作?

谢谢你的时间,-迈克尔

0 投票
1 回答
359 浏览

c - 使用 gcc 构建 GLAD 时出错

我遇到了高兴的麻烦。我已经使用此配置下载了源文件:

  • 语言 - C/C++
  • 规范 - OpenGL
  • API - gl 版本 4.6
  • 简介 - 核心
  • 生成加载器被选中

解压档案后,我得到了这个结构(现在尽可能简单):

main.c的是这样的:

最后,我尝试用 编译它gcc,因为我的项目将在c

但我得到了这些错误:

这段代码对我来说真的很奇怪,但它来自图书馆,所以我自己改变它看起来不太好......

0 投票
1 回答
203 浏览

c++ - 直接状态访问 (DSA) 失败,但 4.3 之前的 OpenGL 有效

我目前有一个 OpenGL 项目,我在其中使用 GLFW 来创建窗口和上下文,并使用 GLAD 来加载 OpenGL 函数。我使用的 GLAD 版本是 OpenGL 4.6,兼容性配置文件,具有所有扩展(包括 ARB_direct_state_access)。

我当前的显卡设置是

当我运行以下非 DSA 代码时,它工作正常。

但是,当我尝试将此代码转换为 DSA 格式并运行它时,程序会打开一个窗口,然后在没有有用的调试信息的情况下终止。

在这两种情况下,我在绘制之前绑定顶点数组对象,如下所示

为什么我的类似 DSA 的代码不起作用?

0 投票
0 回答
197 浏览

c - 在 glfwDestroyWindow 提交稀疏纹理的第一页崩溃

以下 OpenGL/GLFW/GLAD 代码(MCVE 版本)使进程崩溃,并在 nvoglv64.dll 中出现以下访问冲突异常:

glfwDestroyWindow(window)下面代码列表末尾的调用中,我不知道为什么。glTexPageCommitmentARB当不调用或使用commitof调用它时,此调用不会崩溃GL_FALSE/0

我现在已经阅读了三遍 ARB_sparse_texture的规范,检查了(x、y、z、宽度、高度、内部格式的页面大小的深度倍数)的每个参数的条件glTexPageCommitmentARB,我有点确定我已经遵循有关如何正确使用该功能的所有说明。我之前也用调试上下文和调试消息回调检查了任何 OpenGL 错误,没有输出。

更多信息:

下面代码中调用之前的 fprintfglTexPageCommitmentARB在程序结束时在崩溃之前打印以下输出:

我在这里遗漏了什么还是只是驱动程序或 GLFW 错误?

wglDeleteContext(...)编辑:更多信息:在主线程调用GL 上下文之后,崩溃发生在驱动程序线程 (nvoglv64.dll)中。当 Visual Studio 2019 调试器因异常停止时,我可以看到存在三个驱动程序线程(全部来自 nvoglv64.dll)(其中一个发出访问冲突异常),而主线程在wglDeleteContext(...).

EDIT2:对此进行更多实验,当纹理未被取消引用(参考计数为 0)并在销毁 GL 上下文之前由驱动程序处理时,总是发生崩溃。例如,在上面的代码中,当我 glDeleteTextures(1, &tex);之前调用时glDestroyWindow(window),不会发生崩溃(可重现)。在实际应用程序中,我从中提取了上述 MCVE,纹理也作为颜色附件附加在 FBO 中。当我没有删除FBO 而只是减少了纹理的引用计数时(通过调用glDeleteTextures(...),崩溃仍然会发生。只有当我也取消引用 FBOglDeleteFramebuffers(...)和纹理连同它时,才会不再发生崩溃。

0 投票
1 回答
89 浏览

c - 无法让旋转立方体在 OpenGL 中渲染

我正在尝试制作一个旋转的 3D 立方体,但无法渲染。没有错误,但它只是一个黑屏。此外,没有检查片段着色器是否正常工作,但我可以向你保证,我只是没有将它包含在此处。

这是我的代码的样子:

0 投票
0 回答
294 浏览

ubuntu - 带有 glfw3 和高兴的 OpenGL 的 Makefile

我正在尝试进行跨平台编译以在 Linux 上构建一个项目,该项目将在 Windows 上使用。

但是我遇到了这些链接错误:

我正在使用这些标志来链接库:

为了构建和编译库,我使用这些 premake 文件中的 makefile。

为高兴而预制:

glfw 的预制:

  • 平台:Ubuntu
  • C++ 编译器:x86_64-w64-mingw32-g++
  • C 编译器:x86_64-w64-mingw32-gcc
0 投票
0 回答
51 浏览

c++ - glVertexAttribDivisor 不存在

与 CMake 一起使用时的函数glVertexAttribDivisor- 它只是在编译期间引发以下错误,这意味着该函数未导入。

error: 'glVertexAttribDivisor' was not declared in this scope; did you mean 'glVertexAttrib4iv'

我目前正在使用 GLAD 加载 openGL,如下所示:

printf("OpenGL version %i.%i\n", GLVersion.major, GLVersion.minor);打印出来OpenGL version 4.2

0 投票
1 回答
118 浏览

c++ - 调用 glBindImageTexture() 终止程序

我的目标是通过 C++ 和 OpenGL 使用计算着色器。问题是,当我在创建和初始化纹理后调用 glBindImageTexture() 时,它只会终止程序。我试着到处检查可能是罪魁祸首,但我无法追溯。我使用 glfw 作为我的窗口和上下文管理器,并很高兴(Core 4.6)作为 OpenGL 的包装器。(在我看来)代码的相关部分如下:

这是我用来编译程序的命令(我在 Windows 上使用 MinGW,64 位):

一切正常,直到调用最后一个函数。我已经检查过我的系统确实有 OpenGL 4.6(至少这是检查员告诉我的),所以它也应该有 glBindImageTexture。如果您认为问题不是来自这部分,这是我之前的所有代码:https ://pastebin.com/AYFaWpfL

0 投票
0 回答
176 浏览

c++ - 在 Qt 中使用高兴:QOpenGL 和高兴是冲突的

QT版本:5.12.0

OpenGL版本:4.5核心

开发环境:VS 2017

轮廓:

我已经将glad.c 文件添加到我的项目中,并确保glad.h 包含在每个文件的首位。

但是当我编译我的项目时,所有其他使用OpenGL函数的类都是正常的,除了继承自QOpenGLWidget的类。

映射视图.h

映射视图.cpp

编译错误:C3861,找不到glDeleteTextures

当我在VS中点击glDeleteTextures的定义时,会跳转到QOpenGLFunctions,而不是glad.h。似乎 QT 中的 OpenGL 和高兴是冲突的。但我的项目不使用 QOpenGLFunctions。

当我尝试在 MappingView.h 中添加宏时,

在glad.h中可以成功找到MappingView中的所有OpenGL函数,但是却找不到基类QOpenGLWidget,这意味着MappingView类不能再继承QOpenGLWidget了。

如果有人可以帮助我解决问题,我将不胜感激,谢谢!