glfw code not 运行 编译无错后跳过
glfw code not running and skipping after compiling without errors
我正在尝试学习 C 中的 glfw
库。我已经从他们的官方网站安装了 glfw
预编译二进制文件。我已将 32 位库从预编译的二进制 zip 文件移动到我的 mingw-gcc
的 lib 文件夹,并将包含文件从 zip 文件移动到 mingw-gcc
的 include
文件夹.我正在尝试使用库和 c 制作 a window。我使用 vscode 作为我的编辑器。这是我的代码:
#include <stdio.h>
#include <windows.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main() {
printf("Hello World!\n"); //test line
GLFWwindow * window;
if (!glfwInit) {
printf("glfw3 initialization failed");
return -1;
} else {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window) {
printf("Could not create window.");
glfwTerminate();
return -1;
} else {
glfwMakeContextCurrent(window);
while (!glfwWindowShouldClose(window)) {
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
}
}
我正在使用以下命令编译我的代码:
gcc main.c -lglfw3dll -lopengl32
程序编译没有任何错误,但是当我运行编译.exe
时,没有任何反应。我什至尝试在代码 运行s 之前打印 hello world,但即使那样也不会打印。发生了什么事,我该如何解决?
编辑:我通过将 glfw 库添加到我的系统路径解决了这个问题。现在一切正常
你正在做:
if (!glfwInit)
这只是检查 glfwInit
的 地址 是否为 non-zero。
它不是call/invoke它。
要调用它,您需要:
if (! glfwInit())
更新:
the code still is doing nothing. it is still not printing the test hello world –
The Parallax
您 glfwCreateWindow
调用中的 "Hello World"
只是 设置了 window 标题。
第一个问题是:window 是否出现在屏幕上?也就是说,代码什么都不做...?
到底是什么意思?
我在你的代码中没有看到任何绘图调用。
您的代码与来自 https://www.glfw.org/documentation.html#example-code 的示例代码相似,有一些小的例外,但不完全相同。
在link中有:
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
在循环的顶部。
AFAICT,这会将缓冲区清除为背景色。
您可以 need/want 添加一些绘图调用以放置一个矩形(例如)在 glClear
调用之后。
否则,你可能会得到window,但里面什么也没有。
这是一步一步的教程:https://www.glfw.org/docs/3.3/quick.html
它有更多 complete/extensive 示例代码。我将使用两个 link 中的代码作为模型。
我通过将 glfw 库添加到我的系统路径解决了这个问题。现在一切正常
我正在尝试学习 C 中的 glfw
库。我已经从他们的官方网站安装了 glfw
预编译二进制文件。我已将 32 位库从预编译的二进制 zip 文件移动到我的 mingw-gcc
的 lib 文件夹,并将包含文件从 zip 文件移动到 mingw-gcc
的 include
文件夹.我正在尝试使用库和 c 制作 a window。我使用 vscode 作为我的编辑器。这是我的代码:
#include <stdio.h>
#include <windows.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main() {
printf("Hello World!\n"); //test line
GLFWwindow * window;
if (!glfwInit) {
printf("glfw3 initialization failed");
return -1;
} else {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window) {
printf("Could not create window.");
glfwTerminate();
return -1;
} else {
glfwMakeContextCurrent(window);
while (!glfwWindowShouldClose(window)) {
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
}
}
我正在使用以下命令编译我的代码:
gcc main.c -lglfw3dll -lopengl32
程序编译没有任何错误,但是当我运行编译.exe
时,没有任何反应。我什至尝试在代码 运行s 之前打印 hello world,但即使那样也不会打印。发生了什么事,我该如何解决?
编辑:我通过将 glfw 库添加到我的系统路径解决了这个问题。现在一切正常
你正在做:
if (!glfwInit)
这只是检查 glfwInit
的 地址 是否为 non-zero。
它不是call/invoke它。
要调用它,您需要:
if (! glfwInit())
更新:
the code still is doing nothing. it is still not printing the test hello world – The Parallax
您 glfwCreateWindow
调用中的 "Hello World"
只是 设置了 window 标题。
第一个问题是:window 是否出现在屏幕上?也就是说,代码什么都不做...?
到底是什么意思?我在你的代码中没有看到任何绘图调用。
您的代码与来自 https://www.glfw.org/documentation.html#example-code 的示例代码相似,有一些小的例外,但不完全相同。
在link中有:
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
在循环的顶部。
AFAICT,这会将缓冲区清除为背景色。
您可以 need/want 添加一些绘图调用以放置一个矩形(例如)在 glClear
调用之后。
否则,你可能会得到window,但里面什么也没有。
这是一步一步的教程:https://www.glfw.org/docs/3.3/quick.html
它有更多 complete/extensive 示例代码。我将使用两个 link 中的代码作为模型。
我通过将 glfw 库添加到我的系统路径解决了这个问题。现在一切正常