#pragma once namespace frostbite2D { /** * @brief 2D 渲染风格预设 ID */ enum class RenderStyleProfileId { PixelArt2D, ///< 世界与 UI 都按像素风策略渲染 Smooth2D, ///< 世界与 UI 都按平滑 2D 策略渲染 Hybrid2D ///< 世界走像素风,UI 走平滑策略 }; /** * @brief 渲染风格作用层级 */ enum class RenderStyleLayerRole { World, ///< 世界层,如地图、角色、场景特效 UI ///< UI 层,如 HUD、菜单、文字 }; /** * @brief 单个层级的渲染风格开关集合 */ struct RenderStyleLayerSettings { bool cameraPixelSnap = false; ///< 是否让相机位置吸附到像素网格 bool vertexPixelSnap = false; ///< 是否让世界顶点在提交前做像素对齐 bool pixelArtSampling = false; ///< 是否优先使用像素风采样(如 GL_NEAREST) bool shrinkSubTextureUVs = false; ///< 是否对子纹理 UV 做向内收缩,减轻图集边缘闪烁 }; /** * @brief 一套完整的 2D 渲染风格设置 */ struct RenderStyleSettings { RenderStyleLayerSettings world; ///< 世界层使用的渲染风格 RenderStyleLayerSettings ui; ///< UI 层使用的渲染风格 /** * @brief 根据预设 ID 生成对应的渲染风格 */ static RenderStyleSettings FromProfile(RenderStyleProfileId profile) { RenderStyleSettings settings; switch (profile) { case RenderStyleProfileId::PixelArt2D: settings.world = {true, true, true, true}; settings.ui = {true, true, true, true}; break; case RenderStyleProfileId::Smooth2D: settings.world = {false, false, false, false}; settings.ui = {false, false, false, false}; break; case RenderStyleProfileId::Hybrid2D: default: settings.world = {true, true, true, true}; settings.ui = {false, false, false, false}; break; } return settings; } /** * @brief 获取指定层级对应的风格设置 */ const RenderStyleLayerSettings& layer(RenderStyleLayerRole role) const { return role == RenderStyleLayerRole::UI ? ui : world; } }; } // namespace frostbite2D