mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-26 13:37:00 +00:00
InputText, ImDrawList: Fixed assert triggering when drawing single line of text with more than ~16 KB characters. (#3349)
This commit is contained in:
parent
fb7f6cab8c
commit
550f110354
@ -37,6 +37,11 @@ HOW TO UPDATE?
|
|||||||
|
|
||||||
Other Changes:
|
Other Changes:
|
||||||
|
|
||||||
|
- InputText, ImDrawList: Fixed assert triggering when drawing single line of text with more
|
||||||
|
than ~16 KB characters. (Note that current code is going to show corrupted display if after
|
||||||
|
clipping, more than 16 KB characters are visible in the same low-level ImDrawList::RenderText
|
||||||
|
call. ImGui-level functions such as TextUnformatted() are not affected. This is quite rare
|
||||||
|
but it will be addressed later). (#3349)
|
||||||
- ImDrawList: Thick anti-aliased strokes (> 1.0f) with integer thickness now use a texture-based
|
- ImDrawList: Thick anti-aliased strokes (> 1.0f) with integer thickness now use a texture-based
|
||||||
path, reducing the amount of vertices/indices and CPU/GPU usage. (#3245) [@Shironekoben]
|
path, reducing the amount of vertices/indices and CPU/GPU usage. (#3245) [@Shironekoben]
|
||||||
- This change will facilitate the wider use of thick borders in future style changes.
|
- This change will facilitate the wider use of thick borders in future style changes.
|
||||||
|
@ -308,7 +308,8 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
|
|||||||
- font/atlas: dynamic font atlas to avoid baking huge ranges into bitmap and make scaling easier.
|
- font/atlas: dynamic font atlas to avoid baking huge ranges into bitmap and make scaling easier.
|
||||||
- font/draw: vertical and/or rotated text renderer (#705) - vertical is easier clipping wise
|
- font/draw: vertical and/or rotated text renderer (#705) - vertical is easier clipping wise
|
||||||
- font/draw: need to be able to specify wrap start position.
|
- font/draw: need to be able to specify wrap start position.
|
||||||
- font/draw: better reserve policy for large horizontal block of text (shouldn't reserve for all clipped lines)
|
- font/draw: better reserve policy for large horizontal block of text (shouldn't reserve for all clipped lines). also see #3349.
|
||||||
|
- font/draw: fix for drawing 16k+ visible characters in same call.
|
||||||
- font/draw: underline, squiggle line rendering helpers.
|
- font/draw: underline, squiggle line rendering helpers.
|
||||||
- font: optimization: for monospace font (like the default one) we can trim IndexXAdvance as long as trailing value is == FallbackXAdvance (need to make sure TAB is still correct), would save on cache line.
|
- font: optimization: for monospace font (like the default one) we can trim IndexXAdvance as long as trailing value is == FallbackXAdvance (need to make sure TAB is still correct), would save on cache line.
|
||||||
- font: add support for kerning, probably optional. A) perhaps default to (32..128)^2 matrix ~ 9K entries = 36KB, then hash for non-ascii?. B) or sparse lookup into per-char list?
|
- font: add support for kerning, probably optional. A) perhaps default to (32..128)^2 matrix ~ 9K entries = 36KB, then hash for non-ascii?. B) or sparse lookup into per-char list?
|
||||||
|
@ -517,7 +517,7 @@ void ImDrawList::_OnChangedVtxOffset()
|
|||||||
// We don't need to compare curr_cmd->VtxOffset != _CmdHeader.VtxOffset because we know it'll be different at the time we call this.
|
// We don't need to compare curr_cmd->VtxOffset != _CmdHeader.VtxOffset because we know it'll be different at the time we call this.
|
||||||
_VtxCurrentIdx = 0;
|
_VtxCurrentIdx = 0;
|
||||||
ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
|
ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
|
||||||
IM_ASSERT(curr_cmd->VtxOffset != _CmdHeader.VtxOffset);
|
//IM_ASSERT(curr_cmd->VtxOffset != _CmdHeader.VtxOffset); // See #3349
|
||||||
if (curr_cmd->ElemCount != 0)
|
if (curr_cmd->ElemCount != 0)
|
||||||
{
|
{
|
||||||
AddDrawCmd();
|
AddDrawCmd();
|
||||||
@ -582,6 +582,9 @@ void ImDrawList::PrimReserve(int idx_count, int vtx_count)
|
|||||||
IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
|
IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
|
||||||
if (sizeof(ImDrawIdx) == 2 && (_VtxCurrentIdx + vtx_count >= (1 << 16)) && (Flags & ImDrawListFlags_AllowVtxOffset))
|
if (sizeof(ImDrawIdx) == 2 && (_VtxCurrentIdx + vtx_count >= (1 << 16)) && (Flags & ImDrawListFlags_AllowVtxOffset))
|
||||||
{
|
{
|
||||||
|
// FIXME: In theory we should be testing that vtx_count <64k here.
|
||||||
|
// In practice, RenderText() relies on reserving ahead for a worst case scenario so it is currently useful for us
|
||||||
|
// to not make that check until we rework the text functions to handle clipping and large horizontal lines better.
|
||||||
_CmdHeader.VtxOffset = VtxBuffer.Size;
|
_CmdHeader.VtxOffset = VtxBuffer.Size;
|
||||||
_OnChangedVtxOffset();
|
_OnChangedVtxOffset();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user