LOADING

加载过慢请开启缓存 浏览器默认开启

按键和鼠标代码

笔记12 按键和鼠标代码

需要将glfw的键码提出来放在平台层,创建属于引擎的键码,然后在不同的平台的实现文件做出转换键码。

这就像imgui呗,里面好多有imgui专属的键码,到了imgui_glfw内部还需要转换,glfw需要把自己的转换为imgui专属键码。

就是简单定义了HAZEL内部的键码,至于过多的转换等等,还没涉及。可能后面会补上。

暂且定义的宏还是从glfw的映射码一摸一样。

//KeyCodes.h

#pragma once

/* From glfw3.h */
#define HZ_KEY_SPACE              32
#define HZ_KEY_APOSTROPHE         39  /* ' */
#define HZ_KEY_COMMA              44  /* , */
#define HZ_KEY_MINUS              45  /* - */
#define HZ_KEY_PERIOD             46  /* . */
#define HZ_KEY_SLASH              47  /* / */
#define HZ_KEY_0                  48
#define HZ_KEY_1                  49
#define HZ_KEY_2                  50
#define HZ_KEY_3                  51
...
...
//MouseButtonCodes.h

#pragma once

//from glfw3.h
#define HZ_MOUSE_BUTTON_1         0
#define HZ_MOUSE_BUTTON_2         1
#define HZ_MOUSE_BUTTON_3         2
#define HZ_MOUSE_BUTTON_4         3
...
...

glm数学库

为了写好一个数学库常用到SIMD

SIMD(Single Instruction, Multiple Data,即单指令多数据)是一种并行计算技术,用于在单条指令中同时对多个数据元素执行相同的操作。

SIMD通常通过向量寄存器实现。这些寄存器可以存储多个数据元素(如 4 个 32 位浮点数),而SIMD指令集会直接对这些向量寄存器操作。

SIMD 指令集

现代 CPU 提供了多个 SIMD 指令集,常见的包括:

  • SSE(Streaming SIMD Extensions):由英特尔引入,最早在 Pentium III 处理器中出现,支持 128 位寄存器,可以操作多个单精度或双精度浮点数。
  • AVX(Advanced Vector Extensions):在 SSE 的基础上扩展了 256 位的寄存器,提高了并行处理能力。AVX 后续版本(如 AVX2 和 AVX-512)进一步提升了并行能力。
  • NEON:ARM 处理器的 SIMD 指令集,主要用于移动设备和嵌入式系统,支持 128 位寄存器。
  • Altivec/VMX:IBM 的 SIMD 指令集,最早在 PowerPC 架构中引入,具有 128 位寄存器。

SIMD 的优缺点

优点:

  • 高效并行:在需要对大量数据进行相同操作时,能有效提升性能。
  • 低延迟:相较于传统的循环结构,SIMD 能减少数据访问和指令执行的时间。

缺点:

  • 数据依赖:只能处理相同类型、相同操作的数据,不适合对不同数据执行不同操作的情况。
  • 硬件限制:不同处理器的 SIMD 指令集有所不同,代码的移植性可能受到影响。
  • 编程复杂性:手动编写 SIMD 代码较为复杂,开发者需要了解底层指令集和寄存器操作。

glm只需要将文件路径添加到Hazel项目和Sandbox库里面就行了,同时将文件加载到Hazel里面,只有hpp文件和内联文件

image-20241110205349979

想让实现对应的矩阵显示在imgui中供调试者。