* Update the font map with the specified parameters. The parameters are consumed and should not be read after this call. * @param font_map Font map handle * @param params Parameters to update * @return result true if the font map was created correctly */
| 172 | * @return result true if the font map was created correctly |
| 173 | */ |
| 174 | static bool SetFontMap(HFontMap font_map, dmRender::HRenderContext render_context, dmGraphics::HContext graphics_context, FontMapParams& params) |
| 175 | { |
| 176 | font_map->m_FontCollection = params.m_FontCollection; |
| 177 | font_map->m_NameHash = params.m_NameHash; |
| 178 | font_map->m_Size = params.m_Size; |
| 179 | font_map->m_ShadowX = params.m_ShadowX; |
| 180 | font_map->m_ShadowY = params.m_ShadowY; |
| 181 | font_map->m_MaxAscent = params.m_MaxAscent; |
| 182 | font_map->m_MaxDescent = params.m_MaxDescent; |
| 183 | font_map->m_SdfSpread = params.m_SdfSpread; |
| 184 | font_map->m_SdfOutline = params.m_SdfOutline; |
| 185 | font_map->m_SdfShadow = params.m_SdfShadow; |
| 186 | font_map->m_Alpha = params.m_Alpha; |
| 187 | font_map->m_OutlineAlpha = params.m_OutlineAlpha; |
| 188 | font_map->m_ShadowAlpha = params.m_ShadowAlpha; |
| 189 | font_map->m_LayerMask = params.m_LayerMask; |
| 190 | font_map->m_IsMonospaced = params.m_IsMonospaced; |
| 191 | font_map->m_IsDynamic = params.m_IsDynamic; |
| 192 | font_map->m_Padding = params.m_Padding; |
| 193 | |
| 194 | font_map->m_OnGlyphCacheMiss = params.m_OnGlyphCacheMiss; |
| 195 | font_map->m_OnGlyphCacheMissContext = params.m_OnGlyphCacheMissContext; |
| 196 | |
| 197 | // Is the cache allowed to grow? |
| 198 | font_map->m_DynamicCacheSize = params.m_CacheWidth < params.m_CacheMaxWidth || params.m_CacheHeight < params.m_CacheMaxHeight; |
| 199 | font_map->m_CacheWidth = params.m_CacheWidth; |
| 200 | font_map->m_CacheHeight = params.m_CacheHeight; |
| 201 | font_map->m_CacheMaxWidth = params.m_CacheMaxWidth; |
| 202 | font_map->m_CacheMaxHeight = params.m_CacheMaxHeight; |
| 203 | |
| 204 | uint16_t cell_width = dmMath::Max(8U, params.m_CacheCellWidth); |
| 205 | uint16_t cell_height = dmMath::Max(8U, params.m_CacheCellHeight); |
| 206 | |
| 207 | font_map->m_CacheCellPadding = params.m_CacheCellPadding; |
| 208 | font_map->m_CacheChannels = params.m_GlyphChannels; |
| 209 | |
| 210 | SetupCache(font_map, font_map->m_CacheWidth, font_map->m_CacheHeight, |
| 211 | cell_width, cell_height, params.m_CacheCellMaxAscent); |
| 212 | |
| 213 | switch (font_map->m_CacheChannels) |
| 214 | { |
| 215 | case 1: |
| 216 | font_map->m_CacheFormat = dmGraphics::TEXTURE_FORMAT_LUMINANCE; |
| 217 | break; |
| 218 | case 3: |
| 219 | font_map->m_CacheFormat = dmGraphics::TEXTURE_FORMAT_RGB; |
| 220 | break; |
| 221 | case 4: |
| 222 | font_map->m_CacheFormat = dmGraphics::TEXTURE_FORMAT_RGBA; |
| 223 | break; |
| 224 | default: |
| 225 | dmLogError("Invalid channel count for glyph data: %u", params.m_GlyphChannels); |
| 226 | return false; |
| 227 | }; |
| 228 | |
| 229 | if (params.m_ImageFormat == dmRenderDDF::TYPE_BITMAP) |
| 230 | { |
| 231 | dmGraphics::GetDefaultTextureFilters(graphics_context, font_map->m_MinFilter, font_map->m_MagFilter); |
no test coverage detected