利用GLFW创建一个窗口

  • 创建窗口前的准备工作
    • GLFW初始化
      • 设置界面属性
        • 界面相关属性
        • 缓冲区相关属性
        • 上下文相关属性
        • 各个属性的默认值和取值范围
  • 创建窗口
  • 显示窗口
  • 完整代码
  • 窗口事件交互
  • 完整代码

创建窗口前的准备工作

创建GLFW窗口前需要先初始化GLFW并且设置窗口选项

GLFW初始化

int glfwInit(void);

成功返回 GLFW_TRUE 否则返回 GLFW_FALSE,
glfw没有布尔型数据采用1为true 0为false

设置界面属性

界面相关属性

 GLFW_RESIZABLE----------------用户能否调节窗口大小GLFW_VISIBLE------------------窗口是否可见GLFW_DECORATED----------------窗口边框的小部件是否可见GLFW_FOCUSED------------------窗口是否具有输入焦点GLFW_AUTO_ICONIFY-------------全屏窗口是否在焦点丢失,关闭窗口小部件等图标化GLFW_FLOATING-----------------置顶GLFW_MAXIMIZED----------------窗口最大化GLFW_CENTER_CURSOR------------光标是否在新创建的全屏窗口上居中GLFW_TRANSPARENT_FRAMEBUFFER--窗口透明GLFW_FOCUS_ON_SHOW------------获得输入焦点时glfwShowWindow是否被调用GLFW_SCALE_TO_MONITOR---------根据监视器内容比例调整窗口内容区域的大小GLFW_REFRESH_RATE-------------全屏时指定刷新率

缓冲区相关属性

 GLFW_RED_BITS-----------------颜色缓冲区中红色深度GLFW_GREEN_BITS---------------颜色缓冲区绿色深度GLFW_BLUE_BITS----------------颜色缓冲区蓝色深度GLFW_ALPHA_BITS---------------颜色缓冲区混合深度GLFW_DEPTH_BITS---------------深度缓冲区深度GLFW_STENCIL_BITS-------------模板缓冲区深度GLFW_ACCUM_RED_BITS-----------累积缓冲区中红色深度GLFW_ACCUM_GREEN_BITS---------累积缓冲区中绿色深度GLFW_STEREO  ------------------OpenGL立体渲染GLFW_DOUBLEBUFFER-------------双缓冲区GLFW_ACCUM_BLUE_BITS----------累计缓冲区中蓝色深度GLFW_ACCUM_ALPHA_BITS---------累计缓冲区中混合深度GLFW_AUX_BUFFERS--------------辅助缓冲区GLFW_SAMPLES------------------多重采样的样本数GLFW_SRGB_CAPABLE-------------缓冲区是否支持sRGB

上下文相关属性

 GLFW_CONTEXT_VERSION_MAJOR---设置主版本号GLFW_CONTEXT_VERSION_MINOR---设置次版本号GLFW_CLIENT_API--------------设置OpenGL版本GLFW_CONTEXT_CREATION_API----创建上下文的APIGLFW_OPENGL_FORWARD_COMPAT---是否向之前版本兼容GLFW_OPENGL_DEBUG_CONTEXT----是否创建调试上下文GLFW_OPENGL_PROFILE----------指定OpenGL上下文的配置文件GLFW_CONTEXT_ROBUSTNESS------指定上下文的健壮性策略GLFW_CONTEXT_RELEASE_BEHAVIOR-指定上下文要使用的发布行为GLFW_CONTEXT_NO_ERROR--------是否应由上下文生成错误

各个属性的默认值和取值范围

