{"action":"created","issue":{"url":"https://api.github.com/repos/xbmc/xbmc/issues/7201","labels_url":"https://api.github.com/repos/xbmc/xbmc/issues/7201/labels{/name}","comments_url":"https://api.github.com/repos/xbmc/xbmc/issues/7201/comments","events_url":"https://api.github.com/repos/xbmc/xbmc/issues/7201/events","html_url":"https://github.com/xbmc/xbmc/pull/7201","id":82472051,"number":7201,"title":"Fix for font corruption","user":{"login":"bavison","id":3324657,"avatar_url":"https://avatars.githubusercontent.com/u/3324657?v=3","gravatar_id":"","url":"https://api.github.com/users/bavison","html_url":"https://github.com/bavison","followers_url":"https://api.github.com/users/bavison/followers","following_url":"https://api.github.com/users/bavison/following{/other_user}","gists_url":"https://api.github.com/users/bavison/gists{/gist_id}","starred_url":"https://api.github.com/users/bavison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bavison/subscriptions","organizations_url":"https://api.github.com/users/bavison/orgs","repos_url":"https://api.github.com/users/bavison/repos","events_url":"https://api.github.com/users/bavison/events{/privacy}","received_events_url":"https://api.github.com/users/bavison/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/xbmc/xbmc/labels/Approved","name":"Approved","color":"009800"},{"url":"https://api.github.com/repos/xbmc/xbmc/labels/Fix","name":"Fix","color":"02e10c"},{"url":"https://api.github.com/repos/xbmc/xbmc/labels/Isengard","name":"Isengard","color":"207de5"}],"state":"closed","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/xbmc/xbmc/milestones/61","html_url":"https://github.com/xbmc/xbmc/milestones/Isengard%2015.0-beta2","labels_url":"https://api.github.com/repos/xbmc/xbmc/milestones/61/labels","id":1092095,"number":61,"title":"Isengard 15.0-beta2","description":"","creator":{"login":"MartijnKaijser","id":907436,"avatar_url":"https://avatars.githubusercontent.com/u/907436?v=3","gravatar_id":"","url":"https://api.github.com/users/MartijnKaijser","html_url":"https://github.com/MartijnKaijser","followers_url":"https://api.github.com/users/MartijnKaijser/followers","following_url":"https://api.github.com/users/MartijnKaijser/following{/other_user}","gists_url":"https://api.github.com/users/MartijnKaijser/gists{/gist_id}","starred_url":"https://api.github.com/users/MartijnKaijser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MartijnKaijser/subscriptions","organizations_url":"https://api.github.com/users/MartijnKaijser/orgs","repos_url":"https://api.github.com/users/MartijnKaijser/repos","events_url":"https://api.github.com/users/MartijnKaijser/events{/privacy}","received_events_url":"https://api.github.com/users/MartijnKaijser/received_events","type":"User","site_admin":false},"open_issues":2,"closed_issues":150,"state":"open","created_at":"2015-05-01T06:03:37Z","updated_at":"2015-06-06T11:16:18Z","due_on":"2015-05-30T22:00:00Z","closed_at":null},"comments":12,"created_at":"2015-05-29T15:27:06Z","updated_at":"2015-06-06T17:48:12Z","closed_at":"2015-06-01T18:43:21Z","pull_request":{"url":"https://api.github.com/repos/xbmc/xbmc/pulls/7201","html_url":"https://github.com/xbmc/xbmc/pull/7201","diff_url":"https://github.com/xbmc/xbmc/pull/7201.diff","patch_url":"https://github.com/xbmc/xbmc/pull/7201.patch"},"body":"CGUIFontTTFBase::DrawTextInternal iterates along the characters in the string.\r\nFor each one, it typically calls CGUIFontTTFBase::GetCharacter to (amongst\r\nother things) locate the rasterised glyph for that character/style combination\r\n(where style means bold/italic) within the GPU texture associated with that\r\nfont. If the texture doesn't already contain that glyph, it calls\r\nCGUIFontTTFBase::CacheCharacter to rasterise it and add it to the texture.\r\n\r\nThe texture is made up of constant-height cells, one per glyph, and once the\r\ntexture has filled one row's worth of glyphs it wraps onto the next row; if the\r\ntexture isn't tall enough to accommodate another row then it reallocates it.\r\n\r\nThe problem is that between each CGUIFontTTFBase::GetCharacter call there is a\r\nCGUIFontTTFBase::RenderCharacter which constructs vertices whose u/v\r\ncoordinates are the coordinates within the texture, normalised to the range\r\n0..1. So if the texture is enlarged mid-string, then the vertices for the\r\nearlier characters are incorrect.\r\n\r\nI believe the reason why this wasn't detected before is that in the absence of\r\ncacheing, the multiple re-plots of the string recalculated everything anyway,\r\nso it was only a transient effect."},"comment":{"url":"https://api.github.com/repos/xbmc/xbmc/issues/comments/109625303","html_url":"https://github.com/xbmc/xbmc/pull/7201#issuecomment-109625303","issue_url":"https://api.github.com/repos/xbmc/xbmc/issues/7201","id":109625303,"user":{"login":"popcornmix","id":1053730,"avatar_url":"https://avatars.githubusercontent.com/u/1053730?v=3","gravatar_id":"","url":"https://api.github.com/users/popcornmix","html_url":"https://github.com/popcornmix","followers_url":"https://api.github.com/users/popcornmix/followers","following_url":"https://api.github.com/users/popcornmix/following{/other_user}","gists_url":"https://api.github.com/users/popcornmix/gists{/gist_id}","starred_url":"https://api.github.com/users/popcornmix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/popcornmix/subscriptions","organizations_url":"https://api.github.com/users/popcornmix/orgs","repos_url":"https://api.github.com/users/popcornmix/repos","events_url":"https://api.github.com/users/popcornmix/events{/privacy}","received_events_url":"https://api.github.com/users/popcornmix/received_events","type":"User","site_admin":false},"created_at":"2015-06-06T17:48:12Z","updated_at":"2015-06-06T17:48:12Z","body":"@uNiversaI did this issue start with #4143 ?"}}