https://pharo.fogbugz.com/f/cases/13150/Different-memory-alignment-on-different-platforms


On 28 March 2014 16:42, Igor Stasenko <[email protected]> wrote:

> so, the quick and dirty fix is to put:
>
> CairoGlyph class>>byteAlignment
>
>     NativeBoost platformId = NativeBoostConstants win32PlatformId ifTrue:
> [  ^ 8 ].
>     ^ super byteAlignment
>
> and then:
>
> CairoGlyph rebuildFieldAccessors
> CairoGlyphsArray initialize
>
> (note you must run this snippet each time your image changes platform)..
>
> and i need more time to fix it for real, because it is NB issue, to
> automatically recalculate the structs size
> if it changes platform.. (which also means you cannot store instances of
> struct in image which survive the session)
> ... damn.. that's going to be complicated.
>
> ---
>
>
>
> On 28 March 2014 16:27, Igor Stasenko <[email protected]> wrote:
>
>>
>>
>>
>> On 28 March 2014 16:01, Igor Stasenko <[email protected]> wrote:
>>
>>>
>>> Ookkayy..
>>> so, current status:
>>>
>>>  - finally we got an agreement that big red square because of font
>>> loading issues and font rendering artifacts is two separate issues.
>>> Thanks!
>>> - i am not going to address font-loading issue here and now.. (because
>>> we spent time on it earlier today with Stef already and you should have the
>>> report on it in separate mail).
>>>
>>> - we seem to be agreed that it is best to use same (up-to-date version)
>>> of software when reporting issues to work on them. Thanks again. :)
>>>
>>> - while on linux and mac things seem to be working fine, i can confirm
>>> that there is rendering artifacts (same as reported by Vincent) on Windows.
>>>
>>> so i going to explore what causing this problem..
>>>
>>> ... and found the cause:
>>
>> On windows, for unknown reason, the structure (cairo_glyph_t) uses
>> different memory space alignment than on mac and linux
>>
>> fieldsDesc
>>     ^ #(
>>     ulong        index;
>>     double               x;
>>     double               y;
>>     )
>>
>> on mac and linux , the size of this structure in memory = 4 + 8 + 8 = 20
>> bytes,
>> on windows, however, due to 8-byte alignment, it is  4 + 8 + 8 + (4
>> alignment) bytes...
>>
>> this causing the effect that if you copy array of glyphs in memory,
>> it does not copying whole array by slightly less  (because it uses wrong
>> struct size which is smaller than it is)..
>> and because of that, you got weird artefacts at the tail of string,
>> replaced by misplaced/invalid characters etc..
>> because it is basically read from uninitialized part of memory with
>> random data.
>>
>> i going to fix structure alignment for windows from default 4 bytes to 8
>> bytes..
>> but this is not very good news.. because this affecting many things...
>> (as you can imagine, not only cairo/athens working with external
>> structures, which need to be properly aligned).
>>
>> --
>> Best regards,
>> Igor Stasenko.
>>
>
>
>
> --
> Best regards,
> Igor Stasenko.
>



-- 
Best regards,
Igor Stasenko.

Reply via email to