价值投资 长期主义 编程 美食 旅行 梦想 参禅 悟道

0%

在这个日新月异的时代,似乎每天如果不有点进步似乎都不好意思出门见人,

也更不好意思,谈理想和人生。

汤铭有云:苟日新,日日新,又日新!

你我或许是稚子顽童,青年才俊 亦或许是老骥伏枥,均可意气风发,志在千里。

但千里之行,终须始于足下,

万丈高楼也需凭地基而起,

像大海一样的事业也是靠江河小流聚势而成。

《大学》里说: 物有本末,事有终始,知所先后,则近道矣。

本系列的目标即是研究,学习之道,自我提升之方法论。

欢迎一起参禅悟道,勇攀高峰!

我是晓光,希望能和你相伴。公众号:猫爪在线

本系列目标

免费搭建一个静态独立博客。

关键词: 免费,静态独立博客。

GitHub创建个人仓库

免费的问题是通过GitHub解决的,Github有提供相关的免费服务,我们基于此可以构建免费的静态独立博客。

  1. 登录到 GitHub ,
  2. 如果没有 GitHub 帐号,请使用你的邮箱注册 GitHub 帐号:https://github.com/join?source=header-home
  3. 登录成功之后,点击 GitHub 中的 New repository 创建新仓库,仓库名应该为:用户名.github.io 。这里用户名使用你的 GitHub 帐号名称代替,这是固定写法。

使用git配置key免密码访问

Git 是目前世界上最先进的分布式版本控制系统(没有之一)。这是使用 Git 的目的是将我们的网站部署到服务器(GitHub)上面去。

安装Git

推荐: https://gitforwindows.org/

安装好 Git 后,只需要进行下面的配置即可

配置信息

在终端进行操作,设置 user.name 和 user.email 配置信息,我这里设置为全局。

1
2
git config --global user.name "你的GitHub用户名"
git config --global user.email "你的GitHub注册邮箱"

生成密钥

通过注册的邮箱生成 ssh 密钥文件:

1
ssh-keygen -t rsa -C "你的GitHub注册邮箱"

然后直接三个回车即可,默认不需要设置密码。最后得到了两个文件:id_rsaid_rsa.pub

打开 id_rsa.pub 文件,将里面的内容全部复制。

配置到GitHub

登录自己的Github,选择 setting -> SSH and GPG keys

在SSH keys 项中 点击 New SSH key 按钮

Title可以自己定义, key中 拷贝入刚才在id_rsa.pub 文件 拷贝的内容

点击Add SSH key 配置完成。

测试GitHub SSH

1
ssh -T git@github.com

显示如下代表OK

1
2
λ ssh -T git@github.com
Hi frank2019! You've successfully authenticated, but GitHub does not provide shell access

Hexo安装

安装Node.js

Hexo 基于 Node.js,因此需要先安装 Node.js;

你可以在这里进行对应电脑版本的下载:https://nodejs.org/en/download/

安装hexo

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

所有必备的应用程序安装完成后,即可使用 npm 安装 Hexo。

1
npm install -g hexo-cli

Hexo使用

安装好 Hexo 后,马上就能使用了。首先初始化博客,输入:

1
$ hexo init myBlog

接下来,进入文件夹 myBlog,输入

1
$ hexo s

此时,在本地的你的博客已经运行起来,可以在浏览器中查看

然后,打开浏览器输入地址:

1
localhost:4000

执行到这里事实上博客就已经搭建好了,接下来就是去完善它。

注意:下面的命令都是在 myBlog文件里进行操作的。

添加文章

1、直接导入文章

你可以将你平时写的文章直接导入到 _posts 文件夹里,注意文章类型得是 md格式。

2、写新文章

你可以执行下列命令来创建一篇新文章。

1
hexo new [layout] <title>

3、生成网页

使用 Hexo 生成静态文件快速而且简单。

1
2
hexo generate
//简写 hexo g

启动服务预览文章

输入以下命令以启动服务器,你的网站会在 http://localhost:4000 下启动。在服务器启动期间,Hexo 会监视文件变动并自动更新,无须重启服务器。

1
hexo server

