dl
dl_factory_imp.h
浏览该文件的文档.
1
10#pragma once
11
12#include "dl_model_cache.h"
14#include "dl_font.h"
15#include "dl_render_def.h"
16
17
18namespace dl
19{
20class Model;
23{
24public:
25 //--------------------------------Model------------------------------
26 //返回模型id,失败返回0为默认
27 size_t _get_model_id(std::string_view name)
28 {
29 auto iter = _mapName2Model.find(std::string{ name });
30 if (iter == _mapName2Model.end())
31 {
32 log_warn("未知模型名称: {}", name);
33 return 0;
34 }
35 return iter->second;
36 }
37 // 创建 模型蒙皮动画实例,没有返回nullptr
39
40 std::unordered_map<std::string, std::size_t> _mapName2Model;//模型名字 -> id
41 ModelCache _modelCache;//模型缓存信息
42
43 //---------------------------Sprite----------------------------
44 // {文件路径, meta} -> 多个{文件路径, index, rect, anchor}
45 struct SheetNode
46 {
47 std::string _pathName;//图像路径
48 std::size_t _index; // 在图像的编号(根据meta文件,自动拆分或手动指定的编号)
49 RectU _rect; // 在图像的区域
50 Position _anchor; // 锚点
51 Color _color; // 默认精灵颜色
52 };
53 // 合并图集时生成 vector下标为所在纹理
55 {
57 PointU _lt;//所在纹理位置
58 };
59 //精灵信息(创建一个精灵必要的信息,通过SpriteID获得)
61 {
62 RectU _rect; // 在大图区域(不包含border)
63 UV _uv[4]; // 计算出的uv
64 Color _color; // 默认颜色
65 Position _anchor; // 锚点
66 bool _bRightAngle; // 是否顺时针旋转过(只影响uv)
67 };
68 // 一个图片路径生成的所有精灵信息
70 {
71 SpriteID _idTrans;// 半透明图像注册起始 id
72 // {SpriteID} -> {SpriteInfo}
73 std::vector<std::vector<SpriteInfo>> _allSpriteInfo;
74 // {精灵图像名字,精灵下标} -> {SpriteID}
75 std::unordered_map<std::string, std::vector<SpriteID>> _mapName2SpriteID;
76 };
77
78 // 所有子图像组 合并后的(动态生成)
80
81 SpriteID _idTrans;// 半透明图像注册起始 id
82 SpriteID _idSolid;// 纯色 id
83 SpriteID _idSolidTrans;// 半透明纯色 id
84 size_t _numTexStatic;// 静态纹理数量
85
86 // 计算uv
87 void _rect_to_uv(const RectU& rect, UV* uv, bool right_angle = false);
88
89 // 返回精灵信息,失败返回nullptr
91 {
92 if (spr_id._tex < _sprGroup._allSpriteInfo.size())
93 {
94 auto& iter = _sprGroup._allSpriteInfo[spr_id._tex];
95 if (spr_id._rect < iter.size())
96 return &iter[spr_id._rect];
97 }
98 return nullptr;
99 }
100
101 //----------------------------Text--------------------------
102 //字符精灵
104 {
105 struct Data
106 {
107 size_t _idTex;
108 size_t _idRect;
109 Position _uv[4];//计算出的uv
110 }_data[2];//非描边 和 描边
111 Position _anchor;//锚点(相对于基线)
112 float _advance;//步进
113 };
114 // CharInfo -> CharSprite
115 std::unordered_map<CharInfo, CharSprite, CharInfoHash> _hashCharImage;
116
118 // 动态纹理使用区域
119 std::vector<TexPack> _allTexPack;
120 std::vector<std::vector<RectU>> _allTexRect;
121
122 // 注册一个图像
123 // 返回 id_tex和 id_rect
124 // 绘制之前批量提交
125 bool _reg_image(Image* image, unsigned border, bool border_fill, size_t& id_tex, size_t& id_rect);
126
127 // 更新纹理区域(传入)
128 bool _update_image(Image* image, unsigned border, size_t id_tex, size_t id_rect);
129
130 // 返回纹理rect(包含border)
131 RectU _get_rect_border(size_t id_tex, size_t id_rect)
132 {
133 if (id_tex < _numTexStatic)
134 {
135 return _sprGroup._allSpriteInfo[id_tex][id_rect]._rect;
136 }
137 return _allTexRect[id_tex - _numTexStatic][id_rect];
138 }
139 // 返回纹理rect(不包含border)
140 RectU _get_rect(size_t id_tex, size_t id_rect, unsigned border)
141 {
142 RectU ret = _get_rect_border(id_tex, id_rect);
143 ret.left += border;
144 ret.right -= border;
145 ret.top += border;
146 ret.bottom -= border;
147 return ret;
148 }
149};
150
151}
size_t _get_model_id(std::string_view name)
std::unordered_map< CharInfo, CharSprite, CharInfoHash > _hashCharImage
ModelAnimationInstance * _create_model_bone_animation(std::string_view name)
void _rect_to_uv(const RectU &rect, UV *uv, bool right_angle=false)
bool _reg_image(Image *image, unsigned border, bool border_fill, size_t &id_tex, size_t &id_rect)
std::vector< TexPack > _allTexPack
SpriteInfo * _get_sprite_info(const SpriteID &spr_id)
std::vector< std::vector< RectU > > _allTexRect
std::unordered_map< std::string, std::size_t > _mapName2Model
bool _update_image(Image *image, unsigned border, size_t id_tex, size_t id_rect)
TexturePack::Dynamic< SIZE_TEXTURE_PACK_DH > TexPack
RectU _get_rect(size_t id_tex, size_t id_rect, unsigned border)
RectU _get_rect_border(size_t id_tex, size_t id_rect)
动态装箱(DH为2时,32、31、30会放到同一行)
字体解析结构
#define log_warn(...)
用于保存模型文件信息,检查修改,加快加载
绘图相关常量定义
纹理打包(装箱算法)
Position2 Position
Array< float, 2 > UV
Point2U PointU
Array< float, 4 > Color
Vector2< uint32_t, unsigned > Image
Point4U RectU
struct dl::FactoryImp::CharSprite::Data _data[2]
std::unordered_map< std::string, std::vector< SpriteID > > _mapName2SpriteID
std::vector< std::vector< SpriteInfo > > _allSpriteInfo
std::size_t _tex
纹理下标 或 RenderTarget下标(由_bRenderTarget控制)
std::size_t _rect
区域下标