GLFW的hello world

最近在学opengl,使用的《OpenGL编程指南》第9版,其中第一个例子,就是基于glfw库创建的,所以先了解一下glfw这个库,对于后续OpenGL开发是有帮助的。

GLFW 简介

GLFW 是一个开源的,跨平台的库,可以用于桌面环境的OpenGL, OpenGL ES和Vulkan开发。它提供了简单的API,用来创建窗口,上下文和Surface,接收输入和事件。

GLFW是用c语言编写的,支持Windows, macOS, X11和Wayland。

以上翻译自glfw官网,想了解更多的,请移步到该网址。

GLFW开发环境搭建

搭建方式有两种,一种是通过ubuntu系统自带的apt安装,另一种就是通过GLFW官网上的源码,自己编译安装。我是通过apt安装的,我也没啥定制化的需求,怎么省事怎么来。
在这里插入图片描述
通过如下命令,安装glfw

sudo apt install libglfw3-dev

GLFW的Hello world

搭建好开发环境之后,就可以写代码了。
下面代码,展示如何使用GLFW编写一个Hello world程序。我把这个程序,放在了hello.c中。

#include <GLFW/glfw3.h>

int main(void)
{
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT);

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

然后使用如下命令编译

gcc hello.c  -lglfw -lGL -o hello 

然后运行./hello,就出来如下窗口,程序运行成功。
在这里插入图片描述

GLFW的Hello world的解析

上面代码,比较简单,主要就是分成3步:

  1. 创建窗口
  2. 显示窗口
  3. 销毁窗口
    这是常用的窗口程序的操作步骤。

创建窗口

创建窗口,是通过函数glfwCreateWindow进行的,不过在调用glfw的函数之前,我们需要先对glfw进行初始化,也就是调用 glfwInit。

   /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

显示窗口

由于显示的窗口,假如用户按下了窗口的“叉叉”,关闭了窗口,应用程序应该响应关闭事件。

那么程序中需要接收事件,并判断事件是否为关闭事件。接收事件,是通过glfwPollEvents来进行的。判断是否是关闭事件,是通过函数glfwWindowShouldClose进行的。如果是一个普通的窗口程序,那么只需要glfwPollEvents 和 glfwWindowShouldClose 函数就行了。

但是我们这里,窗口系统跟OpenGL结合了,还需要3个OpenGL相关的函数,
glfwMakeContextCurrent, glClear, glfwSwapBuffers。 这3个函数,分别是把当前窗口设置成OpenGL的绘制上下文,清除窗口,交换前后缓冲区。

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT);

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

销毁窗口

销毁窗口,同时销毁glfw分配的其他资源。

glfwTerminate();

至此,GLFW的hello world,解析完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux GLFW 是一个用于创建和管理OpenGL窗口以及处理用户输入的库。通过使用Linux GLFW,我们可以简化搭建OpenGL程序框架的任务,并且可以轻松地获得跨平台的功能。安装 Linux GLFW 只需要执行一条命令即可。 要在 Linux 上安装 GLFW,可以使用以下命令: cd glm sudo cp -r glm/ /usr/local/include 这将复制 glm 文件夹到 /usr/local/include 目录下。 在使用 Linux GLFW 创建 OpenGL 窗口和处理用户输入时,可以使用以下代码作为参考: ``` int main(int argc, char** argv){ glfwInit(); GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "StudyOpenGL", nullptr, nullptr); if (window == NULL) { std::cerr << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); if(glewInit() != GLEW_OK){ std::cerr << "Failed to initalize GLEW" << std::endl; return -1; } while (!glfwWindowShouldClose(window)) { glfwSwapBuffers(window); glfwPollEvents(); } glfwDestroyWindow(window); glfwTerminate(); return 0; } ``` 这段代码初始化 GLFW,创建一个窗口,并且处理用户输入。在这个循环中,使用 glfwSwapBuffers(window) 来交换前后缓冲,使图像显示出来,而 glfwPollEvents() 则用来处理窗口的事件。最后,通过 glfwDestroyWindow(window) 销毁窗口,并调用 glfwTerminate() 来终止 GLFW。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [linux 下搭建opengl](https://blog.csdn.net/yy98988988/article/details/128403985)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Linux下OpenGL环境搭建(glfw)](https://blog.csdn.net/qq_37996632/article/details/100518269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值