This commit is contained in:
sin365 2024-08-08 16:48:47 +08:00
parent d553052006
commit bfc8651b1e

View File

@ -1,21 +1,64 @@
# MAME.Core
## MAME.Core
一个MAME模拟器核心的现代化.Net版本移植作为独立模拟器核心但是.NetStandard 2.0)
移植的目的是便于用于Unity Godot Stride MonoGame FNA 等跨平台的游戏引擎,并运行在不同平台
移植的目的是便于用于Unity Godot Stride MonoGame FNA 等跨平台的游戏引擎,并运行在不同平台
所以要脱离WinForm或者说Windows。
目前大部分已经移植原始有些静态变量是放在Form做GDI。这些我基本已经解耦
然后把Mouse Keyboard Input Video Sound接口化了不依赖DX的
变成一个MAME模拟器核心类库。并尝开发联机功能
MAME.Core 接口化的核心。算一个真正的泛用型.Net/mono 任意生态版本 可用的MAME核心库。性能卓越。
原项目gdi的扩展类里都是Bitmap用unsafe处理指针来填充RGBA
这部分我已经做到脱离System.Drawing(脱离平台依赖)重写BitmapData的逻辑使其可以跨平台
并且最终会接入HaoYueNet高性能网络库
git.axibug.com/sin365/MAME.Core
总之 ,研究过程很欢乐。
[HaoYueNet-Github](https://github.com/Sin365/HaoYueNet "HaoYueNet-Github")
# References
自己开发联机功能。
## MAME.Core 项目说明
原项目将MAME C++翻译为C#的一个Windows下的WinForm项目
高度依赖Windows、WinForm、Win32APITick、System.Drawing、BitmapDirectX音/视频
有些静态变量是放在Form做GDIgdi的扩展类里都是Bitmap用unsafe处理指针来填充RGBA。
本项目(MAME.Core)中 **已经完全脱离如上依赖** ,并将一切标准化,去掉和整理好一切不规范的部分。
是一个标准的.Net Standard 2.0 库。无障碍跨平台。
接口抽象化IKeyboard、ILog、IMouse、IResources、ISoundPlayer、IVideoPlayer
抽象枚举MotionKey
资源加载设置按键映射音视频接入可以自由自定义接入任何C#生态的平台。
btw总所周知街机游戏已经有类似现代的场景和摄像机的概念
比如CPS1 实际逻辑绘制的画布场景是512x512实际显示区域类似摄像机概念只有其中384*224
在完美显示必要内容时不再使用Clone的方式重写而是像素矩阵绘制时那么我们需要扣出中间那部分。
最高效率的数据读取设计模式,就是直接不拷贝。
MAME.Core中通过计算的方式仅处理显示区域的颜色。
并在提交颜色int[]时额外提供了GC固定维护的安全Ptr非unsafe甚至可以做到显示GPU提交直通。
模拟器核心中的颜色缓冲的指针引用直接提交给外部GPU DrawCall如Unity接入可以用于直接映射Texture
**效率极佳**没有新的内存对象无GC。
## MAME.Unity 项目说明
是基于MAME.Core在Unity中的实现
如上所说,加上对色彩通道和精度的合理对齐,视频非常高效的显示。音频也处理得较为完备。
PC和Android已经就比较好的实现。
目前有一个简易的游戏选择器Android制作了虚拟按键。
下一步是接入PSVPS3等游戏机往跨平台联机靠拢。
## References
shunninghuang - https://www.codeproject.com/Articles/1275365/The-Main-Architecture-of-MAME-NET