问题标签 [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.
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 所在的位置。再次感谢所有的帮助
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 目录中包含标题,如下所示:
哪个有效,不会抛出问题。
这个文件结构是
这让人感觉只有一些额外的包含目录实际上在工作,我不确定为什么会发生这种情况,或者在花了几个小时进行猜测和检查后如何修复它。我想包括像
我怎样才能使这项工作?
谢谢你的时间,-迈克尔
c - 使用 gcc 构建 GLAD 时出错
我遇到了高兴的麻烦。我已经使用此配置下载了源文件:
- 语言 - C/C++
- 规范 - OpenGL
- API - gl 版本 4.6
- 简介 - 核心
- 生成加载器被选中
解压档案后,我得到了这个结构(现在尽可能简单):
我main.c
的是这样的:
最后,我尝试用 编译它gcc
,因为我的项目将在c
:
但我得到了这些错误:
这段代码对我来说真的很奇怪,但它来自图书馆,所以我自己改变它看起来不太好......
c++ - 直接状态访问 (DSA) 失败,但 4.3 之前的 OpenGL 有效
我目前有一个 OpenGL 项目,我在其中使用 GLFW 来创建窗口和上下文,并使用 GLAD 来加载 OpenGL 函数。我使用的 GLAD 版本是 OpenGL 4.6,兼容性配置文件,具有所有扩展(包括 ARB_direct_state_access)。
我当前的显卡设置是
当我运行以下非 DSA 代码时,它工作正常。
但是,当我尝试将此代码转换为 DSA 格式并运行它时,程序会打开一个窗口,然后在没有有用的调试信息的情况下终止。
在这两种情况下,我在绘制之前绑定顶点数组对象,如下所示
为什么我的类似 DSA 的代码不起作用?
c - 在 glfwDestroyWindow 提交稀疏纹理的第一页崩溃
以下 OpenGL/GLFW/GLAD 代码(MCVE 版本)使进程崩溃,并在 nvoglv64.dll 中出现以下访问冲突异常:
在glfwDestroyWindow(window)
下面代码列表末尾的调用中,我不知道为什么。glTexPageCommitmentARB
当不调用或使用commit
of调用它时,此调用不会崩溃GL_FALSE/0
。
我现在已经阅读了三遍 ARB_sparse_texture的规范,检查了(x、y、z、宽度、高度、内部格式的页面大小的深度倍数)的每个参数的条件glTexPageCommitmentARB
,我有点确定我已经遵循有关如何正确使用该功能的所有说明。我之前也用调试上下文和调试消息回调检查了任何 OpenGL 错误,没有输出。
更多信息:
- 操作系统:Windows 10 x64 (20H2)
- 驱动程序:Nvidia 461.09 (DCH)
- GLAD 配置:OpenGL 4.3 核心 + ARB_sparse_texture + ARB_sparse_texture2
- GLFW:来自 Git 提交0b9e48fa3df9c18的全新本地 MSVC x64 发布版本
下面代码中调用之前的 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(...)
和纹理连同它时,才会不再发生崩溃。
c - 无法让旋转立方体在 OpenGL 中渲染
我正在尝试制作一个旋转的 3D 立方体,但无法渲染。没有错误,但它只是一个黑屏。此外,没有检查片段着色器是否正常工作,但我可以向你保证,我只是没有将它包含在此处。
这是我的代码的样子:
ubuntu - 带有 glfw3 和高兴的 OpenGL 的 Makefile
我正在尝试进行跨平台编译以在 Linux 上构建一个项目,该项目将在 Windows 上使用。
但是我遇到了这些链接错误:
我正在使用这些标志来链接库:
为了构建和编译库,我使用这些 premake 文件中的 makefile。
为高兴而预制:
glfw 的预制:
- 平台:Ubuntu
- C++ 编译器:x86_64-w64-mingw32-g++
- C 编译器:x86_64-w64-mingw32-gcc
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
c++ - 调用 glBindImageTexture() 终止程序
我的目标是通过 C++ 和 OpenGL 使用计算着色器。问题是,当我在创建和初始化纹理后调用 glBindImageTexture() 时,它只会终止程序。我试着到处检查可能是罪魁祸首,但我无法追溯。我使用 glfw 作为我的窗口和上下文管理器,并很高兴(Core 4.6)作为 OpenGL 的包装器。(在我看来)代码的相关部分如下:
这是我用来编译程序的命令(我在 Windows 上使用 MinGW,64 位):
一切正常,直到调用最后一个函数。我已经检查过我的系统确实有 OpenGL 4.6(至少这是检查员告诉我的),所以它也应该有 glBindImageTexture。如果您认为问题不是来自这部分,这是我之前的所有代码:https ://pastebin.com/AYFaWpfL
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了。
如果有人可以帮助我解决问题,我将不胜感激,谢谢!