如果你想要更改端口,或是在执行时遇到了 EADDRINUSE 错误,可以在执行时使用 -p 选项指定其他端口,如下:

1
$ hexo server -p 5000

小总结

1、hexo init [folder] 初始化本地文件夹为hexo项目

2、hexo new “我的博客文章” #新建文章

3、hexo generate #生成网页

4、hexo server #启动服务预览

部署

Hexo 提供了快速方便的一键部署功能,只需一条命令就能将网站部署到服务器上。

1
$ hexo deploy

在开始之前,必须先在 _config.yml 中修改参数,一个正确的部署配置中至少要有 type 参数,例如:

_config.yml中进行修改。

修改其中的deploy 为自己的内容。

1
2
3
4
5
6
7
8
9
10
11
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: landscape

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: https://github.com/frank2019/frank2019.github.io.git
branch: master

这一步的目的是将 Hexo 与 GitHub 进行关联。

配置好后通过

1
$ hexo d

命令,稍等片刻,网站就已经部署好了,可以在浏览器输入你的GitHub名称.github.io,这样一个免费的博客就已经搭建好了。

我的博客是

https://frank2019.github.io/

Hexo 主题

hexo 默认的主题可能显得有点呆板,你可以在 https://hexo.io/themes/index.html进行主题的挑选更换。将下好的主题安放在`themes`文件夹内,同时在`_config.yml`中进行主题修改就好了。

一般大佬们提供的主题都会提供文档说明,按照说明进行简单的设置就能拥有一个酷炫的页面了。

推荐链接:

排名前 10 的 Hexo 主题

出错处理

ERROR Deployer not found: git

hexo d
ERROR Deployer not found: git

执行以下命令即可

1
$ npm install --save hexo-deployer-git

Package cheerio is not installed.

INFO Checking dependencies
ERROR Package cheerio is not installed.
ERROR Please install the missing dependencies from the root directory of your Hexo site.

