upload
This commit is contained in:
parent
05e8c85cc2
commit
3917805983
3
.obsidian/core-plugins-migration.json
vendored
3
.obsidian/core-plugins-migration.json
vendored
@ -25,5 +25,6 @@
|
|||||||
"workspaces": false,
|
"workspaces": false,
|
||||||
"file-recovery": true,
|
"file-recovery": true,
|
||||||
"publish": false,
|
"publish": false,
|
||||||
"sync": false
|
"sync": false,
|
||||||
|
"properties": true
|
||||||
}
|
}
|
||||||
1
.obsidian/core-plugins.json
vendored
1
.obsidian/core-plugins.json
vendored
@ -7,6 +7,7 @@
|
|||||||
"canvas",
|
"canvas",
|
||||||
"outgoing-link",
|
"outgoing-link",
|
||||||
"tag-pane",
|
"tag-pane",
|
||||||
|
"properties",
|
||||||
"page-preview",
|
"page-preview",
|
||||||
"daily-notes",
|
"daily-notes",
|
||||||
"templates",
|
"templates",
|
||||||
|
|||||||
BIN
Assert/Image/image-20231221094249151.png
Normal file
BIN
Assert/Image/image-20231221094249151.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.6 KiB |
@ -1,61 +0,0 @@
|
|||||||
# Linux
|
|
||||||
|
|
||||||
```C++
|
|
||||||
enum ENUM_ELFCLASS{
|
|
||||||
ELFCLASSNONE = 0,
|
|
||||||
ELFCLASS32,
|
|
||||||
ELFCLASS64
|
|
||||||
};//数值约束
|
|
||||||
enum ENUM_DATADIR{
|
|
||||||
ELFDATANONE = 0,
|
|
||||||
ELFDATALSB,
|
|
||||||
ELFDATAMSB
|
|
||||||
};//数值约束
|
|
||||||
T16 ELF_Ident{
|
|
||||||
T4 name "ELF\0";//字符约束
|
|
||||||
T1 elf enum ENUM_ELFCLASS;
|
|
||||||
T1 dir enum ENUM_DATADIR;
|
|
||||||
...;
|
|
||||||
};
|
|
||||||
T64 Elf64_Ehdr{
|
|
||||||
ELF_Ident e_ident;
|
|
||||||
T2 e_type;
|
|
||||||
T2 e_machine;
|
|
||||||
T4 e_version;
|
|
||||||
T8 e_entry;
|
|
||||||
T8 e_phoff;
|
|
||||||
T8 e_shoff;
|
|
||||||
T4 e_flags;
|
|
||||||
T2 e_ehsize;
|
|
||||||
T2 e_phentsize;
|
|
||||||
T2 e_phnum;
|
|
||||||
T2 e_shentsize;
|
|
||||||
T2 e_shnum;
|
|
||||||
T2 e_shstrndx;
|
|
||||||
};
|
|
||||||
T64 Elf64_Shdr{
|
|
||||||
T4 sh_name;
|
|
||||||
T4 sh_type;
|
|
||||||
T8 sh_flags;
|
|
||||||
T8 sh_addr;
|
|
||||||
T8 sh_offset;
|
|
||||||
T8 sh_size;
|
|
||||||
T4 sh_link;
|
|
||||||
T4 sh_info;
|
|
||||||
T8 sh_addralign;
|
|
||||||
T8 sh_entsize;
|
|
||||||
};
|
|
||||||
void parse(Archive ar){
|
|
||||||
ar >> ELF_Ident ident >> 0;
|
|
||||||
ident.elf ENUM_ELFCLASS{
|
|
||||||
ELFCLASS32: ar >> Elf32_Ehdr hdr;
|
|
||||||
ELFCLASS64: ar >> Elf64_Ehdr hdr;
|
|
||||||
}
|
|
||||||
ar >> hdr.e_shoff >> Elf64_Shdr[hdr.e_shnum] sh_list;
|
|
||||||
{
|
|
||||||
section = sh_list >> hdr.e_shstrndx;
|
|
||||||
ar >> section.sh_offset >>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
@ -15,10 +15,10 @@
|
|||||||
[[ChatGPT]]
|
[[ChatGPT]]
|
||||||
|
|
||||||
## File
|
## File
|
||||||
[[COFF]]
|
[[coff]]
|
||||||
|
|
||||||
## Language
|
## Language
|
||||||
[[GoLang]]
|
[[note/code/lang/GoLang]]
|
||||||
[[note/code/lang/Node]]
|
[[note/code/lang/Node]]
|
||||||
[[PHP]]
|
[[PHP]]
|
||||||
### C++
|
### C++
|
||||||
@ -35,10 +35,10 @@
|
|||||||
[[数据规范]]
|
[[数据规范]]
|
||||||
[[数据类型]]
|
[[数据类型]]
|
||||||
[[数据事件]]
|
[[数据事件]]
|
||||||
[[序列化]]
|
[[note/code/lang/zero/序列化]]
|
||||||
|
|
||||||
## tool
|
## tool
|
||||||
[[src/anki/anki]]
|
[[src/a/anki/anki]]
|
||||||
[[obsidian]]
|
[[obsidian]]
|
||||||
## theory
|
## theory
|
||||||
[[编译]]
|
[[编译]]
|
||||||
|
|||||||
@ -65,6 +65,10 @@ P = P \cdot\ R = P \cdot\ R_x \cdot\ R_z \cdot\ R_y =
|
|||||||
\right\}
|
\right\}
|
||||||
$$
|
$$
|
||||||
|
|
||||||
|
### 任意轴
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
### 四元素
|
### 四元素
|
||||||
|
|
||||||
$$
|
$$
|
||||||
|
|||||||
45
src/c/c++/coroutine.md
Normal file
45
src/c/c++/coroutine.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2024-01-26 09:55
|
||||||
|
modification date: 星期五 26日 一月 2024 09:55:11
|
||||||
|
---
|
||||||
|
# 协程原理
|
||||||
|
协程是可暂停和恢复的函数
|
||||||
|
## 暂停
|
||||||
|
- 什么时候暂停?
|
||||||
|
- IO查询,陷入IO事件时
|
||||||
|
- yield 接口,主动调用
|
||||||
|
- 被动暂停 协程框架隐藏相关细节
|
||||||
|
- IO 暂停
|
||||||
|
- 主动暂停 手动显示调用
|
||||||
|
- yield
|
||||||
|
- chanel
|
||||||
|
|
||||||
|
## 恢复
|
||||||
|
- 什么时候恢复?
|
||||||
|
- IO多路复用,调度器恢复
|
||||||
|
- 代码接口,主动调用
|
||||||
|
- 怎么恢复?
|
||||||
|
- 无栈协程
|
||||||
|
- 编译器生成拓展汇编代码
|
||||||
|
- 保存函数状态
|
||||||
|
- 确定暂停点状态切换
|
||||||
|
- 有栈协程
|
||||||
|
- 分配函数栈,类似线程
|
||||||
|
- 主动恢复
|
||||||
|
- 代码显示控制
|
||||||
|
- 恢复父协程
|
||||||
|
- 非对称协程
|
||||||
|
- 来自调度器调度
|
||||||
|
- 恢复任意协程
|
||||||
|
- 对称协程
|
||||||
|
- 绕过调度器
|
||||||
|
- 被动恢复
|
||||||
|
- IO多路复用,由调度器恢复
|
||||||
|
|
||||||
|
# 代码
|
||||||
|
```c++
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
12
src/c/c++/thread.md
Normal file
12
src/c/c++/thread.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2024-01-26 15:46
|
||||||
|
modification date: 星期五 26日 一月 2024 15:46:22
|
||||||
|
---
|
||||||
|
# 线程
|
||||||
|
CPU调度的最小单位,有线程栈2MB、线程数量有限制
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
21
src/c/c++/编译器特性.md
Normal file
21
src/c/c++/编译器特性.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2024-01-26 17:15
|
||||||
|
modification date: 星期五 26日 一月 2024 17:15:03
|
||||||
|
---
|
||||||
|
# c++17
|
||||||
|
## nodiscard
|
||||||
|
编译器会检查返回值是否被忽略,支持链式传递
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class [[nodiscard]] A {};
|
||||||
|
A foo() {
|
||||||
|
return A();
|
||||||
|
}
|
||||||
|
[[nodiscard]] B bar() {
|
||||||
|
return B();
|
||||||
|
}
|
||||||
|
std::ignore = foo();
|
||||||
|
```
|
||||||
|
|
||||||
108
src/g/go/golang.md
Normal file
108
src/g/go/golang.md
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2023-09-08 14:27
|
||||||
|
modification date: 星期五 8日 九月 2023 14:27:29
|
||||||
|
---
|
||||||
|
# go
|
||||||
|
|
||||||
|
## 设计哲学
|
||||||
|
|
||||||
|
- 追求简洁、优雅
|
||||||
|
- 垂直扩展:类型嵌入
|
||||||
|
- 水平扩展:接口
|
||||||
|
- 原生并发,轻量高效
|
||||||
|
- select | chanel 程序级扩展
|
||||||
|
- 面向工程,自带电池
|
||||||
|
|
||||||
|
## 项目工程
|
||||||
|
|
||||||
|
### 目录结构
|
||||||
|
|
||||||
|
- cmd
|
||||||
|
- internal
|
||||||
|
- pkg
|
||||||
|
- test
|
||||||
|
|
||||||
|
### 命名规范
|
||||||
|
|
||||||
|
- 包 小写,单个单词
|
||||||
|
- 包内的命名不建议含有包名
|
||||||
|
|
||||||
|
## 类型
|
||||||
|
|
||||||
|
任何类型都可以拥有方法
|
||||||
|
|
||||||
|
### 常量
|
||||||
|
|
||||||
|
无类型常量
|
||||||
|
|
||||||
|
对象 nil , 可直接调用函数 (单例模式)
|
||||||
|
|
||||||
|
## 反射
|
||||||
|
|
||||||
|
```go
|
||||||
|
// emptyInterface is the header for an interface{} value.
|
||||||
|
type emptyInterface struct {
|
||||||
|
typ *rtype
|
||||||
|
word unsafe.Pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
// rtype is the common implementation of most values.
|
||||||
|
// It is embedded in other struct types.
|
||||||
|
//
|
||||||
|
// rtype must be kept in sync with ../runtime/type.go:/^type._type.
|
||||||
|
type rtype struct {
|
||||||
|
size uintptr
|
||||||
|
ptrdata uintptr // number of bytes in the type that can contain pointers
|
||||||
|
hash uint32 // hash of type; avoids computation in hash tables
|
||||||
|
tflag tflag // extra type information flags
|
||||||
|
align uint8 // alignment of variable with this type
|
||||||
|
fieldAlign uint8 // alignment of struct field with this type
|
||||||
|
kind uint8 // enumeration for C
|
||||||
|
// function for comparing objects of this type
|
||||||
|
// (ptr to object A, ptr to object B) -> ==?
|
||||||
|
equal func(unsafe.Pointer, unsafe.Pointer) bool
|
||||||
|
gcdata *byte // garbage collection data
|
||||||
|
str nameOff // string form
|
||||||
|
ptrToThis typeOff // type for pointer to this type, may be zero
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Doc
|
||||||
|
|
||||||
|
https://www.cntofu.com/book/73/ch2-cgo/ch2-09-static-shared-lib.md
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# CMD
|
||||||
|
|
||||||
|
```shell
|
||||||
|
go build -x F:\go\vulkan\cmd\main.go
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# CGO
|
||||||
|
|
||||||
|
```shell
|
||||||
|
go env -w CGO_ENABLED=1
|
||||||
|
set CGO_CFLAGS=-IF:\Coding\GoModule\cgo
|
||||||
|
set CGO_LDFLAGS=-LF:\Coding\GoModule\cgo -I:vulkan.lib
|
||||||
|
go build -o main.exe main.go
|
||||||
|
|
||||||
|
#C:\Users\Administrator\AppData\Roaming\go
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 条件编译
|
||||||
|
|
||||||
|
## 标签编译
|
||||||
|
|
||||||
|
## 文件后缀
|
||||||
|
|
||||||
|
https://blog.csdn.net/wohu1104/article/details/121842932
|
||||||
|
|
||||||
75
src/l/english/Sound.md
Normal file
75
src/l/english/Sound.md
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2024-01-08 13:51
|
||||||
|
modification date: 星期一 8日 一月 2024 13:51:14
|
||||||
|
---
|
||||||
|
# group
|
||||||
|
|
||||||
|
## a/e/i/o/u
|
||||||
|
### an
|
||||||
|
can/fan/pan/ran
|
||||||
|
### at
|
||||||
|
bat/cat/hat/rat
|
||||||
|
### ar
|
||||||
|
card/farm/harp/park
|
||||||
|
### ay
|
||||||
|
spray
|
||||||
|
### en
|
||||||
|
hen/men/pen/ten
|
||||||
|
### er
|
||||||
|
cert/fern/herd
|
||||||
|
### et
|
||||||
|
jet/net/pet/wet
|
||||||
|
### ig
|
||||||
|
big/dig/pig/wig
|
||||||
|
### ip
|
||||||
|
dip/rip/sip/zip
|
||||||
|
### ink
|
||||||
|
drink/link/pink/sink
|
||||||
|
### ir
|
||||||
|
bird/girl/firn
|
||||||
|
### ot
|
||||||
|
cot/dot/hot/pot
|
||||||
|
### og
|
||||||
|
dog/fog/frog/log
|
||||||
|
### or
|
||||||
|
corn/fork/fort/horn
|
||||||
|
### ug
|
||||||
|
bug/hug/mug/rug
|
||||||
|
### ur
|
||||||
|
cure/curl/surf
|
||||||
|
|
||||||
|
## mix group
|
||||||
|
|
||||||
|
### ai
|
||||||
|
wait/maid/mail/rain
|
||||||
|
### ea
|
||||||
|
reap/seal/team
|
||||||
|
### oa
|
||||||
|
boat/coat/soap/goat
|
||||||
|
### ee
|
||||||
|
deer/heel/peel/seed/
|
||||||
|
## silent e
|
||||||
|
### ane
|
||||||
|
cane/mane/plane/vane
|
||||||
|
### a_e
|
||||||
|
pale/tale/whale
|
||||||
|
### i_e
|
||||||
|
|
||||||
|
bike/five/hide/kite
|
||||||
|
### o_e
|
||||||
|
bone/mole/nose/robe
|
||||||
|
### u_e
|
||||||
|
flute/cube/mule
|
||||||
|
|
||||||
|
## other
|
||||||
|
### sh
|
||||||
|
fish/sheep/shop/wish
|
||||||
|
### wh
|
||||||
|
whale/what/when/where
|
||||||
|
### th
|
||||||
|
earth/teeth/think/thumbs/with
|
||||||
|
### ch
|
||||||
|
cheese/such/chase/each/chunk
|
||||||
|
|
||||||
36
src/o/os/int.md
Normal file
36
src/o/os/int.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2023-08-31 20:13
|
||||||
|
modification date: 星期四 31日 八月 2023 20:13:32
|
||||||
|
---
|
||||||
|
# int 0x13
|
||||||
|
磁盘读写校验寻道,以扇区为单位,内存地址为 ES * 16 + BX
|
||||||
|
```assembly
|
||||||
|
MOV AX,0x0820
|
||||||
|
MOV ES, AX
|
||||||
|
MOV CH,0 ; 柱面0
|
||||||
|
MOV DH,0 ; 磁头0
|
||||||
|
MOV CL,2 ; 扇区2
|
||||||
|
MOV AH,0x02 ; AH=0x02 : 读盘
|
||||||
|
MOV AL,1 ; 1个扇区
|
||||||
|
MOV BX,0
|
||||||
|
MOV DL,0x00 ; A驱动器
|
||||||
|
INT 0x13 ; 调用磁盘BIOS
|
||||||
|
JC error
|
||||||
|
```
|
||||||
|
参数:
|
||||||
|
- AH=0x02;(读盘)
|
||||||
|
- AH=0x03;(写盘)
|
||||||
|
- AH=0x04;(校验)
|
||||||
|
- AH=0x0c;(寻道)
|
||||||
|
- AL=处理对象的扇区数;(只能同时处理连续的扇区)
|
||||||
|
- CH=柱面号 &0xff;
|
||||||
|
- CL=扇区号(0-5位)|(柱面号&0x300)>>2;
|
||||||
|
- DH=磁头号;
|
||||||
|
- DL=驱动器号;
|
||||||
|
- ES:BX=缓冲地址;(校验及寻道时不使用)
|
||||||
|
返回值:
|
||||||
|
- FLACS.CF = 0:没有错误,AH=0
|
||||||
|
- FLAGS.CF =1:有错误,错误号码存入AH内(与重置(reset)功能一样)
|
||||||
|
|
||||||
31
src/o/os/memory.md
Normal file
31
src/o/os/memory.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2023-08-31 19:12
|
||||||
|
modification date: 星期四 31日 八月 2023 19:12:24
|
||||||
|
---
|
||||||
|
# memory
|
||||||
|
|
||||||
|
## 实模式内存布局
|
||||||
|
加载操作系统前的内存布局 16位CPU 20位地址总线 1MB内存寻址空间
|
||||||
|
- DRAM 640kb 0x00000 ~ 0x9FFFF
|
||||||
|
- VRAM 320kb 0xA0000 ~ 0xEFFFF
|
||||||
|
- ROM 64kb 0xF0000 ~ 0xFFFFF
|
||||||
|

|
||||||
|
## 地址分配
|
||||||
|
### 中断表
|
||||||
|
- 函数注册 & 调用
|
||||||
|
- 中断调用硬件函数
|
||||||
|
- 中断调用系统API
|
||||||
|
### MBR
|
||||||
|
- 系统盘的第一个扇区 512 字节
|
||||||
|
- 操作系统启动程序
|
||||||
|
- 有608kb的可用区域
|
||||||
|
### 显示器
|
||||||
|
- 显示适配器
|
||||||
|
- 显示数据
|
||||||
|
### BIOS
|
||||||
|
- bios 程序存储于主板上的ROM中
|
||||||
|
- bios 数据与函数API
|
||||||
|
- 开机入口程序
|
||||||
|
|
||||||
24
src/o/os/os.md
Normal file
24
src/o/os/os.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2023-08-31 19:02
|
||||||
|
modification date: 星期四 31日 八月 2023 19:02:20
|
||||||
|
---
|
||||||
|
# os
|
||||||
|
#link/os
|
||||||
|
[自制操作系统](https://www.zhihu.com/column/c_1177746519796690944)
|
||||||
|
## BIOS
|
||||||
|
- 通电瞬间 `cs:ip` 强制初始化为 `0xF000: 0xFFF0`
|
||||||
|
- 检测内存、显卡等外设信息
|
||||||
|
- 初始化硬件,建立中断表和中断例程
|
||||||
|
- 加载并跳转到 MBR,检查是否以0x55 0xaa 结尾
|
||||||
|
## MBR
|
||||||
|
- 512b 位于磁盘的第一个扇区,内存地址 0x7c00 ~ 0x7dff
|
||||||
|
- 定义装载地址 `ORG 0x7c00`,用于计算符号绝对地址
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
9
src/r/rust/rust.md
Normal file
9
src/r/rust/rust.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2023-09-25 20:32
|
||||||
|
modification date: 星期一 25日 九月 2023 20:32:08
|
||||||
|
---
|
||||||
|
# 语法
|
||||||
|
|
||||||
|
|
||||||
BIN
src/s/stl/STL源码剖析简体中文完整版(清晰扫描带目录).pdf
Normal file
BIN
src/s/stl/STL源码剖析简体中文完整版(清晰扫描带目录).pdf
Normal file
Binary file not shown.
10
src/v/vulkan/vulkan go.md
Normal file
10
src/v/vulkan/vulkan go.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2024-01-17 13:47
|
||||||
|
modification date: 星期三 17日 一月 2024 13:47:00
|
||||||
|
---
|
||||||
|
# vulkanapi
|
||||||
|
|
||||||
|
## shader
|
||||||
|
|
||||||
272
src/v/vulkan/vulkan.md
Normal file
272
src/v/vulkan/vulkan.md
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2023-09-16 10:13
|
||||||
|
modification date: 星期六 16日 九月 2023 10:13:37
|
||||||
|
---
|
||||||
|
# 实战
|
||||||
|
|
||||||
|
## 导图
|
||||||
|
|
||||||
|
vulkan-1.dll
|
||||||
|
|
||||||
|
- vkGetInstanceProcAddr
|
||||||
|
- vkEnumerateInstanceExtensionProperties
|
||||||
|
- vkEnumerateInstanceLayerProperties
|
||||||
|
- vkCreateInstance
|
||||||
|
|
||||||
|
instance
|
||||||
|
|
||||||
|
- vkEnumeratePhysicalDevices
|
||||||
|
- vkEnumerateDeviceExtensionProperties
|
||||||
|
- vkGetPhysicalDeviceFeatures
|
||||||
|
- vkGetPhysicalDeviceProperties
|
||||||
|
- vkGetPhysicalDeviceQueueFamilyProperties
|
||||||
|
- vkGetPhysicalDeviceMemoryProperties
|
||||||
|
- vkGetPhysicalDeviceFormatProperties
|
||||||
|
- vkCreateDevice
|
||||||
|
- vkGetDeviceProcAddr
|
||||||
|
- vkDestroyInstance
|
||||||
|
|
||||||
|
## 接口
|
||||||
|
|
||||||
|
- 加载接口
|
||||||
|
|
||||||
|
```c++
|
||||||
|
//系统接口:加载DLL
|
||||||
|
#if defined _WIN32
|
||||||
|
vulkan_library = LoadLibrary( "vulkan-1.dll" );
|
||||||
|
#elif defined __linux
|
||||||
|
vulkan_library = dlopen( "libvulkan.so.1", RTLD_NOW );
|
||||||
|
#endif
|
||||||
|
//vulkan接口:获取函数指针
|
||||||
|
#if defined _WIN32
|
||||||
|
#define LoadFunction GetProcAddress
|
||||||
|
#elif defined __linux
|
||||||
|
#define LoadFunction dlsym
|
||||||
|
#endif
|
||||||
|
//调用vulkan接口,获取入口函数指针
|
||||||
|
#define EXPORTED_VULKAN_FUNCTION( name ) \
|
||||||
|
name = (PFN_##name)LoadFunction( vulkan_library, #name ); \
|
||||||
|
if( name == nullptr ) { \
|
||||||
|
std::cout << "Could not load exported Vulkan function named: " \
|
||||||
|
#name << std::endl; \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
|
|
||||||
|
//调用vulkan接口,获取全局函数指针
|
||||||
|
#define GLOBAL_LEVEL_VULKAN_FUNCTION( name ) \
|
||||||
|
name = (PFN_##name)vkGetInstanceProcAddr( nullptr, #name ); \
|
||||||
|
if( name == nullptr ) { \
|
||||||
|
std::cout << "Could not load global level Vulkan function named: " \
|
||||||
|
#name << std::endl; \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
|
|
||||||
|
//调用vulkan接口,获取实例函数指针
|
||||||
|
#define INSTANCE_LEVEL_VULKAN_FUNCTION( name ) \
|
||||||
|
name = (PFN_##name)vkGetInstanceProcAddr( instance, #name ); \
|
||||||
|
if( name == nullptr ) { \
|
||||||
|
std::cout << "Could not load instance-level Vulkan function named: " \
|
||||||
|
#name << std::endl; \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
|
|
||||||
|
//调用vulkan接口,获取实例扩展函数指针,需要检查实例扩展是否支持
|
||||||
|
#define INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( name, extension ) \
|
||||||
|
for( auto & enabled_extension : enabled_extensions ) { \
|
||||||
|
if( std::string( enabled_extension ) == std::string( extension ) ) { \
|
||||||
|
name = (PFN_##name)vkGetInstanceProcAddr( instance, #name ); \
|
||||||
|
if( name == nullptr ) { \
|
||||||
|
std::cout << "Could not load instance-level Vulkan function named: " \
|
||||||
|
#name << std::endl; \
|
||||||
|
return false; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
// 调用vulkan接口,获取设备函数指针
|
||||||
|
#define DEVICE_LEVEL_VULKAN_FUNCTION( name ) \
|
||||||
|
name = (PFN_##name)vkGetDeviceProcAddr( logical_device, #name ); \
|
||||||
|
if( name == nullptr ) { \
|
||||||
|
std::cout << "Could not load device-level Vulkan function named: " \
|
||||||
|
#name << std::endl; \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
|
|
||||||
|
// 调用vulkan接口,获取设备扩展函数指针,需要检查设备扩展是否支持
|
||||||
|
#define DEVICE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( name, extension ) \
|
||||||
|
for( auto & enabled_extension : enabled_extensions ) { \
|
||||||
|
if( std::string( enabled_extension ) == std::string( extension ) ) { \
|
||||||
|
name = (PFN_##name)vkGetDeviceProcAddr( logical_device, #name ); \
|
||||||
|
if( name == nullptr ) { \
|
||||||
|
std::cout << "Could not load device-level Vulkan function named: " \
|
||||||
|
#name << std::endl; \
|
||||||
|
return false; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- 销毁接口
|
||||||
|
|
||||||
|
```c++
|
||||||
|
//设备接口,销毁逻辑实例
|
||||||
|
vkDestroyDevice( logical_device, nullptr );
|
||||||
|
|
||||||
|
// 实例接口,销毁实例
|
||||||
|
vkDestroyInstance( instance, nullptr );
|
||||||
|
|
||||||
|
//系统接口,销毁dll
|
||||||
|
#if defined _WIN32
|
||||||
|
FreeLibrary( vulkan_library );
|
||||||
|
#elif defined __linux
|
||||||
|
dlclose( vulkan_library );
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- vulkan 接口
|
||||||
|
|
||||||
|
```c++
|
||||||
|
//入口接口,获取其他接口地址
|
||||||
|
EXPORTED_VULKAN_FUNCTION( vkGetInstanceProcAddr );
|
||||||
|
|
||||||
|
//全局接口
|
||||||
|
//获取支持的实例扩展列表,调用两次,一次获取大小,一次获取数据
|
||||||
|
GLOBAL_LEVEL_VULKAN_FUNCTION( vkEnumerateInstanceExtensionProperties );
|
||||||
|
GLOBAL_LEVEL_VULKAN_FUNCTION( vkEnumerateInstanceLayerProperties );
|
||||||
|
//先检查实例扩展,再创建实例,才能调用实例接口
|
||||||
|
GLOBAL_LEVEL_VULKAN_FUNCTION( vkCreateInstance );
|
||||||
|
|
||||||
|
//实例接口
|
||||||
|
//获取物理设备,调用两次,一次获取大小,一次获取数据
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkEnumeratePhysicalDevices );
|
||||||
|
//获取物理设备支持的扩展,调用两次,一次获取大小,一次获取数据
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkEnumerateDeviceExtensionProperties );
|
||||||
|
//获取物理设备支持的功能
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkGetPhysicalDeviceFeatures );
|
||||||
|
//获取物理设备的基础属性
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkGetPhysicalDeviceProperties );
|
||||||
|
//获取物理设备支持的队列属性,不同队列有不同功能
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkGetPhysicalDeviceQueueFamilyProperties );
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkGetPhysicalDeviceMemoryProperties );
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkGetPhysicalDeviceFormatProperties );
|
||||||
|
//创建逻辑设备 需要检查扩展、功能、命令队列
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkCreateDevice );
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkGetDeviceProcAddr );
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION( vkDestroyInstance );
|
||||||
|
|
||||||
|
//实例扩展接口,需要先开启扩展
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkGetPhysicalDeviceSurfaceSupportKHR, VK_KHR_SURFACE_EXTENSION_NAME );
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkGetPhysicalDeviceSurfaceCapabilitiesKHR, VK_KHR_SURFACE_EXTENSION_NAME );
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkGetPhysicalDeviceSurfaceFormatsKHR, VK_KHR_SURFACE_EXTENSION_NAME );
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkGetPhysicalDeviceSurfacePresentModesKHR, VK_KHR_SURFACE_EXTENSION_NAME );
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkDestroySurfaceKHR, VK_KHR_SURFACE_EXTENSION_NAME );
|
||||||
|
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkCreateWin32SurfaceKHR, VK_KHR_WIN32_SURFACE_EXTENSION_NAME );
|
||||||
|
#elif defined VK_USE_PLATFORM_XCB_KHR
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkCreateXcbSurfaceKHR, VK_KHR_XCB_SURFACE_EXTENSION_NAME );
|
||||||
|
#elif defined VK_USE_PLATFORM_XLIB_KHR
|
||||||
|
INSTANCE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkCreateXlibSurfaceKHR, VK_KHR_XLIB_SURFACE_EXTENSION_NAME );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//设备接口
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkGetDeviceQueue );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDeviceWaitIdle );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyDevice );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateBuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkGetBufferMemoryRequirements );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkAllocateMemory );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkBindBufferMemory );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdPipelineBarrier );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateImage );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkGetImageMemoryRequirements );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkBindImageMemory );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateImageView );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkMapMemory );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkFlushMappedMemoryRanges );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkUnmapMemory );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdCopyBuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdCopyBufferToImage );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdCopyImageToBuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkBeginCommandBuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkEndCommandBuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkQueueSubmit );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyImageView );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyImage );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyBuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkFreeMemory );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateCommandPool );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkAllocateCommandBuffers );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateSemaphore );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateFence );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkWaitForFences );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkResetFences );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyFence );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroySemaphore );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkResetCommandBuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkFreeCommandBuffers );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkResetCommandPool );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyCommandPool );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateBufferView );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyBufferView );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkQueueWaitIdle );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateSampler );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateDescriptorSetLayout );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateDescriptorPool );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkAllocateDescriptorSets );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkUpdateDescriptorSets );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdBindDescriptorSets );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkFreeDescriptorSets );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkResetDescriptorPool );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyDescriptorPool );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyDescriptorSetLayout );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroySampler );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateRenderPass );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateFramebuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyFramebuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyRenderPass );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdBeginRenderPass );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdNextSubpass );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdEndRenderPass );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreatePipelineCache );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkGetPipelineCacheData );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkMergePipelineCaches );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyPipelineCache );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateGraphicsPipelines );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateComputePipelines );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyPipeline );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyEvent );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyQueryPool );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreateShaderModule );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyShaderModule );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCreatePipelineLayout );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkDestroyPipelineLayout );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdBindPipeline );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdSetViewport );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdSetScissor );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdBindVertexBuffers );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdDraw );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdDrawIndexed );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdDispatch );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdCopyImage );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdPushConstants );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdClearColorImage );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdClearDepthStencilImage );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdBindIndexBuffer );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdSetLineWidth );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdSetDepthBias );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdSetBlendConstants );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdExecuteCommands );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION( vkCmdClearAttachments );
|
||||||
|
|
||||||
|
//设备扩展接口,需要先开启扩展
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkCreateSwapchainKHR, VK_KHR_SWAPCHAIN_EXTENSION_NAME );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkGetSwapchainImagesKHR, VK_KHR_SWAPCHAIN_EXTENSION_NAME );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkAcquireNextImageKHR, VK_KHR_SWAPCHAIN_EXTENSION_NAME );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkQueuePresentKHR, VK_KHR_SWAPCHAIN_EXTENSION_NAME );
|
||||||
|
DEVICE_LEVEL_VULKAN_FUNCTION_FROM_EXTENSION( vkDestroySwapchainKHR, VK_KHR_SWAPCHAIN_EXTENSION_NAME );
|
||||||
|
```
|
||||||
|
|
||||||
@ -243,4 +243,4 @@ curl-ca-bundle.crt
|
|||||||
|
|
||||||
## curl 慢
|
## curl 慢
|
||||||
|
|
||||||
连 strong vpn 就行
|
连 vpn
|
||||||
@ -1,3 +1,33 @@
|
|||||||
|
# 自定义
|
||||||
|
```lua
|
||||||
|
package("libgo")
|
||||||
|
set_homepage("https://github.com/yyzybb537/libgo")
|
||||||
|
|
||||||
|
set_description("libgo -- a coroutine library and a parallel Programming Library")
|
||||||
|
|
||||||
|
set_license("MIT")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
add_urls("https://github.com/yyzybb537/libgo/archive/$(version).tar.gz")
|
||||||
|
|
||||||
|
add_urls("https://github.com/yyzybb537/libgo.git")
|
||||||
|
|
||||||
|
--计算add_versions值
|
||||||
|
--版本号来自github,下载tar.gz源文件 计算哈希值
|
||||||
|
--xmake l hash.sha256 libgo-2.6.tar.gz
|
||||||
|
add_versions("v2.6", "c194aa96c424cb0e41e44a32fd87e46d87832c514aba579872faff29ef5e9011")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
add_deps("cmake")
|
||||||
|
|
||||||
|
on_install("macosx", "linux", "windows", "mingw", "android", "iphoneos", function (package)
|
||||||
|
|
||||||
|
import("package.tools.cmake").install(package)
|
||||||
|
|
||||||
|
end)
|
||||||
|
```
|
||||||
# LUA
|
# LUA
|
||||||
|
|
||||||
## luasocket
|
## luasocket
|
||||||
@ -34,7 +64,6 @@ package("luasocket")
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## lua-protobuf
|
## lua-protobuf
|
||||||
|
|
||||||
# C++
|
# C++
|
||||||
33
src/z/zfile/序列化.md
Normal file
33
src/z/zfile/序列化.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
tags:
|
||||||
|
creation date: 2023-09-05 10:41
|
||||||
|
modification date: 星期二 5日 九月 2023 10:41:01
|
||||||
|
---
|
||||||
|
## 对象类型
|
||||||
|
### 集中型
|
||||||
|
- 如磁盘文件、网络通信
|
||||||
|
- 数据紧凑,代价小,不易修改
|
||||||
|
- 对可变子对象修改成本大,需要重新生成整个文件
|
||||||
|
- 需要额外的辅助信息解析对象,如字符串长度、数组大小
|
||||||
|
### 分散型
|
||||||
|
- 如内存对象
|
||||||
|
- 数据分散,代价大,易修改
|
||||||
|
- 申请内存,会有额外负担,还易造成内存碎片
|
||||||
|
## 对象描述
|
||||||
|
### 集中型
|
||||||
|
- 字符串
|
||||||
|
### 分散型
|
||||||
|
- 一个类可以描述一类对象
|
||||||
|
- xml、json 可描述的对象范围更大
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 大小端
|
||||||
|
|
||||||
|
数据从低地址向高地址无限存储
|
||||||
|
|
||||||
|
高位在前就是大端,低位在前就是小端
|
||||||
|
|
||||||
|
大端高位是0易被压缩,小端CPU计算更方便
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user