问题标签 [glfw]

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

multithreading - 为窗口创建第二个渲染上下文

我在linux下使用glfw打开了一个OpenGL窗口,我试图在两个线程中使用OpenGL。我从网上的阅读中了解到,我应该用同一个窗口打开第二个渲染上下文。只有一个线程将实际用于渲染,而另一个将用于通过 PBO 交换数据。

问题是如何获得所需的参数来调用glxCreateContext()我使用 glfw 打开的窗口?

编辑:我结束了使用共享列表创建 2 个渲染上下文。这可能是一个更好的主意。

0 投票
4 回答
33053 浏览

gcc - 使用 GCC 链接静态库的正确方法

为什么有些静态库(lib*.a)可以像链接共享库(lib*.so)一样链接(ld -l 开关),但有些不能?

我一直被教导说所有库,无论是否静态,都可以用 -l... 链接,但是到目前为止我已经遇到了一个库(GLFW),它除了会喷出“未定义的引用”链接错误之外什么也没做尝试以这种方式链接它。

根据对这个问题的回答,链接静态库的“正确”方法是将它们与我自己的目标文件一起直接包含,而不是使用 -l。而且,在 GLFW 库的情况下,这当然可以解决问题。但是我使用的所有其他静态库在与 -l 链接时都可以正常工作。

所以:

  • 是什么导致这个库在链接而不是直接包含时无法工作?如果我知道原因,也许我可以编辑并重新编译库来解决问题。
  • 您是否不应该像链接共享库一样链接静态库?(如果没有,为什么不呢?)
  • 当以这种方式直接包含库时,链接器是否仍然能够从输出可执行文件中消除未使用的库函数?
0 投票
3 回答
6726 浏览

cross-platform - GLFW 切换窗口全屏模式

我正在使用 GLFW,我想知道如何切换全屏窗口模式。不改变分辨率,而是将窗口设置在顶部并且没有装饰。如果 GLFW 无法做到这一点,那么您建议使用什么跨平台库来实现这一点?

0 投票
2 回答
590 浏览

c - 打开和关闭 GLFW 窗口后无法获取控制台输入

我正在使用 GLFW 开发一个应用程序,用户可以在控制台中输入一些信息,程序对信息进行一些处理,然后打开一个 opengl 窗口(使用 GLFW)来显示结果。然后用户可以关闭窗口,并返回到主菜单并输入更多信息(如果他们愿意)。

目前我遇到的问题是,一旦关闭 GLFW/OpenGL 窗口,控制台就不再接受来自 scanf() 的任何输入。我相当肯定我正在正确关闭 GLFW,所以我不确定问题是什么。

我正在使用的代码如下:

主要.c:

受电弓.h:

0 投票
2 回答
945 浏览

gcc - mingw64下编译GLFW的Win64版本

首先,我真的需要制作一个 64 位版本的 glfwdll.a 和 glfw.dll (所以我希望最终能够成功地让 Go glfw 绑定在 Windows 下工作......在 Linux 下轻而易举!)

似乎我现在使用 mingw64、MSYS 及其 make 脚本成功编译了 64 位版本的 glfwdll.a 和 glfw.dll,即使我确实收到了一些错误消息,如“找不到 maincrt 入口点,使用默认 0xsomehexnumber相反”或类似的。入口点当然是指可执行文件,在这种情况下是示例目录中的那些。

事实上,它们中的大多数都不起作用!然而,一切都建成了。以下可执行文件有效:

listmodes.exe mtbench.exe mthello.exe 和particle.exe - 后者是唯一为我工作的图形(3d gfx)示例(前者只是将一些测试信息输出到控制台窗口)。

现在其他的有什么问题?它们不会崩溃,它们不会向控制台报告任何内容……我运行它们,它们会立即返回,无声无息。

我的 GLFW 构建是否损坏?怎么修?4 个有效的示例和其他无效的示例之间的最大区别是什么?

这是一个相当新的、普通的 Win7 64 位安装。没有垃圾软件,一切都是最新的,UAC 和主题都关闭了,根本没有安装很多软件,更新了 Nvidia GPU 驱动程序(GPU Caps Viewer 等运行良好,所以 OpenGL 就在那里)。

