目的:ubuntu配置使用opengl - 初探-创建一个空窗口

news2024/9/23 7:18:00

目的:ubuntu配置使用openGL - 初探-创建一个空窗口

环境:

系统:Ubuntu18.04
环境:g++

步骤:

Ubuntu下使用openGL,搭建配置环境并测试窗口
1、openGL库,需要单独安装,由于本机是vmware虚拟机Ubuntu18.04,所以显卡是使用不了的。

2、glfw头文件和库,参考其他文章(https://blog.csdn.net/Alger_magic/article/details/128168157?spm=1001.2014.3001.5502)中编译方法获得(GLFW 是配合 OpenGL 使用的轻量级工具程序库,缩写自 Graphics Library Framework(图形库框架)。GLFW 的主要功能是创建并管理窗口和 OpenGL 上下文,同时还提供了处理手柄、键盘、鼠标输入的功能。有类似功能的库还有 GLUT和 SDL。)。

3、glad头文件和资源文件(GLAD作为开源库,用于管理OpenGL函数指针,使OpenGL基础渲染变得更加简单),下载链接https://glad.dav1d.de/, glad是在线直接选下载对应的头文件和源文件。
在这里插入图片描述
在这里插入图片描述

1.构建工程

1、安装依赖

安装openGL,实际安装#1 #2两步即能运行openGL

#0、安装查看OpenGL版本支持的工具
sudo apt-get install mesa-utils
glxinfo | grep OpenGL


#1、安装了opengl的核心库

sudo apt-get install libgl1-mesa-dev*
sudo apt-get install build-essential

#2、安装OpenGL Library

sudo apt-get install libgl1-mesa-dev

#3、安装OpenGL Utilities,

sudo apt-get install libglu1-mesa-dev
sudo apt-get install libegl1-mesa-dev

#4、安装OpenGL Utility Toolkit

sudo apt-get install libglut-dev

2、构建工程

按照如下样式构建工程

    -opengl_test
    ├─3rdparty
    │  ├─glad
    │  │  ├─include
    │  │  │  ├─glad
    │  │  │  │  └─glad.h
    │  │  │  └─KHR
    │  │  │     └─khrplatform.h
    │  │  └─src
    │  │     └─glad.c
    │  └─glfw
    │      ├─include
    │      │  ├─glfw3.h
    │      │  └─glfw3nativ.h
    │      └─lib
    │         └─libglfw.so
    ├─build
    ├─include
    ├─src
    │  └─opengl_win.cpp 
    ├─CMakelists.txt
    └─readme.txt


2. 写入测试代码

CMakelists.txt

cmake_minimum_required(VERSION 2.8)

project(opengl_test)

# Include files
# glfw
include_directories( ${PROJECT_SOURCE_DIR}/3rdparty/glfw/include/)
link_directories(${PROJECT_SOURCE_DIR}/3rdparty/glfw/lib/)
#glad
include_directories(${PROJECT_SOURCE_DIR}/3rdparty/glad/include/)


add_executable(opengl_win 
                ${PROJECT_SOURCE_DIR}/src/opengl_win.cpp
                ${PROJECT_SOURCE_DIR}/3rdparty/glad/src/glad.c)

target_link_libraries(opengl_win glfw GL dl)

opencl_win.cpp

#include <iostream>

#include <glad/glad.h>
#include <glfw3.h>

void framebufer_size_callback(GLFWwindow *_window, int _width, int _height);

int main()
{
	glfwInit();

	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

	GLFWwindow *win_handle = glfwCreateWindow(600, 600, "opengl_test", NULL, NULL);
	if (win_handle == NULL)
	{
		std::cout << "Failed to crate GLFW Window" << std::endl;
		glfwTerminate();

		return -1;
	}
	glfwMakeContextCurrent(win_handle);

	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	glViewport(0, 0, 600, 600);

	glfwSetFramebufferSizeCallback(win_handle, framebufer_size_callback);

	while (!glfwWindowShouldClose(win_handle))
	{
		glfwSwapBuffers(win_handle);
		glfwPollEvents();
	}

	glfwTerminate();

	return 0;
}

void framebufer_size_callback(GLFWwindow *_window, int _width, int _height)
{
	glViewport(0, 0, _width, _height);
}

3.编译执行

cd build

cmake .. && make

./opengl_win

在这里插入图片描述

demo源代码:
https://download.csdn.net/download/Alger_magic/87240079

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

萌新源api管理系统更新教程

前言 萌新源API管理系统旨在大家提供一个更为方便的管理api的方法&#xff0c;经过几个月的时间&#xff0c;目前已经迭代到v4.41版本 那么这篇文章呢&#xff0c;也是想要教一下大家怎样去更新我们最新版本的管理系统&#xff0c;我最近也是在研究自动化更新&#xff0c;但是…

【CVPR2022】Detecting Camouflaged Object in Frequency Domain

【CVPR2022】Detecting Camouflaged Object in Frequency Domain 论文有一个非官方的实现&#xff1a;https://github.com/VisibleShadow/Implementation-of-Detecting-Camouflaged-Object-in-Frequency-Domain 感觉这个论文是CVPR2022 Learning in the frequency domain 论文…

具有 1 个射频链的 OFDM-MIMO 系统的波束训练(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

基于多能互补的热电联供型微网优化运行(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

特征缩放是强制性的吗? 什么时候使用标准化? 什么时候使用归一化?数据的分布会发生什么变化?对异常值有什么影响?模型的准确性会提高吗?

以上问题也是面试中经常被问到的问题,我将在本博客中尝试通过提供合适的例子来回答上述问题。我们将使用 sklearn 的 StandardScaler 和 MinMaxScaler。 让我们考虑一个数据集,其中Age和Estimated Salary是输入特征,我们必须预测产品是否已购买(输出标签)或未购买。 看看…

【1796. 字符串中第二大的数字】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个混合字符串 s &#xff0c;请你返回 s 中 第二大 的数字&#xff0c;如果不存在第二大的数字&#xff0c;请你返回 -1 。 混合字符串 由小写英文字母和数字组成。 示例 1&#xff1a; 输入…

Spring - BeanFactoryAware扩展接口

文章目录Preorg.springframework.beans.factory.BeanFactoryAware扩展点说明Aware接口Spring内建Aware接口的执行时机及顺序源码解析 &#xff08;直接调用&#xff09;源码分析 _ BeanPostProcessor调用执行顺序扩展点示例Pre Spring Boot - 扩展接口一览 org.springframewor…

Kotlin Flow 背压和线程切换竟然如此相似

前言 上篇分析了Kotlin Flow原理&#xff0c;大部分操作符实现比较简单&#xff0c;相较而言背压和线程切换比较复杂&#xff0c;遗憾的是&#xff0c;纵观网上大部分文章&#xff0c;关于Flow背压和协程切换这块的原理说得比较少&#xff0c;语焉不详&#xff0c;鉴于此&…

5G无线技术基础自学系列 | 5G上行功率控制

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G上行功率控制是针对每个UE的不同信道…

CS224W 8 GNN Augmentation andTraining

目录 Graph Augmentation for GNNs 引入 Why Graph Augmentation Graph Augmentation Approaches Feature Augmentation on Graphs Input graph没有node features GNN很难学习的一些特定结构 Graph Structure augmentation Augment sparse graphs——添加虚拟节点或边…

不同平台下运行历程代码

不同平台下运行历程代码 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据…

【Mysql】索引

文章目录一.索引的价值1.1. mysql与磁盘交互的基本单位建立共识1.2. 为什么IO交互的基本单位为Page理解单个Page理解多个Page提高在单个Page中的查找效率针对多页情况的页目录为什么选择B树,而不是其他数据结构&#xff1f;没有主键会怎么创建索引为什么推荐使用自增ID作为主键…

Spring(Bean 作用域和生命周期)

目录 1. 案例1: Bean作用域的问题 2. 作用域 3. 设置 Bean 的作用域 4. Spring 的执行流程 5. Bean 的生命周期 1. 案例1: Bean作用域的问题 现在有一个公共的 Bean,通过给 A 用户 和 B 用户使用, 然后在使用的过程中 A 偷偷的修改了公共 Bean 的数据, 导致 B 在使用时发…

html静态网站基于动漫网站网页设计与实现共计4个页面

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

Docker介绍

目录 docker定义 docker解决了什么问题 docker技术边界 docker给我们带来了哪些改变 docker和虚拟机的区别 docker基本架构 基本架构图 RootFs Linux Namespace 进程命名空间 查看元祖进程命名空间 查看当前用户进程命名空间 容器进程命名空间 容器进程命名空间的…

[激光原理与应用-33]:典型激光器 -5- 不同激光器的全面、综合比较

目录 第1章 五类激光器的性能及应用对比 第2章 各类激光器的区别特点及应用三张表看懂-超米激光 2.1 固体激光器 2.2 气体激光器 2.3 化学激光器 2.4 染料激光器 2.5 半导体激光器 2.6 光纤激光器 2.7 自由电子激光器 第3章 10多种激光器的全面梳理 3.1 激光器的分类…

二叉树-31-37对称二叉树

31. 对称的二叉树 递归&#xff1a; 把原问题化成更小规模的问题&#xff0c;并且具有相同的问题性质&#xff0c;重复调用本身函数 二叉树的递归&#xff0c;是将某个节点的左子树、右子树看成一颗完整的树&#xff0c;那么对于子树的访问或者操作就是对于原树的访问或者操作…

HTML如何制作音乐网站(如何搭建个人音乐网页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Java毕业设计 JSP+MySQL幼儿园信息管理系统

幼儿园网站就是幼儿园的“商标”,在网站上可以看出一所幼儿园的特色和个性,在这个信息时代,建立属于自己的幼儿园网站是最直接的宣传手段。而就目前的幼儿园信息管理系统来说,有很多功能都是华而不实的,不能很好的与幼儿园日常工作相结合,容易导致日常工作出现异常。本系统的题…