mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	ImFontAtlas: Added 'bool TexPixelsUseColors' output to help backend decide of underlying texture format. (#3369, #3844)
This commit is contained in:
		@@ -51,6 +51,8 @@ Other Changes:
 | 
			
		||||
- Window: Shrink close button hit-testing region when it covers an abnormally high portion of the window visible
 | 
			
		||||
  area (e.g. when window is collapsed + moved in a corner) to facilitate moving the window away. (#3825)
 | 
			
		||||
- Added GetAllocatorFunctions() to facilitate sharing allocators accross DLL boundaries. (#3836)
 | 
			
		||||
- ImFontAtlas: Added 'bool TexPixelsUseColors' output to help backend decide of underlying texture format. (#3369)
 | 
			
		||||
  This can currently only ever be set by the Freetype renderer.
 | 
			
		||||
- ImDrawList: AddCircle, AddCircleFilled(): Tweaked default segment count calculation to honor MaxError
 | 
			
		||||
  with more accuracy. Made default segment count always even for better looking result. (#3808) [@thedmd]
 | 
			
		||||
- ImDrawList: AddCircle, AddCircleFilled(): New default for style.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								imgui.h
									
									
									
									
									
								
							@@ -2639,11 +2639,12 @@ struct ImFontAtlas
 | 
			
		||||
    //-------------------------------------------
 | 
			
		||||
 | 
			
		||||
    // You can request arbitrary rectangles to be packed into the atlas, for your own purposes.
 | 
			
		||||
    // After calling Build(), you can query the rectangle position and render your pixels.
 | 
			
		||||
    // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point),
 | 
			
		||||
    // so you can render e.g. custom colorful icons and use them as regular glyphs.
 | 
			
		||||
    // Read docs/FONTS.md for more details about using colorful icons.
 | 
			
		||||
    // Note: this API may be redesigned later in order to support multi-monitor varying DPI settings.
 | 
			
		||||
    // - After calling Build(), you can query the rectangle position and render your pixels.
 | 
			
		||||
    // - If you render colored output, set 'atlas->TexPixelsUseColors = true' as this may help some backends decide of prefered texture format.
 | 
			
		||||
    // - You can also request your rectangles to be mapped as font glyph (given a font + Unicode point),
 | 
			
		||||
    //   so you can render e.g. custom colorful icons and use them as regular glyphs.
 | 
			
		||||
    // - Read docs/FONTS.md for more details about using colorful icons.
 | 
			
		||||
    // - Note: this API may be redesigned later in order to support multi-monitor varying DPI settings.
 | 
			
		||||
    IMGUI_API int               AddCustomRectRegular(int width, int height);
 | 
			
		||||
    IMGUI_API int               AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0, 0));
 | 
			
		||||
    ImFontAtlasCustomRect*      GetCustomRectByIndex(int index) { IM_ASSERT(index >= 0); return &CustomRects[index]; }
 | 
			
		||||
@@ -2656,14 +2657,15 @@ struct ImFontAtlas
 | 
			
		||||
    // Members
 | 
			
		||||
    //-------------------------------------------
 | 
			
		||||
 | 
			
		||||
    bool                        Locked;             // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert.
 | 
			
		||||
    ImFontAtlasFlags            Flags;              // Build flags (see ImFontAtlasFlags_)
 | 
			
		||||
    ImTextureID                 TexID;              // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
 | 
			
		||||
    int                         TexDesiredWidth;    // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
 | 
			
		||||
    int                         TexGlyphPadding;    // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0.
 | 
			
		||||
    bool                        Locked;             // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert.
 | 
			
		||||
 | 
			
		||||
    // [Internal]
 | 
			
		||||
    // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you.
 | 
			
		||||
    bool                        TexPixelsUseColors; // Tell whether our texture data is known to use colors (rather than just alpha channel), in order to help backend select a format.
 | 
			
		||||
    unsigned char*              TexPixelsAlpha8;    // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
 | 
			
		||||
    unsigned int*               TexPixelsRGBA32;    // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
 | 
			
		||||
    int                         TexWidth;           // Texture width calculated during Build().
 | 
			
		||||
 
 | 
			
		||||
@@ -1824,6 +1824,7 @@ void    ImFontAtlas::ClearTexData()
 | 
			
		||||
        IM_FREE(TexPixelsRGBA32);
 | 
			
		||||
    TexPixelsAlpha8 = NULL;
 | 
			
		||||
    TexPixelsRGBA32 = NULL;
 | 
			
		||||
    TexPixelsUseColors = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void    ImFontAtlas::ClearFonts()
 | 
			
		||||
 
 | 
			
		||||
@@ -2556,11 +2556,11 @@ IMGUI_API void      ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
 | 
			
		||||
extern void                 ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_IdInfo(ImGuiContext* ctx, ImGuiDataType data_type, ImGuiID id, const void* data_id);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_IdInfo(ImGuiContext* ctx, ImGuiDataType data_type, ImGuiID id, const void* data_id, const void* data_id_end);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
 | 
			
		||||
extern void         ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id);
 | 
			
		||||
extern void         ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
 | 
			
		||||
extern void         ImGuiTestEngineHook_IdInfo(ImGuiContext* ctx, ImGuiDataType data_type, ImGuiID id, const void* data_id);
 | 
			
		||||
extern void         ImGuiTestEngineHook_IdInfo(ImGuiContext* ctx, ImGuiDataType data_type, ImGuiID id, const void* data_id, const void* data_id_end);
 | 
			
		||||
extern void         ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
 | 
			
		||||
#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID)                 if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemAdd(&g, _BB, _ID)               // Register item bounding box
 | 
			
		||||
#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS)      if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS)   // Register item label and status flags (optional)
 | 
			
		||||
#define IMGUI_TEST_ENGINE_LOG(_FMT,...)                     if (g.TestEngineHookItems) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__)          // Custom log entry from user land into test log
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2021/03/02: set 'atlas->TexPixelsUseColors = true' to help some backends with deciding of a prefered texture format.
 | 
			
		||||
//  2021/01/28: added support for color-layered glyphs via ImGuiFreeTypeBuilderFlags_LoadColor (require Freetype 2.10+).
 | 
			
		||||
//  2021/01/26: simplified integration by using '#define IMGUI_ENABLE_FREETYPE'.
 | 
			
		||||
//              renamed ImGuiFreeType::XXX flags to ImGuiFreeTypeBuilderFlags_XXX for consistency with other API. removed ImGuiFreeType::BuildFontAtlas().
 | 
			
		||||
@@ -105,7 +106,7 @@ namespace
 | 
			
		||||
        FT_Int      OffsetX;            // The distance from the origin ("pen position") to the left of the glyph.
 | 
			
		||||
        FT_Int      OffsetY;            // The distance from the origin to the top of the glyph. This is usually a value < 0.
 | 
			
		||||
        float       AdvanceX;           // The distance from the origin to the origin of the next glyph. This is usually a value > 0.
 | 
			
		||||
        bool        IsColored;
 | 
			
		||||
        bool        IsColored;          // The glyph is colored
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Font parameters and metrics.
 | 
			
		||||
@@ -605,6 +606,7 @@ bool ImFontAtlasBuildWithFreeTypeEx(FT_Library ft_library, ImFontAtlas* atlas, u
 | 
			
		||||
 | 
			
		||||
    // 8. Copy rasterized font characters back into the main texture
 | 
			
		||||
    // 9. Setup ImFont and glyphs for runtime
 | 
			
		||||
    bool tex_use_colors = false;
 | 
			
		||||
    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
 | 
			
		||||
    {
 | 
			
		||||
        ImFontBuildSrcDataFT& src_tmp = src_tmp_array[src_i];
 | 
			
		||||
@@ -668,13 +670,15 @@ bool ImFontAtlasBuildWithFreeTypeEx(FT_Library ft_library, ImFontAtlas* atlas, u
 | 
			
		||||
            float v1 = (ty + info.Height) / (float)atlas->TexHeight;
 | 
			
		||||
            dst_font->AddGlyph(&cfg, (ImWchar)src_glyph.Codepoint, x0, y0, x1, y1, u0, v0, u1, v1, info.AdvanceX);
 | 
			
		||||
 | 
			
		||||
            IM_ASSERT(dst_font->Glyphs.back().Codepoint == src_glyph.Codepoint);
 | 
			
		||||
            ImFontGlyph* dst_glyph = &dst_font->Glyphs.back();
 | 
			
		||||
            IM_ASSERT(dst_glyph->Codepoint == src_glyph.Codepoint);
 | 
			
		||||
            if (src_glyph.Info.IsColored)
 | 
			
		||||
                dst_font->Glyphs.back().Colored = true;
 | 
			
		||||
                dst_glyph->Colored = tex_use_colors = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        src_tmp.Rects = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    atlas->TexPixelsUseColors = tex_use_colors;
 | 
			
		||||
 | 
			
		||||
    // Cleanup
 | 
			
		||||
    for (int buf_i = 0; buf_i < buf_bitmap_buffers.Size; buf_i++)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user