0 投票
3 回答
4873 浏览

gcc - 通过 Windows cgo->gcc->ld 的 DLL 链接给出“未定义的引用到(函数)”错误

(非常详细的问题报告——tl;dr 在底部!)

我真的更喜欢 GLFW 而不是 Glut,并且希望它的Golang 绑定在 Windows 64 位和 Go 1.0.1 64 位下工作。在 Linux 下,它的绑定工作完美无缺。这在 Windows 下原则上是可行的——GitHub 用户 chsc已经设法做到,但他在 Win32 上,他的提示还没有解决我的问题。但是我确实有一个基于 tdm64-gcc-4.6.1 的完整而干净的 Mingw64 设置。

现在奇怪的是——让 freeglut 绑定在 64 位 Windows 下工作,64 位 Go 1.0.1工作——glfw 绑定对我来说失败了。我想弄清楚为什么,因为它们本质上都使用相同的 cgo 特性和技术

注意我目前有一个自制的半生不熟但基本上可以工作的替换包,它使用 LoadLibrary/GetProcAddress 调用在 Go 中公开 glfw.dll。这可行,但我认为硬链接的编译 CGO 绑定比无数的 Syscall()、Syscall6()、Syscall9()、Syscall12() 等 Go func 调用更可取。如果 Win32 和 Linux gophers 可以拥有这个,为什么我们 Win64 的人不能呢?

所以这是我到目前为止的设置:

  1. 我有一个带有三个补丁的 Golang 构建,以使 lib 链接与 cgo应用一起工作
  2. 我已经使用 MinGW64 成功地将最新的 freeglut 和 GLFW 库编译为 64 位 DLL。
  3. 头文件glut.h、freeglut*.h和glfw.h放在\MinGW64\x86_64-w64-mingw32\include\GL(gl.h、glaux.h、glu.h旁边)
  4. Lib 文件 libfreeglut.a 和 libglfwdll.a 放在 \MinGW64\x86_64-w64-mingw32\lib (在 libglu32.a、libopengl32.a 旁边)
  5. 64 位 DLL glfw.dll 和 freeglut64.dll 被放置在 \windows 和 \windows\system32 中(在 opengl32.dll、glu32.dll 旁边)
  6. 我相信freeglut64.dll 和 glfw.dll都可以工作——至少他们的大多数示例程序在安装 DLL 后都可以工作。

一切都应该到位,对吧?现在首先要成功绑定(我不需要),freeglut - 当我去 get -x github.com/zombiezen/Go-GLUT/glut时,一切都构建得很好,我可以成功创建一个过剩窗口和在从 .go 源文件编译的 Windows test.exe 中显示一个三角形。感谢 -x,go get 显示了它的构建功能:

为了达到这一点,我不得不稍微修改一下 glut.go 如下:

因此,总而言之,这构建得很好,可以从 Go 导入和链接并在代码中使用。

现在为 GLFW。GO 文件的内容与 glut.go 极为相似:

#define GLFW_DLL不会发生静态链接。这是go get -x github.com/jteeuwen/glfw的输出:

是的,这是一个拗口——但基本上总是同样的错误,而且在构建过程中相当晚。请注意,如果未定义#define GLFW_DLL,我将得到基本相同的输出,除了没有 __imp_ 前缀——静态链接既不鼓励 Go,也不适合这个特定用例。

现在,当 gcc 抱怨“未定义的引用”时,从我的谷歌搜索来看,可能有各种原因......

  • 找不到 DLL 不可能是失败的——它们在适当的位置,对于 freeglut64.dll 它可以工作
  • 不可能找不到 .a 库——它们位于适当的位置,并且 libfreeglut.a 有效,如果我将 -lglfwdll 更改为 -lblafoobar 则 gcc 会更早失败并正确地抱怨“找不到 blafoobar”——所以它确实找到了 libglfwdll.a。
  • lib依赖的顺序?我尝试将 -lglfwdll 作为第一个库(在 -lglu32 -lopengl32 之前)和作为最后一个库(在这两个库之后),没有区别。
  • Golang glfw 绑定有问题吗?不这么认为,适用于其他人,包括在 Windows 下用于 chsc(虽然是 32 位)