1
2
3
4
5
6
7
8
9
10
11
12
13
$ npm install cheerio
npm WARN npm npm does not support Node.js v12.16.1
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can't make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 6, 8, 9, 10, 11.
npm WARN npm You can find the latest version at https://nodejs.org/
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.11 (node_modules\nunjucks\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.11: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ cheerio@1.0.0-rc.3
added 16 packages from 47 contributors in 5.886s

动手试一下吧!

我是谁?

很高兴大家来到这里,我是‘东胜神州’博客

  • 在这里我会坚持优质的内容

  • 坚持价值投资

  • 坚持长期主义

  • 热爱美食 旅行 编程 参禅悟道

  • 坚持成就你我的梦想

  • 坚持知行合一(实践类的话题坚持打磨出个不错的(或实习)产品,有所得)

  • 如切如磋,如琢如磨

欢迎大家多提宝贵意见! 十分感谢!

交流学习

  • 独立博客爱好群QQ群: 1071329826

我可以为你做什么?

欢迎合作

开放包容 锐意进取 合作共赢!

有好的想法或创意欢迎加我!

我的公众号: 猫爪在线

Email: frank2019@yeah.net

QQ:454052811

引言

The person who says he knows what he thinks but cannot express it usually does not know what he thinks.

— Mortimer Adler

生硬翻译一下是:

心里感觉知道,但是不能准确的表达清楚,其实并非真正地知道。

费曼是谁?

理查德·费曼

美国理论物理学家,量子电动力学创始人之一,纳米技术之父。

  • 他早年参与了“曼哈顿计划”,是推动世界第一颗原子弹研发的重要人物。
  • 曾参与调查“挑战者号”航天飞机失事事件,并且在电视机前,向全美国人民用一个实验干净清晰的解释了失事原因。
  • 他被认为是爱因斯坦之后最睿智的理论物理学家,也是第一位提出纳米概念的人。
  • 1965年费曼因在量子电动力学方面的贡献获得诺贝尔物理学奖。
  • 除了是个物理学家,费曼还是个作家、艺术家,擅长演奏手鼓,还擅长打开各类保险箱

费曼学习法

有一种学习方法被归于费曼的名下,虽然并没有事实证据是由费曼提出,但这个方法帮助了很多人快速学习一门技能。

费曼学习法总共分四部(以下为众多版本之一):

1,Concept (概念)

选择一个你要学习的概念,或者说是技能点;

2,Teach (教给别人)

想象把这个概念给一个外行(或者八岁小孩), 不使用任何高级的词汇或复杂的概念(因为使用它们时你很容易又陷入自欺的怪圈),使用小学生都可以听懂的语言。用这种方法讲授时,其实是在迫使自己更深刻的理解这个概念。同样重要的是,会发现自己在那些地方理解的还不够透彻。

3,Review (评价)纠错学习

  • 在步骤二中,不可避免的遇到卡壳 或是难以解释的地方 甚至是遗漏重要的方面,
  • 这其实是很有价值的反馈。
  • 返回到原材料中,有针对性的学习相关的部分。评价你自己的教学并找到和原概念的差距。
  • 然后合上原材料,重新回到步骤2.直到你完全通过步骤三。

4,Simplify (简化)回顾和精简,总结

  • 经过前面的三步,你已经可以解释这个概念了;
  • 现在回顾这些解释,确保你没有使用任何复杂的语言;
  • 将这些解释大声读出来,如果听起来不够简洁,或者让人困惑,这就说明你在这些地方还可以进一步加深理解。你也可以尝试用常见事物和现象类比来解释。
  • 最后,已经可以用最简洁清晰的语言解释清楚这个概念了。而这时,也表明你真的理解透彻这个概念的实质。
  • 当使用这种方法时,慢慢透过这个方法的每一个步骤,精确地发现还有哪些内容没有理解。
  • 这种学习方式非常高效,很少浪费时间。

5,找个实际的人试一下(可选)

关于学习的话

概念是一切知识架构的基石。所谓的“独立思考” ,对其最朴素的描述无非是:能够独立地、正确地使用正确的概念。

​ —-李笑来在《新生》一书

[With first principles thinking] you boil things down to the most fundamental truths … and then reason up from there.

[当你使用基本原则思维时] 你将事情追溯到最基本的真理…然后,从最基本的真理出发,向上逻辑推导。

​ —马斯克

你从头读,尽量往下读,直到你一窍不通时再从头开始,这样坚持往下读,直到你完全读懂为止”。

–费曼

董遇字季直,性质讷而好学。人有从学者,遇不肯教,而云“必当先读百遍!”言:“读书百遍,其义自见”。从学者云:“苦渴无日。”遇言“当以‘三余’。”或问“三余”之意,遇言“冬者岁之余,夜者日之余,阴雨者时之余也。

​ <三国志>

​ “是故学然后知不足,教然后知困。知不足然后能自反也,知困然后能自强也。故曰教学相长也。”

​ 《礼记·学记

PS: 这不就是费曼学习法吗?

扩展阅读

如果你想更多的了解费曼的思想,不妨读读下面几本书。

  • 《别闹了,费曼先生》

  • 《你干吗在乎别人怎么想?》

  • 《发现的乐趣》

  • 《费曼手札》

  • 《费曼传》

  • 《费曼物理学讲义》

    2013年,BBC播出了一个费曼的记录片:The Fantastic Mr. Feynman,1个小时,也可以找来看看。


公众号: 猫爪在线

两则典故,关于学习方法,关于教学相长。

教学相长一

原文

虽有佳(嘉)肴,弗食,不知其旨也;虽有至道,弗学,不知其善也。是故学然后知不足,教然后知困。知不足,然后能自反也。知困,然后能自强也。故曰:教学相长也。兑命曰:“学学半。”其此之谓乎?

译文

即使有美味的菜肴,不吃,不会知道它的味道鲜美;即使有最好的道理,不学,不会知道它的高妙。因此,(通过)学习然后知道(自己)有不足的地方,(通过)教然后知道(自己)有困惑不解的地方。知道(自己)有不足的地方,然后(才)能够督促自己(进一步学习);知道(自己)有困惑不解的地方,然后才能够自我奋发进取。所以说:教和学是互相促进、共同提高的。《兑命》说:教别人也是自己学习的一半。大概说的就是这个道理吧。

教学相长二

原文

剑虽利,不厉不断;材虽美,不学不高。虽有嘉肴①,不尝不知其旨②;虽③有善道,不学不达其功。故学然后知不足,教然后知不究④。不足,故自愧而勉;不究,故尽师而熟。由此观之,则教学相长也。

译文

剑刃虽然锐利,不磨就不能斩断他物;人的资质虽然聪颖,不认真学习,就不能提高修养。虽然有美酒佳肴,不亲口品尝,就不能知道它们的味美;虽然有正确的道理,不努力学习,就不能通达它们的功用。所以说,通过学习,然后才会发现自己的不足;通过传授,然后才知道自己研究不深。发现自己的不足,就会心愧而努力学习,知道自己的研究不深,就会遍天下求师而弄透事理。从这些看来,传授与学习是相互促进的。

PS: 古代经典还是很有必要读的,不然死后不好意思见古人!

参考链接

  1. 费曼读书法
  2. 礼记·学记
  3. 教学相长

博客名字体的配置

目标是把博客的名字的字体更改。

这部分的设置可以在theme的配置种修改。

themes\next_config.yml

如下,我将字体改为华文隶书。

1
2
3
4
5
6

# Font settings for site title (.site-title).
title:
external: true
family: 华文隶书 #Roboto Slab
size: 4

依次类推,比如文章标题 正文等等的字体和大小的设置也可以在这部分配置种实现。

古人说: 格物、致知、诚意、正心 , 修身、齐家、治国、平天下 。

古人又说: 立德、立功、立言 ,三不朽。 写博客也算立言的开始吧。

我觉得这是金玉良言啊。

那么咱们谈谈,我觉得写博客的好处具体有那些?

  1. 教学相长
  2. 加深对技术和概念的理解;
  3. 提高思维能力,和逻辑能力;
  4. 提高沟通能力,每一篇文章都是一次自我沟通的开始。
  5. 方便查阅以后用的到;
  6. 可以看到多年之前的文章/想法/当时对技术的理解。
  7. 获取阅读量,得到认可,提高知名度;
  8. 结交志同道合的人,结伴前行;
  9. 提高写作水平,文案水平;
  10. 为自己的人生留下只言片语;
  11. 碎片化学习;

如果你对独立博客感兴趣,可以加入群聊。一起交流

独立博客爱好群QQ群: 1071329826

Application framework:

用于给APP提供访问hardware的Camera API2,通过binder来访问camera service。

1
frameworks\base\core\java\android\hardware\camera2

frameworks\av\camera 是camera framework与camera service IPC通讯的数据载体等等

主要的类

CameraManager:

Camera2操作camera主要类

CameraDeviceImpl:

CameraCaptureSession:

camera service

1
frameworks\av\services\camera\libcameraservice

主要类或文件

CameraDeviceClient.cpp

CameraProviderManager.cpp

Camera3Device.cpp

AIDL

1
frameworks/av/camera/aidl/android/hardware
  • 基于Binder实现的一个用于让App fw代码访问natice fw代码的接口。。其中:

​ (1) ICameraService 是相机服务的接口。用于请求连接、添加监听等。
​ (2) ICameraDeviceUser 是已打开的特定相机设备的接口。应用框架可通过它访问具体设备。
​ (3) ICameraServiceListener 和 ICameraDeviceCallbacks 分别是从 CameraService 和 CameraDevice 到应用框架的回调。

cameraprovider

1
hardware\interfaces\camera\provider\2.4

主要类

CameraProvider.cpp android.hardware.camera.provider@2.4-service.rc

camera HAL interface

1
2
hardware\interfaces\camera\common\1.0      
hardware\interfaces\camera\device\3.2 hardware\libhardware\include\hardware\camera3.h hardware\libhardware\modules\camera\3_4

camera HAL implement

1
vendor\qcom\proprietary\camx\src\core

主要类

camerahal3entry.cpp: camera hal 调用的入口 camxhal3.cpp: camera hal接口主要实现类,capture_Request与capture_Result中转类,主要通过这个类来处理capture request与回调 capture result. camxhaldevice.cpp: camxhal3module.cpp

算法实现

vendor\qcom\proprietary\chi-cdk\vendor\node

核心算法都在这里

扩展阅读

  1. Android Camera原理之camx hal架构
  2. Android : Camera2/HAL3 框架分析
  3. Camera CHI API
  4. Android : Camera之CHI API
  1. CameraCharacteristics 详解
  2. Android : Camera2/HAL3 框架分析
  3. Android : Camera之CHI API
  4. https://www.jianshu.com/p/1332d3864f7c

Dear ImGui library 简介

作为开发人员,我们都面临着向程序引入图形界面的痛苦。传统的GUI库增加了一定程度的复杂性,如果您正在制作用于调试的工具,则可能不需要这些复杂性。在这里,我们提供了一个库,使创建记录器、配置文件器、调试器甚至整个游戏编辑器成为可能。这里介绍的整个示例可在Github上查阅。

Dear ImGui?

Dear ImGui 是一个令人惊叹的C++ UI 库,主要应用在游戏开发。该项目是开源软件,基于MIT license。Dear ImGui专注于简单性和生产力,使用的是Inmediate Mode GUI paradigm

即时模式GUI不同于传统的保留模式界面,因为小部件是在每个帧上创建和绘制的,而传统的方法是首先创建小部件并向其添加回调。这种模式的一些好处是您的UI“更接近”您的数据,并且它允许快速原型化。

Dear ImGui主要设计用于开发人员在内容创建和调试工具中使用..它是渲染器不可知论的方式,您必须提供工具来呈现数据,但它非常容易集成到您自己的代码中,因为它有多个绑定的不同窗口和事件处理库(如GLFW,SDL2和GLUT)和多个渲染器(如OpenGL,DirectX和Vulkan)。

Dear ImGui配备了许多小部件,如窗口、标签、输入框、进度条、按钮、滑块、树等。你可以在下面的图片中看到一些例子。

![](Dear ImGui library简介及入门/conan-imgui-widgets.gif)

在应用中集成Dear ImGui

ImGui的典型用途是当您已经有了一个启用3D管道的应用程序,如内容创建或游戏开发工具,您希望在其中添加GUI。让我们看看在我们的应用程序中集成ImGui是多么容易。我们的示例应用程序使用OpenGL3呈现三角形。我们将使用GLFW管理窗口创建和事件处理。由于ImGui独立于渲染系统和平台,我们必须为我们的渲染系统引入一些绑定。幸运的是, Dear ImGui的设计中包含预先的绑定,比如我们在使用的Dear ImGui v1.69中我们包含以下头文件:

使此工作的最小代码在main.cpp中。首先,初始化用于呈现的窗口,然后必须初始化DearImGui上下文以及助手平台和Renderer绑定。如果您愿意,也可以更改渲染样式。

1
2
3
4
5
6
7
8
9
// Setup Dear ImGui context
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO &io = ImGui::GetIO();
// Setup Platform/Renderer bindings
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init(glsl_version);
// Setup Dear ImGui style
ImGui::StyleColorsDark();

然后,您进入主应用程序循环,在那里您可以清楚地看到与经典保留模式GUI的区别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
glClearColor(0.45f, 0.55f, 0.60f, 1.00f);
glClear(GL_COLOR_BUFFER_BIT);

// feed inputs to dear imgui, start new frame
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();

// rendering our geometries
triangle_shader.use();
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);

