码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • OpenGL之窗口的创建


    1. #include
    2. #include
    3. using namespace std;
    4. // 我们可以对窗口注册一个回调函数(Callback Function),它会在每次窗口大小被调整的时候被调用。这个回调函数的原型如下
    5. void framebuffer_size_callback(GLFWwindow * window,int width,int height){
    6. glViewport(0,0,width,height);
    7. }
    8. // glfwGetKey函数,它需要一个窗口以及一个按键作为输入。这个函数将会返回这个按键是否正在被按下
    9. void processInput(GLFWwindow *window)
    10. {
    11. if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
    12. glfwSetWindowShouldClose(window, true);
    13. }
    14. int main(int argc, char const *argv[])
    15. {
    16. // 初始化的glfw;
    17. glfwInit();
    18. // 设置窗口的相关属性
    19. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
    20. glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
    21. glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
    22. // 创建对应的窗口
    23. GLFWwindow * window = glfwCreateWindow(800,600,"learningGL",NULL,NULL);
    24. if(!window){
    25. cout << "failed to create a window" << endl;
    26. // 销毁所有现在的窗口和光标
    27. glfwTerminate();
    28. return -1;
    29. }
    30. // 指定窗口的上下文(context)设为调用线程的当前上下文
    31. glfwMakeContextCurrent(window);
    32. // 告诉OpenGL渲染窗口的尺寸的大小
    33. // glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。
    34. glViewport(0,0,800,600);
    35. // 我们还需要注册这个函数,告诉GLFW我们希望每当窗口调整大小的时候调用这个函数:
    36. glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);
    37. // glfwWindowShouldClose函数在我们每次循环的开始前检查一次GLFW是否被要求退出
    38. // glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)
    39. // glfwSwapBuffers函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上
    40. while (!glfwWindowShouldClose(window))
    41. {
    42. processInput(window);
    43. // glClearColor来设置清空屏幕所用的颜色
    44. glClearColor(1.0f, 0.5f, 0.3f, 1.0f);
    45. // glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲
    46. // 可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT
    47. glClear(GL_COLOR_BUFFER_BIT);
    48. glfwSwapBuffers(window);
    49. glfwPollEvents();
    50. }
    51. glfwTerminate();
    52. return 0;
    53. }

  • 相关阅读:
    java制作游戏,如何使用libgdx,入门级别教学
    .NET WebAPI 自定义 NullableConverter 解决可为空类型字段入参“”空字符触发转换异常问题
    【树莓派不吃灰】命令篇⑥ 了解树莓派Boot分区,学习Linux启动流程
    C语言:二维数组封装成函数(全局变量)
    为什么讨厌Java的人比较多且易见?
    IntelliJ IDEA 本地springBoot项目导入到gitlab管理
    搜索+剪枝,LeetCode 216. 组合总和 III
    2023高教社杯数学建模A题B题C题D题E题思路模型 国赛建模思路分享
    门店管理|火锅店数字化系统转型
    【RTOS学习】精简RTOS源码 | 认识RTOS | 任务的创建和删除
  • 原文地址:https://blog.csdn.net/qq_44632658/article/details/133097572
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号