属性 默认值 取值范围
GLFW_RESIZABLE GLFW_TRUE GLFW_TRUE or GLFW_FALSE
GLFW_VISIBLE GLFW_TRUE GLFW_TRUE or GLFW_FALSE
GLFW_DECORATED GLFW_TRUE GLFW_TRUE or GLFW_FALSE
GLFW_FOCUSED GLFW_TRUE GLFW_TRUE or GLFW_FALSE
GLFW_AUTO_ICONIFY GLFW_TRUE GLFW_TRUE or GLFW_FALSE
GLFW_FLOATING GLFW_FALSE GLFW_TRUE or GLFW_FALSE
GLFW_MAXIMIZED GLFW_FALSE GLFW_TRUE or GLFW_FALSE
GLFW_RED_BITS 8 0 to INT_MAX or GLFW_DONT_CARE
GLFW_GREEN_BITS 8 0 to INT_MAX or GLFW_DONT_CARE
GLFW_BLUE_BITS 8 0 to INT_MAX or GLFW_DONT_CARE
GLFW_ALPHA_BITS 8 0 to INT_MAX or GLFW_DONT_CARE
GLFW_DEPTH_BITS 24 0 to INT_MAX or GLFW_DONT_CARE
GLFW_STENCIL_BITS 8 0 to INT_MAX or GLFW_DONT_CARE
GLFW_ACCUM_RED_BITS 0 0 to INT_MAX or GLFW_DONT_CARE
GLFW_ACCUM_GREEN_BITS 0 0 to INT_MAX or GLFW_DONT_CARE
GLFW_ACCUM_BLUE_BITS 0 0 to INT_MAX or GLFW_DONT_CARE
GLFW_ACCUM_ALPHA_BITS 0 0 to INT_MAX or GLFW_DONT_CARE
GLFW_AUX_BUFFERS 0 0 to INT_MAX or GLFW_DONT_CARE
GLFW_SAMPLES 0 0 to INT_MAX or GLFW_DONT_CARE
GLFW_REFRESH_RATE GLFW_DONT_CARE 0 to INT_MAX or GLFW_DONT_CARE
GLFW_STEREO GLFW_FALSE GLFW_TRUE or GLFW_FALSE
GLFW_SRGB_CAPABLE GLFW_FALSE GLFW_TRUE or GLFW_FALSE
GLFW_DOUBLEBUFFER GLFW_TRUE GLFW_TRUE or GLFW_FALSE
GLFW_CLIENT_API GLFW_OPENGL_API GLFW_OPENGL_API, GLFW_OPENGL_ES_API or GLFW_NO_API
GLFW_CONTEXT_CREATION_API GLFW_NATIVE_CONTEXT_API GLFW_NATIVE_CONTEXT_API or GLFW_EGL_CONTEXT_API
GLFW_CONTEXT_VERSION_MAJOR 1 Any valid major version number of the chosen client API
GLFW_CONTEXT_VERSION_MINOR 0 Any valid minor version number of the chosen client API
GLFW_CONTEXT_ROBUSTNESS GLFW_NO_ROBUSTNESS GLFW_NO_ROBUSTNESS, GLFW_NO_RESET_NOTIFICATION orGLFW_LOSE_CONTEXT_ON_RESET
GLFW_CONTEXT_RELEASE_BEHAVIOR GLFW_ANY_RELEASE_BEHAVIOR GLFW_ANY_RELEASE_BEHAVIOR,GLFW_RELEASE_BEHAVIOR_FLUSH orGLFW_RELEASE_BEHAVIOR_NONE
GLFW_OPENGL_FORWARD_COMPAT GLFW_FALSE GLFW_TRUE or GLFW_FALSE
GLFW_OPENGL_DEBUG_CONTEXT GLFW_FALSE GLFW_TRUE or GLFW_FALSE
GLFW_OPENGL_PROFILE GLFW_OPENGL_ANY_PROFILE GLFW_OPENGL_ANY_PROFILE, GLFW_OPENGL_COMPAT_PROFILEor GLFW_OPENGL_CORE_PROFILE

创建窗口

GLFW下使用glfwCreateWindow函数创建窗口

GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);
功能:此功能创建一个窗口及其关联的打开GL或打开GL ES上下文.
参数:width:   宽度height: 高度title:  标题monitor: 全屏模式或者窗口模式的监视器(给NULL )share:  共享资源或者不共享资源的窗口(给NULL)
返回值:成功返回窗口的句柄否则返回NULL可能的错误包括:GLFW_NOT_INITIALIZED -------------------没有初始化GLFW_INVALID_ENUM-----------------------无效的枚举GLFW_INVALID_VALUE----------------------无效的数值GLFW_API_UNAVAILABLE--------------------api不可用GLFW_VERSION_UNAVAILABLE-----------------版本不可用GLFW_FORMAT_UNAVAILABLE------------------格式错误GLFW_PLATFORM_ERROR----------------------平台错误

显示窗口

显示用glfwCreateWindow创建出来的窗口

void glfwMakeContextCurrent(GLFWwindow* window);参数:glfwCreateWindow创建的句柄

到此GLFW创建的窗口已经可以显示了,在程序结束之前还需要调用glfwTerminate函数释放掉GLFW的资源

完整代码

int main() {//glfw初始化glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);GLFWwindow* window = glfwCreateWindow(800, 600, "test", NULL, NULL);if(window == NULL) {std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);glfwTerminate();return 0;
}

代码编译运行后会发现,窗口闪了一下就退出了,需要创建一个循环用于实现窗口的交互并且让窗口不释放

窗口事件交互

在调用窗口释放之前创建一个while循环循环条件是glfwWindowShouldClose函数的返回值

glfwWindowShouldClose(GLFWwindow*)
功  能:检查窗口是是否关闭
返回值:没有关闭返回GLFW_TRUE否则返回GLFW_FALSE

while循环中的内容

