MiMoEngine ASM: x86-64 MASM汇编+C混合架构游戏引擎
核心热路径(数学/内存/字符串/性能分析)用MASM汇编(SSE/AVX2) 外围系统(窗口/渲染/ECS/音频/UI/脚本)用C语言 含自研编辑器、VisualScript积木编程、中文渲染(glyph_atlas)
This commit is contained in:
commit
2d56cb3bc9
91 files changed
+9988
No files matched your search
@@ -0,0 +1,157 @@
|
||||
// ============================================================================
|
||||
// engine.c - 引擎核心实现
|
||||
// ============================================================================
|
||||
|
||||
#include "engine.h"
|
||||
#include "logger.h"
|
||||
#include "timer.h"
|
||||
#include "../Window/window.h"
|
||||
#include "../include/engine_api.h"
|
||||
#include <stdlib.h>
|
||||
#include <Windows.h>
|
||||
|
||||
// 引擎实例 (单例)
|
||||
static Engine g_engine = {0};
|
||||
|
||||
// 回调
|
||||
static EngineUpdateCallback g_update_callback = NULL;
|
||||
static EngineRenderCallback g_render_callback = NULL;
|
||||
static EngineKeyCallback g_key_callback = NULL;
|
||||
static EngineResizeCallback g_resize_callback = NULL;
|
||||
|
||||
// 内部函数
|
||||
static void on_key(int key) {
|
||||
if (g_key_callback) {
|
||||
g_key_callback(&g_engine, key);
|
||||
}
|
||||
if (key == VK_ESCAPE) {
|
||||
engine_request_quit(&g_engine);
|
||||
}
|
||||
}
|
||||
|
||||
static void on_resize(int width, int height) {
|
||||
if (g_resize_callback) {
|
||||
g_resize_callback(&g_engine, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
Engine* engine_create(void) {
|
||||
return &g_engine;
|
||||
}
|
||||
|
||||
void engine_destroy(Engine* engine) {
|
||||
if (engine) {
|
||||
engine_shutdown(engine);
|
||||
}
|
||||
}
|
||||
|
||||
int engine_init(Engine* engine, const EngineConfig* config) {
|
||||
if (engine->initialized) return 1;
|
||||
|
||||
engine->config = *config;
|
||||
|
||||
// 初始化日志
|
||||
logger_init("engine.log");
|
||||
LOG_INFO("Initializing MiMo Engine ASM...");
|
||||
|
||||
// 初始化计时器
|
||||
timer_init();
|
||||
|
||||
// 创建窗口
|
||||
engine->window = window_create(
|
||||
config->app_name,
|
||||
config->window_width,
|
||||
config->window_height,
|
||||
config->fullscreen
|
||||
);
|
||||
|
||||
if (!engine->window) {
|
||||
LOG_ERROR("Failed to create window!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 设置回调
|
||||
window_set_key_callback(engine->window, on_key);
|
||||
window_set_resize_callback(engine->window, on_resize);
|
||||
|
||||
LOG_INFO("Window created: %dx%d", config->window_width, config->window_height);
|
||||
|
||||
engine->initialized = 1;
|
||||
engine->running = 1;
|
||||
engine->frame_count = 0;
|
||||
|
||||
LOG_INFO("MiMo Engine ASM initialized successfully.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
void engine_run(Engine* engine) {
|
||||
if (!engine->initialized) {
|
||||
LOG_ERROR("Engine not initialized!");
|
||||
return;
|
||||
}
|
||||
|
||||
while (engine->running) {
|
||||
// 处理窗口消息
|
||||
if (!window_process_messages(engine->window)) {
|
||||
engine->running = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
// 更新计时
|
||||
timer_tick();
|
||||
engine->delta_time = timer_get_delta();
|
||||
engine->total_time = timer_get_total();
|
||||
engine->frame_count++;
|
||||
|
||||
// 用户更新
|
||||
if (g_update_callback) {
|
||||
g_update_callback(engine, engine->delta_time);
|
||||
}
|
||||
|
||||
// 用户渲染
|
||||
if (g_render_callback) {
|
||||
g_render_callback(engine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void engine_shutdown(Engine* engine) {
|
||||
if (!engine->initialized) return;
|
||||
|
||||
LOG_INFO("Shutting down MiMo Engine ASM...");
|
||||
|
||||
if (engine->renderer) {
|
||||
// renderer_destroy(engine->renderer);
|
||||
engine->renderer = NULL;
|
||||
}
|
||||
|
||||
if (engine->window) {
|
||||
window_destroy(engine->window);
|
||||
engine->window = NULL;
|
||||
}
|
||||
|
||||
logger_shutdown();
|
||||
engine->initialized = 0;
|
||||
engine->running = 0;
|
||||
}
|
||||
|
||||
void engine_request_quit(Engine* engine) {
|
||||
engine->running = 0;
|
||||
}
|
||||
|
||||
// 回调设置
|
||||
void engine_set_update_callback(Engine* engine, EngineUpdateCallback callback) {
|
||||
g_update_callback = callback;
|
||||
}
|
||||
|
||||
void engine_set_render_callback(Engine* engine, EngineRenderCallback callback) {
|
||||
g_render_callback = callback;
|
||||
}
|
||||
|
||||
void engine_set_key_callback(Engine* engine, EngineKeyCallback callback) {
|
||||
g_key_callback = callback;
|
||||
}
|
||||
|
||||
void engine_set_resize_callback(Engine* engine, EngineResizeCallback callback) {
|
||||
g_resize_callback = callback;
|
||||
}
|
||||
Reference in new issue
Block a user