// render your GUI
ImGui::Begin("Demo window");
ImGui::Button("Hello!");
ImGui::End();

// Render dear imgui into screen
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());

int display_w, display_h;
glfwGetFramebufferSize(window, &display_w, &display_h);
glViewport(0, 0, display_w, display_h);
glfwSwapBuffers(window);
}

当然,当循环结束时,做一些清理。

1
2
3
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();

所以,这就是我们得到的:

例如,让我们说,我们想要改变三角形的位置/方向和颜色。这就像调用一些滑块和选色器,并通过着色器将数据传递给三角形一样简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// render your GUI
ImGui::Begin("Triangle Position/Color");
static float rotation = 0.0;
ImGui::SliderFloat("rotation", &rotation, 0, 2 * PI);
static float translation[] = {0.0, 0.0};
ImGui::SliderFloat2("position", translation, -1.0, 1.0);
static float color[4] = { 1.0f,1.0f,1.0f,1.0f };
// pass the parameters to the shader
triangle_shader.setUniform("rotation", rotation);
triangle_shader.setUniform("translation", translation[0], translation[1]);
// color picker
ImGui::ColorEdit3("color", color);
// multiply triangle's color with this color
triangle_shader.setUniform("color", color[0], color[1], color[2]);

还有一些基本的绘图工具。