TL;DR——在 Windows 64 位、Go 1.0.1 64 位完全修补下,CGO 成功生成内容以供freeglut 和 glfw输入GCC。然后 GCC 很高兴地吃掉这些东西来构建 freeglut 绑定,拒绝它来构建 glfw 绑定,所有 C.funcs() 都有“未定义的引用”。libfreeglut 和 libglfwdll 都正确构建并安装为 64 位 DLL 和正确定位的 .h/.a 库。可能是什么原因?

0 投票
3 回答
1911 浏览

gcc - 使用 MinGW64 gcc 构建 GLFW -- 入口符号警告和链接器错误

这是一个相当新鲜的香草 Win7 64 位安装和最新的 MinGW64,在一个干净的(新提取的)GLFW 2.7.5 源目录中调用他们的make win32-msys命令。

[A] 构建库

#1 -- gcc -c -I 处的警告。-I.. -Wall -mwin32 -O2 -o win32_init.o win32_init.c:

#2 -- gcc -c -I 处的警告。-I.. -Wall -mwin32 -O2 -mdll -DGLFW_BUILD_DLL -D_GLFW_NO_DLOAD_GDI32 -D_GLFW_NO_DLOAD_WINMM -o win32_init_dll.o win32_init.c:

但相关的输出文件确实在 .\lib\win32 中创建:glfw.dll、libglfwdll.a 和 libglfw.a。但是我担心这些可能已损坏,因为我以后不可能通过 gcc 链接到它们——与本文中最后一个问题相同的问题进一步描述。

[B] 构建示例

#3 -- 在 triangle.exe、pong3d.exe、splitview.exe、mipmaps.exe、gears.exe、boing.exe、wave.exe、heightmap.exe 处发出警告:

但是对于构建良好的 listmodes.exe、mthello.exe、mtbench.exe 和particles.exe 而言并非如此。事实上,这 4 个是唯一在此之后正常运行的,其他的只是立即退出而没有输出或错误(自然,因为它们没有有效的入口点)。

[C] 构建测试

  1. 在 accuracy.exe、dynamic.exe 处发出警告:

    /li>

defaults.exe 没有这样的问题。对于 dynamic.exe,它会继续出现以下错误:

现在后一个是加载DLL的测试程序。您可能认为这只是在正确的位置缺少必要的库(.a 和 .dll),但请注意此时我确实拥有所有必要的包含和库(来自早期的 GLFW 制作与以上,相同的版本,相同的警告,相同的输出文件)在正确的地方:

  • \MinGW64\x86_64-w64-mingw32\lib 中的 libglfwdll.a(在 libglu32.a、libopengl32.a 旁边)
  • \MinGW64\x86_64-w64-mingw32\include\GL 中的 glfw.h(gl.h、glaux.h、glu.h 旁边)
  • \windows 和 \windows\system32 中的 glfw.dll(在 opengl32.dll、glu32.dll 旁边)
0 投票
1 回答
1424 浏览

opengl - glfwLoadTexture2D 不加载纹理,而是显示黄色填充四边形

我正在尝试使用 glfwLoadTexture2D 加载纹理以将一些 tga 文件加载到我的程序中,但它们不是出现在四边形上的纹理而是黄色填充

我通过

内部渲染和

这就是我加载纹理的方式

感谢有关 glGetError 的提示,它确实有助于缩小原因。但是,如果您发现我尝试抓取图像的方式有什么问题,您能告诉我吗?Textures 文件夹在我的项目目录中,我确保所有内容都拼写正确。

0 投票
1 回答
894 浏览

haskell - GLFW 窗口关闭

我正在使用 X11 和 xfce4 在 x86_64 Arch Linux 上运行,并尝试使用 OpenGL 和 GLFW-b 库编译一个简单的 OpenGL/GLFW 应用程序。不过,我无法关闭窗口 - 我只能用 Ctrl-C 杀死它。

代码在http://pastebin.com/i7Zshfk1

谢谢!

0 投票
2 回答
1058 浏览

c++ - 窗口标题 GLFW 中的 FPS 计数器

我试图让我的每秒帧数读数出现在我的窗口标题中。我以前做过一次,但我将如何设置代码来做到这一点?我需要从 float 切换到 const char *。