#ifndef RAGNAROK_SOURCE_CONTENTS_CONFIGURATION_GRAPHICSCONFIGURATION_H #define RAGNAROK_SOURCE_CONTENTS_CONFIGURATION_GRAPHICSCONFIGURATION_H #include "Contents/Configuration/OptionWriter.h" #include "Contents/Configuration/ScriptOptions.h" #include "Render/RenderAdapter.h" #include "Script/LuaScript.h" #include #include struct GraphicsConfiguration { GUID drawGuid; GUID renderGuid; int fullscreen; int width; int height; int bitsPerPixel; int oldWidth; int oldHeight; int reset; int backend; GUID deviceGuid; char deviceName[32]; void Load(LuaScript& script, ScriptOptions& options, int& screenWidth, int& screenHeight); AdapterConfiguration Adapter() const; void Save(OptionWriter& output) const; }; // INLINED inline void GraphicsConfiguration::Load(LuaScript& script, ScriptOptions& options, int& screenWidth, int& screenHeight) { const int resetPolicy = std::max(script.GlobalInteger("RenderSystemReset"), 0); const int backendPolicy = std::max(script.GlobalInteger("RenderSystemDefault"), 0); this->reset = options.Integer("RenderSystemReset", 1); if (this->reset != resetPolicy) { this->backend = backendPolicy; this->reset = resetPolicy; } else { this->backend = options.Integer("RENDERSYSTEM", backendPolicy); } this->deviceGuid = options.Guid("DX9DEVICEID", GUID{}); const std::string name = options.String("DX9DEVICENAME", ""); strncpy_s(this->deviceName, sizeof(this->deviceName), name.c_str(), _TRUNCATE); this->fullscreen = options.Integer("ISFULLSCREENMODE", 0); this->width = options.Integer("WIDTH", 1024); this->height = options.Integer("HEIGHT", 768); this->oldWidth = options.Integer("OLD_WIDTH", 0); this->oldHeight = options.Integer("OLD_HEIGHT", 0); if (static_cast(this->height) < 664) { this->width = 1024; this->height = 768; } screenWidth = this->width; screenHeight = this->height; this->bitsPerPixel = options.Integer("BITPERPIXEL", 16); OSVERSIONINFOA version{}; version.dwOSVersionInfoSize = sizeof(version); GetVersionExA(&version); if (version.dwMajorVersion >= 6 && version.dwMinorVersion >= 2) { this->bitsPerPixel = 32; } } // INLINED inline AdapterConfiguration GraphicsConfiguration::Adapter() const { return {this->backend, this->drawGuid, this->renderGuid, this->deviceGuid, this->deviceName}; } // INLINED inline void GraphicsConfiguration::Save(OptionWriter& output) const { output.Integer("RenderSystemReset", this->reset); output.Integer("RENDERSYSTEM", this->backend); output.Guid("DX9DEVICEID", this->deviceGuid); output.String("DX9DEVICENAME", this->deviceName); output.Integer("ISFULLSCREENMODE", this->fullscreen); output.Integer("WIDTH", this->width); output.Integer("HEIGHT", this->height); output.Integer("OLD_WIDTH", this->width); output.Integer("OLD_HEIGHT", this->height); output.Integer("BITPERPIXEL", this->bitsPerPixel); } #endif