while(glfwWindowShouldClose(window )){//输入事件//窗口背景//绘制图案
}

完整代码

int main() {//glfw初始化glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);GLFWwindow* window = glfwCreateWindow(800, 600, "test", NULL, NULL);if(window == NULL) {std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);while(glfwWindowShouldClose(window )){//输入事件//窗口背景//绘制图案}glfwTerminate();return 0;
}

利用GLFW创建一个窗口相关推荐

  1. Windows编程---使用C/C++语言创建一个窗口

    序言 记得刚学习C语言的时候,我还只能写出在"小黑框"里面运行的控制台程序.后来我了解到这种控制台程序属于命令行界面(CLI,Command-Line Interface),而我们 ...

  2. Vulkan学习--5.创建一个窗口表面和交换链

    • 创建一个窗口,窗口表面和交换链 1.检测交换链是否支持 2.启用交换链扩展 3.选择适当的表面格式 4.查找最佳的可用呈现模式 5.设置交换范围 6.创建窗口表面 7.创建交换链 8.查询交换链支 ...

  3. Linux Namespace系列(09):利用Namespace创建一个简单可用的容器

    本文将演示如何利用namespace创建一个完整的容器,并在里面运行busybox.如果对namespace不是很熟悉,请先参考前面几遍介绍不同类型namespace的文章. busybox是一个Li ...

  4. 用SDL创建一个窗口

     原文来自:http://www.aaroncox.net/tutorials/2dtutorials/sdlwindow.html 注意:这里我们想当然你已经知道怎么在你的IDE集成开发环境里配 ...

  5. 【java】创建一个窗口,统计输入内容

    创建一个窗口,统计输入内容 package p1; import javax.swing.JOptionPane;public class Java_1 {public static void mai ...

  6. Windows API 编程起始——创建一个窗口

    最初了解Windows api编程呢,就是先创建出一个最简洁的窗口,就如我们学习C/C++时的"Helloword"一样,这是进入windows编程大门的重要一个步,下面就开始吧. ...

  7. 利用thinkphp创建一个简单的站点

    本文我们将利用thinkphp创建一个简单的站点,这里所使用的thinkphp版本是5.0.24,这里是它的中文文档.如果有需要可以参考它的中文文档. thinkphp框架是一个典型的MVC框架,该框 ...

  8. DirectX 创建一个窗口

    #include <d3d9.h>#pragma comment(lib, "d3d9.lib")PDIRECT3D9 g_D3D = nullptr; // D3D对 ...

  9. 利用记事本创建一个ASP.NET Core RC2 MVC应用

    步骤一.安装最新的.NET Core SDK 我们可以根据自身的操作系统环境从https://github.com/dotnet/cli上下载.NET Core最新的SDK,这个SDK包含.NET C ...

最新文章

  1. java SE环境变量配置
  2. python数据导入一个列表_Python基础数据类型list 列表
  3. python项目部署nginx_详解使用Nginx和uWSGI配置Python的web项目的方法
  4. C语言怎么输出百分号%
  5. 企业实战(Jenkins+GitLab+SonarQube)_07_Jenkins 安全设置
  6. coreboot学习0:二度相逢是初识
  7. 关于axios+spring boot无法进行重定向的问题
  8. 到底是微信窃取隐私,还是输入法光明正大收集用户信息?
  9. JAVA基础知识|进程与线程
  10. 部署 kubectl 命令行工具
  11. 【转】Nginx双机热备高可用解决方案【二】
  12. 系统集成项目管理工程师2022年上半年广东卷下午案例分析题及答案
  13. 编程小白的第一本Python入门书学习笔记
  14. 分析下这个LC振荡电路图
  15. 初一年级上学期计算机课知识总结,七年级信息技术课程上册.doc
  16. 登陆成功率99% 云知声携手平安好医生推声纹登录系统
  17. 《安富莱嵌入式周报》第251期:2022.01.31--2022.02.06
  18. 寒江独钓第3章——串口过滤
  19. git submodule添加和删除
  20. 嵌入式计算机的应用都有哪些,嵌入式系统的应用领域有哪些?

热门文章

  1. RadioButton修改标志图片
  2. 创维百度联手进军智慧家居,或将补位乐视电视市场
  3. web前端——jQuery
  4. if(x=1)和if(x==1)这两条语句的差别
  5. 美容院如何通过创新促销活动获得巨大收益,给顾客眼前一亮的感觉!
  6. 妈妈经验:小儿咳嗽怎么办?夜咳?寒咳?热咳?
  7. spring mnv (一)
  8. Missing return statement
  9. Linux_起源和虚拟机
  10. Tone Mapping算法系列一:基于Fast Bilateral Filtering 算法的 High-Dynamic Range(HDR) 图像显示技术