![](Dear ImGui library简介及入门/conan-imgui-logo.png)

如果您想探索不同的库小部件和选项,最好的方法是调用ImGui:ShowDemoWindow()并查看不同的示例。

Setting up a project with Conan

使用Connan建立一个使用ImGui的项目是一个几分钟的问题。这里显示的示例是使用Windows和Visual Studio2017,但在MacOS或Linux中非常相似。

如果您想尝试一下,可以从Connan示例中下载所有文件:

1
2
git clone https://github.com/conan-io/examples.git
cd examples/libraries/dear-imgui/basic

首先,让我们检查CMake项目。它有GLFW和OpenGL3的绑定,还有两个文件来处理OpenGL阴影和文件读取。它还将复制每次重新编译应用程序时呈现三角形的着色器到工作目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cmake_minimum_required(VERSION 3.0)
project(dear-imgui-conan CXX)

set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})

# CONFIG option is important so that CMake doesnt search for modules into the default modules directory
find_package(imgui CONFIG)
find_package(glfw CONFIG)
find_package(glew CONFIG)

add_executable( dear-imgui-conan
main.cpp
opengl_shader.cpp
file_manager.cpp
opengl_shader.h
file_manager.h
bindings/imgui_impl_glfw.cpp
bindings/imgui_impl_opengl3.cpp
bindings/imgui_impl_glfw.h
bindings/imgui_impl_opengl3.h
assets/simple-shader.vs
assets/simple-shader.fs )

