引言

我最近在用vulkan来显示图片,需要用到这个库

初次尝试

通过git下载了std_image的库

我使用cmake来配置项目,不过这个库并没有使用cmake导入

首先把stb_image.h和stb_image.c放到项目里

然后在man文件的最上面

#define STB_IMAGE_IMPLEMENTATION

因为如果在其他cpp文件定义这个宏可能会导致重定义啥的错误

然后在需要的地方导入刚才拷贝的stb_image.h即可

注意要点

1、cmake需要刷新,然后obj文件也可以手动删一下(非必要)

2、出现重定义错误就按上面步骤说的做应该就好了

3、stb_image_write这个头文件我在我的cpp中引用会报错,在我的头文件中引用才行

资源中文路径

我们的图片是中文名,stbi_load默认使用的是fopen

所以我们查看stb_image.c可以看到其实这里是调用的stbi_load_from_file

fopen使用的是char*,而_wfopen使用的是wchar_t*

所以我们直接调用stbi_load_from_file然后使用_wfopen就可以加载中文路径了

其中注释部分是char*转换wchar_t*没测试过这样行不行,我是直接传了一个wchar_t*是可以的。

渲染文字

使用stb_truetype这个头文件

与之对应的初始化宏是

#define STB_TRUETYPE_IMPLEMENTATION

首先需要加载字体文件

stbtt_fontinfo* MTurbo::CreateStbFont(const wchar_t *ktxname) {/* 加载字体(.ttf)文件 */long int size = 0;unsigned char *fontBuffer = NULL;FILE *fontFile = _wfopen(ktxname, L"rb");if (fontFile == NULL){throw std::runtime_error("failed to load font!");}fseek(fontFile, 0, SEEK_END); /* 设置文件指针到文件尾,基于文件尾偏移0字节 */size = ftell(fontFile);       /* 获取文件大小(文件尾 - 文件头  单位:字节) */fseek(fontFile, 0, SEEK_SET); /* 重新设置文件指针到文件头 */fontBuffer = (unsigned char *)calloc(size, sizeof(unsigned char));fread(fontBuffer, size, 1, fontFile);fclose(fontFile);/* 初始化字体 */auto info = new stbtt_fontinfo;if (!stbtt_InitFont(info, fontBuffer, 0)){throw std::runtime_error("failed to load font! Init");}//free(fontBuffer);return info;
}

其中ktxname是字体的路径,使用wchar_t表示支持中文路径

然后就是使用字体对文字生成图片,这里补充一些小知识

补充:unicode编码

0x54表示一个字母“T”,0x开头表示16进制数,0开头表示8进制数,可以在网上找在线十六进制转十进制数进行观察。

十六进制转十进制

每个数字表示一个符号,c++的char不支持中文,因为无法表示太大的数字,wchar_t可以支持中文是因为能支持大数字,所以字符本质上就是数字。

unicode编码支持很多字符,包括各种语言。这里可以在网上找在线unicode转换

unicode在线转换

可以看到转换出来的是类似

你好

\u4f60\u597d

\u就表示unicode,这里我们仅仅把4f60转换成十进制就是20320

补充:与vulkan对接

由于具体步骤太复杂,这里只说大概步骤

1、加载字体输出stbtt_fontinfo指针

2、使用字体指针和文字进行生成图片

3、创建buffer,把字体图片内存拷贝到缓冲区

4、销毁字体图片

5、通过width、height等数据创建Image

6、创建指令池command_pool,把文字图缓冲发给GPU

7、创建ImageView与Sampler采样器

这样shader就可以通过下面shader代码渲染文字了,跟渲染图片差不多

texture(sampler2D(myTexture, mySampler), inUV, 0)

参考资料

引擎开发二: stb_image库及使用

ubuntu 1604 配置OpenGL(SDL2+glfw+glad+glm+stb_image.h+Assimp)

stb_image使用说明相关推荐

  1. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...

    高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...

  2. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...

    cmd replace 文件替换使用说明 帮助信息: 复制代码 代码如下: 替换文件. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [ ...

  3. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  4. Delphi开发的IOCP测试Demo以及使用说明。

    Delphi开发的IOCP,此为压力测试Demo和使用说明.

  5. oracle database link mysql_oracle database link使用说明

    oracle database link使用说明 作用: 将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象. 简易语法: CREATE [PUBLIC] ...

  6. 序列拼接工具Bowtie使用说明

    序列拼接工具Bowtie使用说明 2011-06-08 ~ ADMIN Bowtie是一个超级快速的,较为节省内存的短序列拼接至模板基因组的工具.它在拼接35碱基长度的序列时,可以达到每小时2.5亿次 ...

  7. benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明

    关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...

  8. 计算机网页基础课专业,关于《计算机应用基础》课程网页下的学习资源使用说明....

    关于<计算机应用基础>课程网页下的学习资源使用说明. 关于<计算机应用基础>课程网页下的学习资源使用说明 各位同学:大家好! 07春学期已接近一半的时间了,新生对课程还需要更多 ...

  9. gh ost mysql_MySQL在线DDL gh-ost 使用说明

    3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...

最新文章

  1. Kubernetes1.5源码分析(二) apiServer之资源注册
  2. 2009年北京突然的一场雪
  3. 【Python】编程笔记1
  4. 设计模式之_工厂系列_03
  5. Hbase中的列式表映射到hive的外表
  6. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计
  7. 性能对比:Count(字段)、Count(主键)、Count(1)、Count(*)
  8. 基础知识(九)boost+vs2015安装配置
  9. omwin密立根油滴实验数据处理程序_哈工程最新大物实验报告29——磁场的测量...
  10. Centos在线安装nginx
  11. translator什么意思中文_translator是什么意思|translator的音标|translator的用法 - 英语词典...
  12. FlexPaper查看.swf文件的使用方法
  13. 关于php 调用接口 微信云支付 HmacSha256 加密 request_content 生成 authen_code
  14. 计算机课程 图层关系认识 课件,全国“xx杯”计算机类说课大赛课件一等奖作品:图层蒙版说课课件...
  15. 关注可视化H5设计(待补充……)
  16. python把文件转化为二进制流-python:将一个文件转换为二进制文件(binary)
  17. 23款网盘全都能变成本地硬盘
  18. 急 急 急 急!!!!!!!!!
  19. 哪些日本人看来很普通的日文词汇,在我们眼里会很高大上?
  20. 获取当前目录下的所有文件夹

热门文章

  1. webpack-多页面打包
  2. 初中计算机老师教学计划,初中信息技术教师个人三年成长规划
  3. c语言数据类型(内含static的使用)
  4. JS 中并发和并行的区别
  5. bootstrap4 常用样式类名 (供自己参考)
  6. 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手里没有牌.最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组
  7. mongodb入门-9查询4
  8. 基于uda1340 的 mixer混音器编程实例
  9. C++中带有空尖括号的template <>
  10. Hopfield网络和玻尔兹曼机对比,总结,以及受限玻尔兹曼机RBM的提出