mkxp-sunshine/binding-mri/chroma-binding.cpp
Issac332 5a337f173b windows build fix
Я не знаю на сколько игра будет корректно работать в будущем с этими изменениями, но по крайней мере я добился того что бы оно хотя бы сбилдилось на винде под винду

билдинг я проводил из под msys2 с помощью ninja(make у меня почему то запускал обычный cmd):
Запускал `cmake` с аргументами `cmake -B build/ -G Ninja`(правда мне ещё пришлось указать путь до xxd, но скорее всего это я где то накосячил) и после `ninja` в `/build`
2026-04-28 19:02:02 +03:00

97 lines
2.5 KiB
C++

#include "binding-util.h"
#include "binding-types.h"
#include "debugwriter.h"
#include "chromasdk/ChromaApi.h"
bool INIT_SUCCESS = false;
#ifdef _WIN32
HINSTANCE hLib = NULL;
#else
int* hLib = NULL;
#endif
//dynamic-loaded proc pointers
PluginPlayAnimation _playAnimation = NULL;
PluginOpenAnimation _openAnimation = NULL;
PluginIsInitialized _pluginIsInitialized = NULL;
PluginInit _pluginInit = NULL;
PluginUninit _pluginUninit = NULL;
int lastAnimId = -1;
void _attemptLinkSdk() {
Debug() << "Attempting to bind Chroma SDK";
#ifdef _WIN32
hLib = LoadLibrary(L"ChromaApi.dll");
if (hLib != NULL) {
Debug() << "Chroma Impl @" << hLib;
INIT_SUCCESS = true;
_playAnimation = (PluginPlayAnimation) GetProcAddress(hLib, "PluginPlayAnimation");
INIT_SUCCESS &= _playAnimation != NULL;
Debug() << "Plugin method @" << reinterpret_cast<void*>(_playAnimation);
_openAnimation = (PluginOpenAnimation) GetProcAddress(hLib, "PluginOpenAnimation");
INIT_SUCCESS &= _openAnimation != NULL;
_pluginInit = (PluginInit) GetProcAddress(hLib, "PluginInit");
INIT_SUCCESS &= _pluginInit != NULL;
_pluginIsInitialized = (PluginIsInitialized) GetProcAddress(hLib, "PluginIsInitialized");
INIT_SUCCESS &= _pluginInit != NULL;
if (INIT_SUCCESS && !_pluginIsInitialized()) {
Debug() << "Initializing chroma plugin";
_pluginInit();
}
_pluginUninit = (PluginUninit) GetProcAddress(hLib, "PluginUninit");
INIT_SUCCESS &= _pluginUninit != NULL;
Debug() << "Plugin init success:" << INIT_SUCCESS;
}
#else
// Currently the Razor Chroma API is Windows-only.
// So, if we are not building for Windows platform,
// then don't bother with Chroma stuff.
Debug() << "Chroma: Unsupported Platform";
#endif
}
RB_METHOD(chromaPlayAnimation) {
RB_UNUSED_PARAM;
Debug() << "Chroma: Attempting to play animation.";
const char* animfile;
bool loop;
rb_get_args(argc, argv, "zb", &animfile, &loop RB_ARG_END);
if (INIT_SUCCESS) {
Debug() << "Opening animation:" << animfile;
lastAnimId = _openAnimation(animfile);
Debug() << "ID:" << lastAnimId;
_playAnimation(lastAnimId);
}
return Qnil;
}
void chromaBindingInit() {
_attemptLinkSdk();
VALUE module = rb_define_module("Chroma");
_rb_define_module_function(module, "playAnim", chromaPlayAnimation);
}
void chromaBindingRelease() {
#ifdef _WIN32
if (hLib != NULL) {
_pluginUninit();
FreeLibrary(hLib);
hLib = NULL;
INIT_SUCCESS = false;
}
#endif
}