add_custom_command(TARGET dear-imgui-conan
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/assets/simple-shader.vs ${PROJECT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/assets/simple-shader.fs ${PROJECT_BINARY_DIR}
)

target_compile_definitions(dear-imgui-conan PUBLIC IMGUI_IMPL_OPENGL_LOADER_GLEW)

target_link_libraries(dear-imgui-conan imgui::imgui glfw::glfw glew::glew)

我们还需要conanfile来声明它所依赖的库。除了GLF W库,我们还谈到了我们需要GLE W库来处理OpenGL函数加载。我们将使用cmake_multi为Debug和Release配置生成项目。还添加了一个导入部分,以下载GLFW和OpenGL3所需的绑定。

1
2
3
4
5
6
7
8
9
10
11
12
13
[requires]
imgui/1.69@bincrafters/stable
glfw/3.2.1@bincrafters/stable
glew/2.1.0@bincrafters/stable

[generators]
cmake_find_package_multi

[imports]
./misc/bindings, imgui_impl_glfw.cpp -> ../bindings
./misc/bindings, imgui_impl_opengl3.cpp -> ../bindings
./misc/bindings, imgui_impl_glfw.h -> ../bindings
./misc/bindings, imgui_impl_opengl3.h -> ../bindings

现在让我们构建项目并运行应用程序。

1
2
3
4
5
6
7
8
9
cd dear-imgui-conan-example
mkdir build
cd build
conan install .. -s build_type=Release
conan install .. -s build_type=Debug
cmake .. -G "Visual Studio 15 2017 Win64"
cmake --build . --config Release
cd Release
dear-imgui-conan

结论

Dear ImGui是一个强大的库,具有易于使用的API,它几乎无缝地集成到3D管道启用的应用程序中。它有很多小部件,可以成为一个很好的工具来制作调试软件,如分析器、记录器或任何类型的对象编辑器。此外,目前正在开发新的功能,如对接或多个视图端口。现在是时候体验Dear ImGUI了,并使它与您自己的代码交互了!

参考连接

  1. Using ImGui with modern C++ and STL for creating awesome game dev tools. Part 2. Some tips and tricks.
  2. https://github.com/ocornut/imgui
  3. An introduction to the Dear ImGui library

https://conan.io/